honovajs 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +366 -0
- package/dist/adapters/db/drizzle.d.ts +7 -0
- package/dist/adapters/db/drizzle.d.ts.map +1 -0
- package/dist/adapters/db/drizzle.js +8 -0
- package/dist/adapters/db/drizzle.js.map +1 -0
- package/dist/adapters/db/index.d.ts +5 -0
- package/dist/adapters/db/index.d.ts.map +1 -0
- package/dist/adapters/db/index.js +5 -0
- package/dist/adapters/db/index.js.map +1 -0
- package/dist/adapters/db/mondel.d.ts +2 -0
- package/dist/adapters/db/mondel.d.ts.map +1 -0
- package/dist/adapters/db/mondel.js +2 -0
- package/dist/adapters/db/mondel.js.map +1 -0
- package/dist/adapters/db/mongodb.d.ts +7 -0
- package/dist/adapters/db/mongodb.d.ts.map +1 -0
- package/dist/adapters/db/mongodb.js +8 -0
- package/dist/adapters/db/mongodb.js.map +1 -0
- package/dist/adapters/db/prisma.d.ts +9 -0
- package/dist/adapters/db/prisma.d.ts.map +1 -0
- package/dist/adapters/db/prisma.js +16 -0
- package/dist/adapters/db/prisma.js.map +1 -0
- package/dist/core/application.d.ts +45 -0
- package/dist/core/application.d.ts.map +1 -0
- package/dist/core/application.js +138 -0
- package/dist/core/application.js.map +1 -0
- package/dist/core/constants.d.ts +9 -0
- package/dist/core/constants.d.ts.map +1 -0
- package/dist/core/constants.js +9 -0
- package/dist/core/constants.js.map +1 -0
- package/dist/core/container/container.d.ts +34 -0
- package/dist/core/container/container.d.ts.map +1 -0
- package/dist/core/container/container.js +243 -0
- package/dist/core/container/container.js.map +1 -0
- package/dist/core/container/index.d.ts +3 -0
- package/dist/core/container/index.d.ts.map +1 -0
- package/dist/core/container/index.js +3 -0
- package/dist/core/container/index.js.map +1 -0
- package/dist/core/container/inject.d.ts +3 -0
- package/dist/core/container/inject.d.ts.map +1 -0
- package/dist/core/container/inject.js +9 -0
- package/dist/core/container/inject.js.map +1 -0
- package/dist/core/decorators/context.d.ts +12 -0
- package/dist/core/decorators/context.d.ts.map +1 -0
- package/dist/core/decorators/context.js +2 -0
- package/dist/core/decorators/context.js.map +1 -0
- package/dist/core/decorators/controller.d.ts +2 -0
- package/dist/core/decorators/controller.d.ts.map +1 -0
- package/dist/core/decorators/controller.js +52 -0
- package/dist/core/decorators/controller.js.map +1 -0
- package/dist/core/decorators/http-methods.d.ts +9 -0
- package/dist/core/decorators/http-methods.d.ts.map +1 -0
- package/dist/core/decorators/http-methods.js +45 -0
- package/dist/core/decorators/http-methods.js.map +1 -0
- package/dist/core/decorators/index.d.ts +8 -0
- package/dist/core/decorators/index.d.ts.map +1 -0
- package/dist/core/decorators/index.js +8 -0
- package/dist/core/decorators/index.js.map +1 -0
- package/dist/core/decorators/inject.d.ts +3 -0
- package/dist/core/decorators/inject.d.ts.map +1 -0
- package/dist/core/decorators/inject.js +8 -0
- package/dist/core/decorators/inject.js.map +1 -0
- package/dist/core/decorators/injectable.d.ts +6 -0
- package/dist/core/decorators/injectable.d.ts.map +1 -0
- package/dist/core/decorators/injectable.js +10 -0
- package/dist/core/decorators/injectable.js.map +1 -0
- package/dist/core/decorators/middleware.d.ts +3 -0
- package/dist/core/decorators/middleware.d.ts.map +1 -0
- package/dist/core/decorators/middleware.js +45 -0
- package/dist/core/decorators/middleware.js.map +1 -0
- package/dist/core/decorators/module.d.ts +3 -0
- package/dist/core/decorators/module.d.ts.map +1 -0
- package/dist/core/decorators/module.js +7 -0
- package/dist/core/decorators/module.js.map +1 -0
- package/dist/core/metadata.d.ts +17 -0
- package/dist/core/metadata.d.ts.map +1 -0
- package/dist/core/metadata.js +72 -0
- package/dist/core/metadata.js.map +1 -0
- package/dist/core/router/index.d.ts +2 -0
- package/dist/core/router/index.d.ts.map +1 -0
- package/dist/core/router/index.js +2 -0
- package/dist/core/router/index.js.map +1 -0
- package/dist/core/router/router.d.ts +14 -0
- package/dist/core/router/router.d.ts.map +1 -0
- package/dist/core/router/router.js +60 -0
- package/dist/core/router/router.js.map +1 -0
- package/dist/core/types.d.ts +29 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +2 -0
- package/dist/core/types.js.map +1 -0
- package/dist/database/index.d.ts +4 -0
- package/dist/database/index.d.ts.map +1 -0
- package/dist/database/index.js +4 -0
- package/dist/database/index.js.map +1 -0
- package/dist/database/manager.d.ts +72 -0
- package/dist/database/manager.d.ts.map +1 -0
- package/dist/database/manager.js +160 -0
- package/dist/database/manager.js.map +1 -0
- package/dist/database/middleware.d.ts +21 -0
- package/dist/database/middleware.d.ts.map +1 -0
- package/dist/database/middleware.js +23 -0
- package/dist/database/middleware.js.map +1 -0
- package/dist/database/types.d.ts +31 -0
- package/dist/database/types.d.ts.map +1 -0
- package/dist/database/types.js +24 -0
- package/dist/database/types.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/middleware/auth/apikey.d.ts +16 -0
- package/dist/middleware/auth/apikey.d.ts.map +1 -0
- package/dist/middleware/auth/apikey.js +37 -0
- package/dist/middleware/auth/apikey.js.map +1 -0
- package/dist/middleware/auth/bearer.d.ts +17 -0
- package/dist/middleware/auth/bearer.d.ts.map +1 -0
- package/dist/middleware/auth/bearer.js +41 -0
- package/dist/middleware/auth/bearer.js.map +1 -0
- package/dist/middleware/auth/index.d.ts +3 -0
- package/dist/middleware/auth/index.d.ts.map +1 -0
- package/dist/middleware/auth/index.js +3 -0
- package/dist/middleware/auth/index.js.map +1 -0
- package/package.json +47 -0
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { createMiddleware } from "hono/factory";
|
|
2
|
+
import { DatabaseManager, } from "./manager";
|
|
3
|
+
export function createDbManagerMiddleware(config) {
|
|
4
|
+
return createMiddleware(async (c, next) => {
|
|
5
|
+
const lifecycleStrategy = config.lifecycle?.strategy ?? "request";
|
|
6
|
+
const manager = new DatabaseManager(c.env, c, config);
|
|
7
|
+
c.set("dbManager", manager);
|
|
8
|
+
try {
|
|
9
|
+
const db = await manager.initialize();
|
|
10
|
+
const dbConnections = manager.connections;
|
|
11
|
+
c.set("db", db);
|
|
12
|
+
c.set("dbConnections", dbConnections);
|
|
13
|
+
c.db = db;
|
|
14
|
+
await next();
|
|
15
|
+
}
|
|
16
|
+
finally {
|
|
17
|
+
if (lifecycleStrategy === "request") {
|
|
18
|
+
await manager.cleanup();
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/database/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,OAAO,EACL,eAAe,GAKhB,MAAM,WAAW,CAAC;AAMnB,MAAM,UAAU,yBAAyB,CAEvC,MAAiB;IAQjB,OAAO,gBAAgB,CAOpB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;QACnB,MAAM,iBAAiB,GAAG,MAAM,CAAC,SAAS,EAAE,QAAQ,IAAI,SAAS,CAAC;QAClE,MAAM,OAAO,GAAG,IAAI,eAAe,CACjC,CAAC,CAAC,GAAG,EACL,CAGE,EACF,MAAM,CACP,CAAC;QACF,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAE5B,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC;YACtC,MAAM,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC;YAE1C,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAChB,CAAC,CAAC,GAAG,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;YAErC,CAAgD,CAAC,EAAE,GAAG,EAAE,CAAC;YAE1D,MAAM,IAAI,EAAE,CAAC;QACf,CAAC;gBAAS,CAAC;YACT,IAAI,iBAAiB,KAAK,SAAS,EAAE,CAAC;gBACpC,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;YAC1B,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { Context } from "hono";
|
|
2
|
+
import type { DatabaseConfig, InferDbConnectionsFromDatabase, InferDbDefaultAndConnections } from "./manager";
|
|
3
|
+
export type DatabaseContext<TDefault = unknown, TConnections extends Record<string, unknown> = Record<string, unknown>> = TDefault & TConnections;
|
|
4
|
+
export type DbContext<Env extends Record<string, unknown>, TDefault = unknown, TConnections extends Record<string, unknown> = Record<string, unknown>> = Context<{
|
|
5
|
+
Bindings: Env;
|
|
6
|
+
Variables: {
|
|
7
|
+
db: DatabaseContext<TDefault, TConnections>;
|
|
8
|
+
dbConnections: TConnections;
|
|
9
|
+
auth?: unknown;
|
|
10
|
+
};
|
|
11
|
+
}> & {
|
|
12
|
+
db: DatabaseContext<TDefault, TConnections>;
|
|
13
|
+
};
|
|
14
|
+
export type DatabaseContextFromConfig<TDatabase extends DatabaseConfig<any, any>> = InferDbDefaultAndConnections<TDatabase>;
|
|
15
|
+
export type DatabaseConnectionsFromConfig<TDatabase extends DatabaseConfig<any, any>> = InferDbConnectionsFromDatabase<TDatabase>;
|
|
16
|
+
export declare function getDb<Env extends Record<string, unknown>, TDefault, TConnections extends Record<string, unknown>>(c: DbContext<Env, TDefault, TConnections>): DatabaseContext<TDefault, TConnections>;
|
|
17
|
+
export declare function getDbConnections<Env extends Record<string, unknown>, TConnections extends Record<string, unknown>>(c: Context<{
|
|
18
|
+
Bindings: Env;
|
|
19
|
+
Variables: {
|
|
20
|
+
dbConnections: TConnections;
|
|
21
|
+
};
|
|
22
|
+
}>): TConnections;
|
|
23
|
+
export declare function getConnectionDbFromContext<Env extends Record<string, unknown>, TConnections extends Record<string, unknown>, TName extends keyof TConnections & string>(c: Context<{
|
|
24
|
+
Bindings: Env;
|
|
25
|
+
Variables: {
|
|
26
|
+
dbConnections: TConnections;
|
|
27
|
+
};
|
|
28
|
+
}>, connectionName: TName): TConnections[TName];
|
|
29
|
+
export type { DatabaseAdapter, DatabaseAdapterConnectArgs, DatabaseConfig, DatabaseConnectionDefinition, DatabaseConnectionDefinitions, DbLifecycleOptions, DbLifecycleStrategy, InferDbConnectionsFromDatabase, InferDbDefaultAndConnections, InferDbDefaultClient, } from "./manager";
|
|
30
|
+
export { defineDatabase, DatabaseManager } from "./manager";
|
|
31
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/database/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAEpC,OAAO,KAAK,EACV,cAAc,EAEd,8BAA8B,EAC9B,4BAA4B,EAC7B,MAAM,WAAW,CAAC;AAEnB,MAAM,MAAM,eAAe,CACzB,QAAQ,GAAG,OAAO,EAClB,YAAY,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IACpE,QAAQ,GAAG,YAAY,CAAC;AAE5B,MAAM,MAAM,SAAS,CACnB,GAAG,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,QAAQ,GAAG,OAAO,EAClB,YAAY,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IACpE,OAAO,CAAC;IACV,QAAQ,EAAE,GAAG,CAAC;IACd,SAAS,EAAE;QACT,EAAE,EAAE,eAAe,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAC5C,aAAa,EAAE,YAAY,CAAC;QAC5B,IAAI,CAAC,EAAE,OAAO,CAAC;KAChB,CAAC;CACH,CAAC,GAAG;IACH,EAAE,EAAE,eAAe,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;CAC7C,CAAC;AAEF,MAAM,MAAM,yBAAyB,CACnC,SAAS,SAAS,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,IACxC,4BAA4B,CAAC,SAAS,CAAC,CAAC;AAE5C,MAAM,MAAM,6BAA6B,CACvC,SAAS,SAAS,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,IACxC,8BAA8B,CAAC,SAAS,CAAC,CAAC;AAE9C,wBAAgB,KAAK,CACnB,GAAG,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,QAAQ,EACR,YAAY,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5C,CAAC,EAAE,SAAS,CAAC,GAAG,EAAE,QAAQ,EAAE,YAAY,CAAC,GAAG,eAAe,CAAC,QAAQ,EAAE,YAAY,CAAC,CAMpF;AAED,wBAAgB,gBAAgB,CAC9B,GAAG,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,YAAY,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAE5C,CAAC,EAAE,OAAO,CAAC;IACT,QAAQ,EAAE,GAAG,CAAC;IACd,SAAS,EAAE;QAAE,aAAa,EAAE,YAAY,CAAA;KAAE,CAAC;CAC5C,CAAC,GACD,YAAY,CAOd;AAED,wBAAgB,0BAA0B,CACxC,GAAG,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,YAAY,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5C,KAAK,SAAS,MAAM,YAAY,GAAG,MAAM,EAEzC,CAAC,EAAE,OAAO,CAAC;IACT,QAAQ,EAAE,GAAG,CAAC;IACd,SAAS,EAAE;QAAE,aAAa,EAAE,YAAY,CAAA;KAAE,CAAC;CAC5C,CAAC,EACF,cAAc,EAAE,KAAK,GACpB,YAAY,CAAC,KAAK,CAAC,CASrB;AAED,YAAY,EACV,eAAe,EACf,0BAA0B,EAC1B,cAAc,EACd,4BAA4B,EAC5B,6BAA6B,EAC7B,kBAAkB,EAClB,mBAAmB,EACnB,8BAA8B,EAC9B,4BAA4B,EAC5B,oBAAoB,GACrB,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export function getDb(c) {
|
|
2
|
+
const db = c.get("db") || c.db;
|
|
3
|
+
if (!db) {
|
|
4
|
+
throw new Error("Database context not available. Ensure DB middleware is applied.");
|
|
5
|
+
}
|
|
6
|
+
return db;
|
|
7
|
+
}
|
|
8
|
+
export function getDbConnections(c) {
|
|
9
|
+
const dbConnections = c.get("dbConnections");
|
|
10
|
+
if (!dbConnections) {
|
|
11
|
+
throw new Error("Database connections are not available. Ensure DB middleware is applied.");
|
|
12
|
+
}
|
|
13
|
+
return dbConnections;
|
|
14
|
+
}
|
|
15
|
+
export function getConnectionDbFromContext(c, connectionName) {
|
|
16
|
+
const connections = getDbConnections(c);
|
|
17
|
+
const connection = connections[connectionName];
|
|
18
|
+
if (!connection) {
|
|
19
|
+
throw new Error(`Connection \"${connectionName}\" not found in context.`);
|
|
20
|
+
}
|
|
21
|
+
return connection;
|
|
22
|
+
}
|
|
23
|
+
export { defineDatabase, DatabaseManager } from "./manager";
|
|
24
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/database/types.ts"],"names":[],"mappings":"AAqCA,MAAM,UAAU,KAAK,CAInB,CAAyC;IACzC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;IAC/B,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;IACtF,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAI9B,CAGE;IAEF,MAAM,aAAa,GAAG,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC7C,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,0EAA0E,CAAC,CAAC;IAC9F,CAAC;IAED,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,0BAA0B,CAKxC,CAGE,EACF,cAAqB;IAErB,MAAM,WAAW,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;IACxC,MAAM,UAAU,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC;IAE/C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,gBAAgB,cAAc,0BAA0B,CAAC,CAAC;IAC5E,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAeD,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export * from "./core/application";
|
|
2
|
+
export * from "./core/constants";
|
|
3
|
+
export * from "./core/types";
|
|
4
|
+
export * from "./core/container";
|
|
5
|
+
export * from "./core/decorators";
|
|
6
|
+
export * from "./core/router";
|
|
7
|
+
export * from "./database";
|
|
8
|
+
export * from "./middleware/auth";
|
|
9
|
+
export * from "./adapters/db";
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAE9B,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export * from "./core/application";
|
|
2
|
+
export * from "./core/constants";
|
|
3
|
+
export * from "./core/types";
|
|
4
|
+
export * from "./core/container";
|
|
5
|
+
export * from "./core/decorators";
|
|
6
|
+
export * from "./core/router";
|
|
7
|
+
export * from "./database";
|
|
8
|
+
export * from "./middleware/auth";
|
|
9
|
+
export * from "./adapters/db";
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAE9B,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { MiddlewareHandler } from "hono";
|
|
2
|
+
export interface ApiKeyPrincipal {
|
|
3
|
+
id?: string;
|
|
4
|
+
[key: string]: unknown;
|
|
5
|
+
}
|
|
6
|
+
export interface UseApiKeyOptions<Env extends Record<string, unknown> = Record<string, unknown>, Principal extends ApiKeyPrincipal = ApiKeyPrincipal> {
|
|
7
|
+
header?: string;
|
|
8
|
+
verify: (apiKey: string, context: {
|
|
9
|
+
env: Env;
|
|
10
|
+
request: Request;
|
|
11
|
+
}) => Promise<Principal | null> | Principal | null;
|
|
12
|
+
onError?: (reason: "missing_api_key" | "invalid_api_key", c: any) => Response;
|
|
13
|
+
}
|
|
14
|
+
export declare function UseApiKey<Env extends Record<string, unknown>, Principal extends ApiKeyPrincipal = ApiKeyPrincipal>(options: UseApiKeyOptions<Env, Principal>): ClassDecorator & MethodDecorator;
|
|
15
|
+
export declare function ApiKeyAuth<Env extends Record<string, unknown>, Principal extends ApiKeyPrincipal = ApiKeyPrincipal>(options: UseApiKeyOptions<Env, Principal>): MiddlewareHandler;
|
|
16
|
+
//# sourceMappingURL=apikey.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apikey.d.ts","sourceRoot":"","sources":["../../../src/middleware/auth/apikey.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAI9C,MAAM,WAAW,eAAe;IAC9B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB,CAC/B,GAAG,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7D,SAAS,SAAS,eAAe,GAAG,eAAe;IAEnD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE;QAChC,GAAG,EAAE,GAAG,CAAC;QACT,OAAO,EAAE,OAAO,CAAC;KAClB,KAAK,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC;IACnD,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,iBAAiB,GAAG,iBAAiB,EAAE,CAAC,EAAE,GAAG,KAAK,QAAQ,CAAC;CAC/E;AA8CD,wBAAgB,SAAS,CACvB,GAAG,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,SAAS,SAAS,eAAe,GAAG,eAAe,EACnD,OAAO,EAAE,gBAAgB,CAAC,GAAG,EAAE,SAAS,CAAC,oCAE1C;AAED,wBAAgB,UAAU,CACxB,GAAG,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,SAAS,SAAS,eAAe,GAAG,eAAe,EACnD,OAAO,EAAE,gBAAgB,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,iBAAiB,CAE9D"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { UseMiddleware } from "../../core/decorators/middleware";
|
|
2
|
+
function defaultAuthError(reason) {
|
|
3
|
+
const message = reason === "missing_api_key"
|
|
4
|
+
? "Unauthorized: Missing API key"
|
|
5
|
+
: "Unauthorized: Invalid API key";
|
|
6
|
+
return Response.json({
|
|
7
|
+
error: {
|
|
8
|
+
code: "unauthorized",
|
|
9
|
+
message,
|
|
10
|
+
},
|
|
11
|
+
}, { status: 401 });
|
|
12
|
+
}
|
|
13
|
+
function createApiKeyMiddleware(options) {
|
|
14
|
+
const headerName = (options.header ?? "x-api-key").toLowerCase();
|
|
15
|
+
return async (c, next) => {
|
|
16
|
+
const apiKey = c.req.header(headerName);
|
|
17
|
+
if (!apiKey) {
|
|
18
|
+
return options.onError?.("missing_api_key", c) ?? defaultAuthError("missing_api_key");
|
|
19
|
+
}
|
|
20
|
+
const principal = await options.verify(apiKey, {
|
|
21
|
+
env: c.env,
|
|
22
|
+
request: c.req.raw,
|
|
23
|
+
});
|
|
24
|
+
if (!principal) {
|
|
25
|
+
return options.onError?.("invalid_api_key", c) ?? defaultAuthError("invalid_api_key");
|
|
26
|
+
}
|
|
27
|
+
c.set("auth", principal);
|
|
28
|
+
await next();
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export function UseApiKey(options) {
|
|
32
|
+
return UseMiddleware(createApiKeyMiddleware(options));
|
|
33
|
+
}
|
|
34
|
+
export function ApiKeyAuth(options) {
|
|
35
|
+
return createApiKeyMiddleware(options);
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=apikey.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apikey.js","sourceRoot":"","sources":["../../../src/middleware/auth/apikey.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAmBjE,SAAS,gBAAgB,CAAC,MAA6C;IACrE,MAAM,OAAO,GACX,MAAM,KAAK,iBAAiB;QAC1B,CAAC,CAAC,+BAA+B;QACjC,CAAC,CAAC,+BAA+B,CAAC;IAEtC,OAAO,QAAQ,CAAC,IAAI,CAClB;QACE,KAAK,EAAE;YACL,IAAI,EAAE,cAAc;YACpB,OAAO;SACR;KACF,EACD,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAG7B,OAAyC;IACzC,MAAM,UAAU,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,WAAW,CAAC,CAAC,WAAW,EAAE,CAAC;IAEjE,OAAO,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;QACvB,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAExC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,iBAAiB,EAAE,CAAC,CAAC,IAAI,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;QACxF,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE;YAC7C,GAAG,EAAE,CAAC,CAAC,GAAU;YACjB,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG;SACnB,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,iBAAiB,EAAE,CAAC,CAAC,IAAI,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;QACxF,CAAC;QAED,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QACzB,MAAM,IAAI,EAAE,CAAC;IACf,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,SAAS,CAGvB,OAAyC;IACzC,OAAO,aAAa,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,UAAU,CAGxB,OAAyC;IACzC,OAAO,sBAAsB,CAAC,OAAO,CAAC,CAAC;AACzC,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { MiddlewareHandler } from "hono";
|
|
2
|
+
export interface BearerAuthPrincipal {
|
|
3
|
+
id?: string;
|
|
4
|
+
[key: string]: unknown;
|
|
5
|
+
}
|
|
6
|
+
export interface UseBearerAuthOptions<Env extends Record<string, unknown> = Record<string, unknown>, Principal extends BearerAuthPrincipal = BearerAuthPrincipal> {
|
|
7
|
+
header?: string;
|
|
8
|
+
scheme?: string;
|
|
9
|
+
verify: (token: string, context: {
|
|
10
|
+
env: Env;
|
|
11
|
+
request: Request;
|
|
12
|
+
}) => Promise<Principal | null> | Principal | null;
|
|
13
|
+
onError?: (reason: "missing_token" | "invalid_token", c: any) => Response;
|
|
14
|
+
}
|
|
15
|
+
export declare function UseBearerAuth<Env extends Record<string, unknown>, Principal extends BearerAuthPrincipal = BearerAuthPrincipal>(options: UseBearerAuthOptions<Env, Principal>): ClassDecorator & MethodDecorator;
|
|
16
|
+
export declare function BearerAuth<Env extends Record<string, unknown>, Principal extends BearerAuthPrincipal = BearerAuthPrincipal>(options: UseBearerAuthOptions<Env, Principal>): MiddlewareHandler;
|
|
17
|
+
//# sourceMappingURL=bearer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bearer.d.ts","sourceRoot":"","sources":["../../../src/middleware/auth/bearer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAI9C,MAAM,WAAW,mBAAmB;IAClC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB,CACnC,GAAG,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7D,SAAS,SAAS,mBAAmB,GAAG,mBAAmB;IAE3D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE;QAC/B,GAAG,EAAE,GAAG,CAAC;QACT,OAAO,EAAE,OAAO,CAAC;KAClB,KAAK,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC;IACnD,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,GAAG,eAAe,EAAE,CAAC,EAAE,GAAG,KAAK,QAAQ,CAAC;CAC3E;AAkDD,wBAAgB,aAAa,CAC3B,GAAG,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,SAAS,SAAS,mBAAmB,GAAG,mBAAmB,EAC3D,OAAO,EAAE,oBAAoB,CAAC,GAAG,EAAE,SAAS,CAAC,oCAE9C;AAED,wBAAgB,UAAU,CACxB,GAAG,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,SAAS,SAAS,mBAAmB,GAAG,mBAAmB,EAC3D,OAAO,EAAE,oBAAoB,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,iBAAiB,CAElE"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { UseMiddleware } from "../../core/decorators/middleware";
|
|
2
|
+
function defaultAuthError(reason) {
|
|
3
|
+
const message = reason === "missing_token"
|
|
4
|
+
? "Unauthorized: Missing bearer token"
|
|
5
|
+
: "Unauthorized: Invalid bearer token";
|
|
6
|
+
return Response.json({
|
|
7
|
+
error: {
|
|
8
|
+
code: "unauthorized",
|
|
9
|
+
message,
|
|
10
|
+
},
|
|
11
|
+
}, { status: 401 });
|
|
12
|
+
}
|
|
13
|
+
function createBearerAuthMiddleware(options) {
|
|
14
|
+
const headerName = (options.header ?? "authorization").toLowerCase();
|
|
15
|
+
const scheme = options.scheme ?? "Bearer";
|
|
16
|
+
return async (c, next) => {
|
|
17
|
+
const rawHeader = c.req.header(headerName);
|
|
18
|
+
const token = rawHeader?.startsWith(`${scheme} `)
|
|
19
|
+
? rawHeader.slice(`${scheme} `.length).trim()
|
|
20
|
+
: undefined;
|
|
21
|
+
if (!token) {
|
|
22
|
+
return options.onError?.("missing_token", c) ?? defaultAuthError("missing_token");
|
|
23
|
+
}
|
|
24
|
+
const principal = await options.verify(token, {
|
|
25
|
+
env: c.env,
|
|
26
|
+
request: c.req.raw,
|
|
27
|
+
});
|
|
28
|
+
if (!principal) {
|
|
29
|
+
return options.onError?.("invalid_token", c) ?? defaultAuthError("invalid_token");
|
|
30
|
+
}
|
|
31
|
+
c.set("auth", principal);
|
|
32
|
+
await next();
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
export function UseBearerAuth(options) {
|
|
36
|
+
return UseMiddleware(createBearerAuthMiddleware(options));
|
|
37
|
+
}
|
|
38
|
+
export function BearerAuth(options) {
|
|
39
|
+
return createBearerAuthMiddleware(options);
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=bearer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bearer.js","sourceRoot":"","sources":["../../../src/middleware/auth/bearer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAoBjE,SAAS,gBAAgB,CAAC,MAAyC;IACjE,MAAM,OAAO,GACX,MAAM,KAAK,eAAe;QACxB,CAAC,CAAC,oCAAoC;QACtC,CAAC,CAAC,oCAAoC,CAAC;IAE3C,OAAO,QAAQ,CAAC,IAAI,CAClB;QACE,KAAK,EAAE;YACL,IAAI,EAAE,cAAc;YACpB,OAAO;SACR;KACF,EACD,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAC;AACJ,CAAC;AAED,SAAS,0BAA0B,CAGjC,OAA6C;IAC7C,MAAM,UAAU,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,eAAe,CAAC,CAAC,WAAW,EAAE,CAAC;IACrE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,QAAQ,CAAC;IAE1C,OAAO,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;QACvB,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAG,SAAS,EAAE,UAAU,CAAC,GAAG,MAAM,GAAG,CAAC;YAC/C,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE;YAC7C,CAAC,CAAC,SAAS,CAAC;QAEd,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,eAAe,EAAE,CAAC,CAAC,IAAI,gBAAgB,CAAC,eAAe,CAAC,CAAC;QACpF,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE;YAC5C,GAAG,EAAE,CAAC,CAAC,GAAU;YACjB,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG;SACnB,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,eAAe,EAAE,CAAC,CAAC,IAAI,gBAAgB,CAAC,eAAe,CAAC,CAAC;QACpF,CAAC;QAED,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QACzB,MAAM,IAAI,EAAE,CAAC;IACf,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAG3B,OAA6C;IAC7C,OAAO,aAAa,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,UAAU,CAGxB,OAA6C;IAC7C,OAAO,0BAA0B,CAAC,OAAO,CAAC,CAAC;AAC7C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/middleware/auth/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/middleware/auth/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "honovajs",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "Nest-like framework for Cloudflare Workers powered by Hono with modules, decorators, DI, and typed database middleware.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"main": "dist/index.js",
|
|
8
|
+
"types": "dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"import": "./dist/index.js"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"sideEffects": false,
|
|
16
|
+
"engines": {
|
|
17
|
+
"node": ">=18"
|
|
18
|
+
},
|
|
19
|
+
"keywords": [
|
|
20
|
+
"cloudflare",
|
|
21
|
+
"workers",
|
|
22
|
+
"hono",
|
|
23
|
+
"nestjs",
|
|
24
|
+
"dependency-injection",
|
|
25
|
+
"decorators",
|
|
26
|
+
"typescript",
|
|
27
|
+
"framework",
|
|
28
|
+
"api"
|
|
29
|
+
],
|
|
30
|
+
"files": [
|
|
31
|
+
"dist"
|
|
32
|
+
],
|
|
33
|
+
"scripts": {
|
|
34
|
+
"build": "tsc -p tsconfig.build.json",
|
|
35
|
+
"typecheck": "tsc --noEmit",
|
|
36
|
+
"test": "vitest run",
|
|
37
|
+
"prepublishOnly": "npm run typecheck && npm run test && npm run build"
|
|
38
|
+
},
|
|
39
|
+
"dependencies": {
|
|
40
|
+
"hono": "^4.11.7"
|
|
41
|
+
},
|
|
42
|
+
"devDependencies": {
|
|
43
|
+
"@types/node": "^22.13.10",
|
|
44
|
+
"typescript": "^5.8.2",
|
|
45
|
+
"vitest": "^2.1.8"
|
|
46
|
+
}
|
|
47
|
+
}
|