trustline 0.0.1 → 0.1.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.
Files changed (62) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +339 -0
  3. package/dist/adapters/mysql/index.cjs +199 -0
  4. package/dist/adapters/mysql/index.cjs.map +1 -0
  5. package/dist/adapters/mysql/index.d.cts +6 -0
  6. package/dist/adapters/mysql/index.d.ts +6 -0
  7. package/dist/adapters/mysql/index.js +21 -0
  8. package/dist/adapters/mysql/index.js.map +1 -0
  9. package/dist/adapters/postgres/index.cjs +199 -0
  10. package/dist/adapters/postgres/index.cjs.map +1 -0
  11. package/dist/adapters/postgres/index.d.cts +6 -0
  12. package/dist/adapters/postgres/index.d.ts +6 -0
  13. package/dist/adapters/postgres/index.js +21 -0
  14. package/dist/adapters/postgres/index.js.map +1 -0
  15. package/dist/adapters/sqlite/index.cjs +216 -0
  16. package/dist/adapters/sqlite/index.cjs.map +1 -0
  17. package/dist/adapters/sqlite/index.d.cts +6 -0
  18. package/dist/adapters/sqlite/index.d.ts +6 -0
  19. package/dist/adapters/sqlite/index.js +28 -0
  20. package/dist/adapters/sqlite/index.js.map +1 -0
  21. package/dist/chunk-CTPFKR4O.js +157 -0
  22. package/dist/chunk-CTPFKR4O.js.map +1 -0
  23. package/dist/chunk-GF3NKEEK.js +18 -0
  24. package/dist/chunk-GF3NKEEK.js.map +1 -0
  25. package/dist/client/index.cjs +141 -0
  26. package/dist/client/index.cjs.map +1 -0
  27. package/dist/client/index.d.cts +18 -0
  28. package/dist/client/index.d.ts +18 -0
  29. package/dist/client/index.js +104 -0
  30. package/dist/client/index.js.map +1 -0
  31. package/dist/frameworks/express/index.cjs +121 -0
  32. package/dist/frameworks/express/index.cjs.map +1 -0
  33. package/dist/frameworks/express/index.d.cts +18 -0
  34. package/dist/frameworks/express/index.d.ts +18 -0
  35. package/dist/frameworks/express/index.js +83 -0
  36. package/dist/frameworks/express/index.js.map +1 -0
  37. package/dist/frameworks/fastify/index.cjs +158 -0
  38. package/dist/frameworks/fastify/index.cjs.map +1 -0
  39. package/dist/frameworks/fastify/index.d.cts +25 -0
  40. package/dist/frameworks/fastify/index.d.ts +25 -0
  41. package/dist/frameworks/fastify/index.js +120 -0
  42. package/dist/frameworks/fastify/index.js.map +1 -0
  43. package/dist/frameworks/hono/index.cjs +117 -0
  44. package/dist/frameworks/hono/index.cjs.map +1 -0
  45. package/dist/frameworks/hono/index.d.cts +17 -0
  46. package/dist/frameworks/hono/index.d.ts +17 -0
  47. package/dist/frameworks/hono/index.js +79 -0
  48. package/dist/frameworks/hono/index.js.map +1 -0
  49. package/dist/index-Dc4GFume.d.ts +34 -0
  50. package/dist/index-DqkKZOlH.d.cts +34 -0
  51. package/dist/index.cjs +571 -0
  52. package/dist/index.cjs.map +1 -0
  53. package/dist/index.d.cts +14 -0
  54. package/dist/index.d.ts +14 -0
  55. package/dist/index.js +537 -0
  56. package/dist/index.js.map +1 -0
  57. package/dist/interface-BzT_DC3u.d.cts +38 -0
  58. package/dist/interface-BzT_DC3u.d.ts +38 -0
  59. package/dist/token-BtfYGd9K.d.cts +33 -0
  60. package/dist/token-BtfYGd9K.d.ts +33 -0
  61. package/package.json +125 -3
  62. package/index.js +0 -1
@@ -0,0 +1,79 @@
1
+ import {
2
+ AuthError
3
+ } from "../../chunk-GF3NKEEK.js";
4
+
5
+ // src/frameworks/hono/index.ts
6
+ import { Hono } from "hono";
7
+ import { createMiddleware } from "hono/factory";
8
+ function createHonoProvider(provider) {
9
+ const app = new Hono();
10
+ app.get(
11
+ "/.well-known/jwks.json",
12
+ async (context) => provider.handle(
13
+ new Request(context.req.raw.url, {
14
+ method: "GET",
15
+ headers: context.req.raw.headers
16
+ })
17
+ )
18
+ );
19
+ app.post(
20
+ "/token",
21
+ async (context) => provider.handle(
22
+ new Request(context.req.raw.url, {
23
+ method: "POST",
24
+ headers: context.req.raw.headers,
25
+ body: context.req.raw.body
26
+ })
27
+ )
28
+ );
29
+ return app;
30
+ }
31
+ function createHonoGuard(guard) {
32
+ return createMiddleware(async (context, next) => {
33
+ const header = context.req.header("authorization");
34
+ const token = getBearerToken(header);
35
+ if (!token) {
36
+ return context.json(
37
+ {
38
+ error: "missing_token",
39
+ message: "Missing bearer token"
40
+ },
41
+ 401
42
+ );
43
+ }
44
+ try {
45
+ const identity = await guard.verify(token);
46
+ context.set("trustline", identity);
47
+ await next();
48
+ } catch (error) {
49
+ const authError = error instanceof AuthError ? error : new AuthError(
50
+ "invalid_token",
51
+ "Token verification failed",
52
+ 401,
53
+ error
54
+ );
55
+ return context.json(
56
+ {
57
+ error: authError.code,
58
+ message: authError.message
59
+ },
60
+ authError.status
61
+ );
62
+ }
63
+ });
64
+ }
65
+ function getBearerToken(header) {
66
+ if (!header) {
67
+ return null;
68
+ }
69
+ const [scheme, token] = header.split(/\s+/, 2);
70
+ if (scheme?.toLowerCase() !== "bearer" || !token) {
71
+ return null;
72
+ }
73
+ return token;
74
+ }
75
+ export {
76
+ createHonoGuard,
77
+ createHonoProvider
78
+ };
79
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/frameworks/hono/index.ts"],"sourcesContent":["import { Hono } from \"hono\";\nimport { createMiddleware } from \"hono/factory\";\n\nimport { AuthError } from \"../../core/errors\";\nimport type { ServiceIdentity } from \"../../core/token\";\nimport type { Provider } from \"../../provider\";\n\nexport interface GuardVerifier {\n verify(token: string): Promise<ServiceIdentity>;\n}\n\nexport function createHonoProvider(provider: Provider): Hono {\n const app = new Hono();\n\n app.get(\"/.well-known/jwks.json\", async (context) =>\n provider.handle(\n new Request(context.req.raw.url, {\n method: \"GET\",\n headers: context.req.raw.headers,\n }),\n ),\n );\n\n app.post(\"/token\", async (context) =>\n provider.handle(\n new Request(context.req.raw.url, {\n method: \"POST\",\n headers: context.req.raw.headers,\n body: context.req.raw.body,\n }),\n ),\n );\n\n return app;\n}\n\nexport function createHonoGuard(guard: GuardVerifier) {\n return createMiddleware(async (context, next) => {\n const header = context.req.header(\"authorization\");\n const token = getBearerToken(header);\n\n if (!token) {\n return context.json(\n {\n error: \"missing_token\",\n message: \"Missing bearer token\",\n },\n 401,\n );\n }\n\n try {\n const identity = await guard.verify(token);\n context.set(\"trustline\", identity);\n await next();\n } catch (error) {\n const authError =\n error instanceof AuthError\n ? error\n : new AuthError(\n \"invalid_token\",\n \"Token verification failed\",\n 401,\n error,\n );\n return context.json(\n {\n error: authError.code,\n message: authError.message,\n },\n authError.status as 401 | 403,\n );\n }\n });\n}\n\nfunction getBearerToken(header: string | undefined): string | null {\n if (!header) {\n return null;\n }\n\n const [scheme, token] = header.split(/\\s+/, 2);\n if (scheme?.toLowerCase() !== \"bearer\" || !token) {\n return null;\n }\n\n return token;\n}\n"],"mappings":";;;;;AAAA,SAAS,YAAY;AACrB,SAAS,wBAAwB;AAU1B,SAAS,mBAAmB,UAA0B;AAC3D,QAAM,MAAM,IAAI,KAAK;AAErB,MAAI;AAAA,IAAI;AAAA,IAA0B,OAAO,YACvC,SAAS;AAAA,MACP,IAAI,QAAQ,QAAQ,IAAI,IAAI,KAAK;AAAA,QAC/B,QAAQ;AAAA,QACR,SAAS,QAAQ,IAAI,IAAI;AAAA,MAC3B,CAAC;AAAA,IACH;AAAA,EACF;AAEA,MAAI;AAAA,IAAK;AAAA,IAAU,OAAO,YACxB,SAAS;AAAA,MACP,IAAI,QAAQ,QAAQ,IAAI,IAAI,KAAK;AAAA,QAC/B,QAAQ;AAAA,QACR,SAAS,QAAQ,IAAI,IAAI;AAAA,QACzB,MAAM,QAAQ,IAAI,IAAI;AAAA,MACxB,CAAC;AAAA,IACH;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,gBAAgB,OAAsB;AACpD,SAAO,iBAAiB,OAAO,SAAS,SAAS;AAC/C,UAAM,SAAS,QAAQ,IAAI,OAAO,eAAe;AACjD,UAAM,QAAQ,eAAe,MAAM;AAEnC,QAAI,CAAC,OAAO;AACV,aAAO,QAAQ;AAAA,QACb;AAAA,UACE,OAAO;AAAA,UACP,SAAS;AAAA,QACX;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,QAAI;AACF,YAAM,WAAW,MAAM,MAAM,OAAO,KAAK;AACzC,cAAQ,IAAI,aAAa,QAAQ;AACjC,YAAM,KAAK;AAAA,IACb,SAAS,OAAO;AACd,YAAM,YACJ,iBAAiB,YACb,QACA,IAAI;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACN,aAAO,QAAQ;AAAA,QACb;AAAA,UACE,OAAO,UAAU;AAAA,UACjB,SAAS,UAAU;AAAA,QACrB;AAAA,QACA,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEA,SAAS,eAAe,QAA2C;AACjE,MAAI,CAAC,QAAQ;AACX,WAAO;AAAA,EACT;AAEA,QAAM,CAAC,QAAQ,KAAK,IAAI,OAAO,MAAM,OAAO,CAAC;AAC7C,MAAI,QAAQ,YAAY,MAAM,YAAY,CAAC,OAAO;AAChD,WAAO;AAAA,EACT;AAEA,SAAO;AACT;","names":[]}
@@ -0,0 +1,34 @@
1
+ import { b as ServiceClient, a as StorageAdapter, d as SigningAlgorithm } from './interface-BzT_DC3u.js';
2
+
3
+ interface ProviderOptions {
4
+ issuer: string;
5
+ storage: StorageAdapter;
6
+ signing?: {
7
+ algorithm?: SigningAlgorithm;
8
+ privateKey?: string;
9
+ keyId?: string;
10
+ };
11
+ token?: {
12
+ ttl?: number;
13
+ };
14
+ env?: string;
15
+ }
16
+ interface CreateProviderClientInput {
17
+ name: string;
18
+ scopes?: string[];
19
+ }
20
+ interface CreatedProviderClient {
21
+ clientId: string;
22
+ clientSecret: string;
23
+ }
24
+ interface Provider {
25
+ handle(request: Request): Promise<Response>;
26
+ clients: {
27
+ create(input: CreateProviderClientInput): Promise<CreatedProviderClient>;
28
+ list(): Promise<ServiceClient[]>;
29
+ revoke(clientId: string): Promise<void>;
30
+ };
31
+ }
32
+ declare function createProvider(options: ProviderOptions): Provider;
33
+
34
+ export { type CreateProviderClientInput as C, type Provider as P, type CreatedProviderClient as a, type ProviderOptions as b, createProvider as c };
@@ -0,0 +1,34 @@
1
+ import { b as ServiceClient, a as StorageAdapter, d as SigningAlgorithm } from './interface-BzT_DC3u.cjs';
2
+
3
+ interface ProviderOptions {
4
+ issuer: string;
5
+ storage: StorageAdapter;
6
+ signing?: {
7
+ algorithm?: SigningAlgorithm;
8
+ privateKey?: string;
9
+ keyId?: string;
10
+ };
11
+ token?: {
12
+ ttl?: number;
13
+ };
14
+ env?: string;
15
+ }
16
+ interface CreateProviderClientInput {
17
+ name: string;
18
+ scopes?: string[];
19
+ }
20
+ interface CreatedProviderClient {
21
+ clientId: string;
22
+ clientSecret: string;
23
+ }
24
+ interface Provider {
25
+ handle(request: Request): Promise<Response>;
26
+ clients: {
27
+ create(input: CreateProviderClientInput): Promise<CreatedProviderClient>;
28
+ list(): Promise<ServiceClient[]>;
29
+ revoke(clientId: string): Promise<void>;
30
+ };
31
+ }
32
+ declare function createProvider(options: ProviderOptions): Provider;
33
+
34
+ export { type CreateProviderClientInput as C, type Provider as P, type CreatedProviderClient as a, type ProviderOptions as b, createProvider as c };