solana-auth-oauth2-server 0.1.0-canary-20260125213759 → 0.1.0-canary-20260125224000

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/cli.cjs CHANGED
@@ -81,10 +81,14 @@ var package_default = {
81
81
  };
82
82
 
83
83
  // src/api.ts
84
- var import_hono2 = require("hono");
84
+ var import_hono6 = require("hono");
85
85
 
86
86
  // src/api-admin.ts
87
- var import_zod_validator = require("@hono/zod-validator");
87
+ var import_zod_validator3 = require("@hono/zod-validator");
88
+ var import_drizzle_orm10 = require("drizzle-orm");
89
+ var import_hono5 = require("hono");
90
+
91
+ // src/api-admin-auth-codes.ts
88
92
  var import_drizzle_orm6 = require("drizzle-orm");
89
93
  var import_hono = require("hono");
90
94
 
@@ -97,8 +101,16 @@ var schema_exports = {};
97
101
  __export(schema_exports, {
98
102
  authCodes: () => authCodes,
99
103
  clients: () => clients,
104
+ insertAuthCodeSchema: () => insertAuthCodeSchema,
105
+ insertClientSchema: () => insertClientSchema,
106
+ insertScopeSchema: () => insertScopeSchema,
107
+ insertTokenSchema: () => insertTokenSchema,
100
108
  insertUserSchema: () => insertUserSchema,
101
109
  scopes: () => scopes,
110
+ selectAuthCodeSchema: () => selectAuthCodeSchema,
111
+ selectClientSchema: () => selectClientSchema,
112
+ selectScopeSchema: () => selectScopeSchema,
113
+ selectTokenSchema: () => selectTokenSchema,
102
114
  selectUserSchema: () => selectUserSchema,
103
115
  tokens: () => tokens,
104
116
  users: () => users
@@ -107,6 +119,7 @@ __export(schema_exports, {
107
119
  // src/db/schema/auth-codes.ts
108
120
  var import_drizzle_orm = require("drizzle-orm");
109
121
  var import_sqlite_core = require("drizzle-orm/sqlite-core");
122
+ var import_drizzle_zod = require("drizzle-zod");
110
123
  var authCodes = (0, import_sqlite_core.sqliteTable)("auth_codes", {
111
124
  clientId: (0, import_sqlite_core.text)("client_id").notNull(),
112
125
  code: (0, import_sqlite_core.text)("code").primaryKey(),
@@ -119,10 +132,13 @@ var authCodes = (0, import_sqlite_core.sqliteTable)("auth_codes", {
119
132
  updatedAt: (0, import_sqlite_core.integer)("updated_at", { mode: "timestamp_ms" }).default(import_drizzle_orm.sql`(cast(unixepoch('subsecond') * 1000 as integer))`).$onUpdate(() => /* @__PURE__ */ new Date()).notNull(),
120
133
  userId: (0, import_sqlite_core.text)("user_id")
121
134
  });
135
+ var insertAuthCodeSchema = (0, import_drizzle_zod.createInsertSchema)(authCodes);
136
+ var selectAuthCodeSchema = (0, import_drizzle_zod.createSelectSchema)(authCodes);
122
137
 
123
138
  // src/db/schema/clients.ts
124
139
  var import_drizzle_orm2 = require("drizzle-orm");
125
140
  var import_sqlite_core2 = require("drizzle-orm/sqlite-core");
141
+ var import_drizzle_zod2 = require("drizzle-zod");
126
142
  var clients = (0, import_sqlite_core2.sqliteTable)("clients", {
127
143
  allowedGrants: (0, import_sqlite_core2.text)("allowed_grants", { mode: "json" }).$type().notNull().default([]),
128
144
  createdAt: (0, import_sqlite_core2.integer)("created_at", { mode: "timestamp_ms" }).default(import_drizzle_orm2.sql`(cast(unixepoch('subsecond') * 1000 as integer))`).notNull(),
@@ -133,10 +149,13 @@ var clients = (0, import_sqlite_core2.sqliteTable)("clients", {
133
149
  secret: (0, import_sqlite_core2.text)("secret"),
134
150
  updatedAt: (0, import_sqlite_core2.integer)("updated_at", { mode: "timestamp_ms" }).default(import_drizzle_orm2.sql`(cast(unixepoch('subsecond') * 1000 as integer))`).$onUpdate(() => /* @__PURE__ */ new Date()).notNull()
135
151
  });
152
+ var insertClientSchema = (0, import_drizzle_zod2.createInsertSchema)(clients);
153
+ var selectClientSchema = (0, import_drizzle_zod2.createSelectSchema)(clients);
136
154
 
137
155
  // src/db/schema/scopes.ts
138
156
  var import_drizzle_orm3 = require("drizzle-orm");
139
157
  var import_sqlite_core3 = require("drizzle-orm/sqlite-core");
158
+ var import_drizzle_zod3 = require("drizzle-zod");
140
159
  var scopes = (0, import_sqlite_core3.sqliteTable)("scopes", {
141
160
  createdAt: (0, import_sqlite_core3.integer)("created_at", { mode: "timestamp_ms" }).default(import_drizzle_orm3.sql`(cast(unixepoch('subsecond') * 1000 as integer))`).notNull(),
142
161
  description: (0, import_sqlite_core3.text)("description"),
@@ -144,10 +163,13 @@ var scopes = (0, import_sqlite_core3.sqliteTable)("scopes", {
144
163
  name: (0, import_sqlite_core3.text)("name").notNull().unique(),
145
164
  updatedAt: (0, import_sqlite_core3.integer)("updated_at", { mode: "timestamp_ms" }).default(import_drizzle_orm3.sql`(cast(unixepoch('subsecond') * 1000 as integer))`).$onUpdate(() => /* @__PURE__ */ new Date()).notNull()
146
165
  });
166
+ var insertScopeSchema = (0, import_drizzle_zod3.createInsertSchema)(scopes);
167
+ var selectScopeSchema = (0, import_drizzle_zod3.createSelectSchema)(scopes);
147
168
 
148
169
  // src/db/schema/tokens.ts
149
170
  var import_drizzle_orm4 = require("drizzle-orm");
150
171
  var import_sqlite_core4 = require("drizzle-orm/sqlite-core");
172
+ var import_drizzle_zod4 = require("drizzle-zod");
151
173
  var tokens = (0, import_sqlite_core4.sqliteTable)("tokens", {
152
174
  accessToken: (0, import_sqlite_core4.text)("access_token").primaryKey(),
153
175
  accessTokenExpiresAt: (0, import_sqlite_core4.integer)("access_token_expires_at", {
@@ -164,11 +186,13 @@ var tokens = (0, import_sqlite_core4.sqliteTable)("tokens", {
164
186
  updatedAt: (0, import_sqlite_core4.integer)("updated_at", { mode: "timestamp_ms" }).default(import_drizzle_orm4.sql`(cast(unixepoch('subsecond') * 1000 as integer))`).$onUpdate(() => /* @__PURE__ */ new Date()).notNull(),
165
187
  userId: (0, import_sqlite_core4.text)("user_id")
166
188
  });
189
+ var insertTokenSchema = (0, import_drizzle_zod4.createInsertSchema)(tokens);
190
+ var selectTokenSchema = (0, import_drizzle_zod4.createSelectSchema)(tokens);
167
191
 
168
192
  // src/db/schema/users.ts
169
193
  var import_drizzle_orm5 = require("drizzle-orm");
170
194
  var import_sqlite_core5 = require("drizzle-orm/sqlite-core");
171
- var import_drizzle_zod = require("drizzle-zod");
195
+ var import_drizzle_zod5 = require("drizzle-zod");
172
196
  var users = (0, import_sqlite_core5.sqliteTable)("users", {
173
197
  createdAt: (0, import_sqlite_core5.integer)("created_at", { mode: "timestamp_ms" }).default(import_drizzle_orm5.sql`(cast(unixepoch('subsecond') * 1000 as integer))`).notNull(),
174
198
  email: (0, import_sqlite_core5.text)("email").notNull().unique(),
@@ -180,8 +204,8 @@ var users = (0, import_sqlite_core5.sqliteTable)("users", {
180
204
  tokenVersion: (0, import_sqlite_core5.integer)("token_version").default(0).notNull(),
181
205
  updatedAt: (0, import_sqlite_core5.integer)("updated_at", { mode: "timestamp_ms" }).default(import_drizzle_orm5.sql`(cast(unixepoch('subsecond') * 1000 as integer))`).$onUpdate(() => /* @__PURE__ */ new Date()).notNull()
182
206
  });
183
- var insertUserSchema = (0, import_drizzle_zod.createInsertSchema)(users);
184
- var selectUserSchema = (0, import_drizzle_zod.createSelectSchema)(users);
207
+ var insertUserSchema = (0, import_drizzle_zod5.createInsertSchema)(users);
208
+ var selectUserSchema = (0, import_drizzle_zod5.createSelectSchema)(users);
185
209
 
186
210
  // src/db/index.ts
187
211
  var client = (0, import_client.createClient)({
@@ -190,37 +214,236 @@ var client = (0, import_client.createClient)({
190
214
  });
191
215
  var db = (0, import_libsql.drizzle)(client, { schema: schema_exports });
192
216
 
217
+ // src/api-admin-auth-codes.ts
218
+ var apiAdminAuthCodes = new import_hono.Hono();
219
+ apiAdminAuthCodes.get("/", async (c) => {
220
+ const result = await db.select().from(authCodes).all();
221
+ return c.json(result);
222
+ });
223
+ apiAdminAuthCodes.get("/:code", async (c) => {
224
+ const code = c.req.param("code");
225
+ const result = await db.select().from(authCodes).where((0, import_drizzle_orm6.eq)(authCodes.code, code)).get();
226
+ if (!result) {
227
+ return c.json({ error: "Auth code not found" }, 404);
228
+ }
229
+ return c.json(result);
230
+ });
231
+ apiAdminAuthCodes.delete("/:code", async (c) => {
232
+ const code = c.req.param("code");
233
+ const result = await db.delete(authCodes).where((0, import_drizzle_orm6.eq)(authCodes.code, code)).returning().get();
234
+ if (!result) {
235
+ return c.json({ error: "Auth code not found" }, 404);
236
+ }
237
+ return c.json({ message: "Auth code deleted" });
238
+ });
239
+ apiAdminAuthCodes.post("/:code/revoke", async (c) => {
240
+ const code = c.req.param("code");
241
+ const result = await db.update(authCodes).set({ expiresAt: /* @__PURE__ */ new Date(0) }).where((0, import_drizzle_orm6.eq)(authCodes.code, code)).returning().get();
242
+ if (!result) {
243
+ return c.json({ error: "Auth code not found" }, 404);
244
+ }
245
+ return c.json({ message: "Auth code revoked" });
246
+ });
247
+
248
+ // src/api-admin-clients.ts
249
+ var import_zod_validator = require("@hono/zod-validator");
250
+ var import_drizzle_orm7 = require("drizzle-orm");
251
+ var import_hono2 = require("hono");
252
+
253
+ // src/utils.ts
254
+ var import_node_crypto = require("crypto");
255
+ function generateRandomToken(length = 32) {
256
+ return (0, import_node_crypto.randomBytes)(length).toString("hex");
257
+ }
258
+
259
+ // src/api-admin-clients.ts
260
+ var apiAdminClients = new import_hono2.Hono();
261
+ apiAdminClients.get("/", async (c) => {
262
+ const result = await db.select().from(clients).all();
263
+ return c.json(result);
264
+ });
265
+ apiAdminClients.get("/:id", async (c) => {
266
+ const id = c.req.param("id");
267
+ const result = await db.select().from(clients).where((0, import_drizzle_orm7.eq)(clients.id, id)).get();
268
+ if (!result) {
269
+ return c.json({ error: "Client not found" }, 404);
270
+ }
271
+ return c.json(result);
272
+ });
273
+ apiAdminClients.post("/", (0, import_zod_validator.zValidator)("json", insertClientSchema), async (c) => {
274
+ const body = c.req.valid("json");
275
+ try {
276
+ const result = await db.insert(clients).values({
277
+ allowedGrants: body.allowedGrants ?? ["authorization_code", "refresh_token"],
278
+ id: body.id,
279
+ name: body.name,
280
+ redirectUris: body.redirectUris ?? [],
281
+ scopeIds: body.scopeIds ?? [],
282
+ secret: body.secret ?? generateRandomToken()
283
+ }).returning().get();
284
+ return c.json(result, 201);
285
+ } catch (err) {
286
+ if (err instanceof Error && err.message?.includes("UNIQUE constraint failed")) {
287
+ return c.json({ error: "Client already exists" }, 409);
288
+ }
289
+ return c.json({ error: "Failed to create client" }, 500);
290
+ }
291
+ });
292
+ apiAdminClients.put(
293
+ "/:id",
294
+ (0, import_zod_validator.zValidator)(
295
+ "json",
296
+ insertClientSchema.pick({
297
+ allowedGrants: true,
298
+ name: true,
299
+ redirectUris: true,
300
+ scopeIds: true,
301
+ secret: true
302
+ }).partial()
303
+ ),
304
+ async (c) => {
305
+ const id = c.req.param("id");
306
+ const body = c.req.valid("json");
307
+ const result = await db.update(clients).set(body).where((0, import_drizzle_orm7.eq)(clients.id, id)).returning().get();
308
+ if (!result) {
309
+ return c.json({ error: "Client not found" }, 404);
310
+ }
311
+ return c.json(result);
312
+ }
313
+ );
314
+ apiAdminClients.delete("/:id", async (c) => {
315
+ const id = c.req.param("id");
316
+ const result = await db.delete(clients).where((0, import_drizzle_orm7.eq)(clients.id, id)).returning().get();
317
+ if (!result) {
318
+ return c.json({ error: "Client not found" }, 404);
319
+ }
320
+ return c.json({ message: "Client deleted" });
321
+ });
322
+
323
+ // src/api-admin-scopes.ts
324
+ var import_zod_validator2 = require("@hono/zod-validator");
325
+ var import_drizzle_orm8 = require("drizzle-orm");
326
+ var import_hono3 = require("hono");
327
+ var apiAdminScopes = new import_hono3.Hono();
328
+ apiAdminScopes.get("/", async (c) => {
329
+ const result = await db.select().from(scopes).all();
330
+ return c.json(result);
331
+ });
332
+ apiAdminScopes.get("/:id", async (c) => {
333
+ const id = c.req.param("id");
334
+ const result = await db.select().from(scopes).where((0, import_drizzle_orm8.eq)(scopes.id, id)).get();
335
+ if (!result) {
336
+ return c.json({ error: "Scope not found" }, 404);
337
+ }
338
+ return c.json(result);
339
+ });
340
+ apiAdminScopes.post("/", (0, import_zod_validator2.zValidator)("json", insertScopeSchema), async (c) => {
341
+ const body = c.req.valid("json");
342
+ try {
343
+ const result = await db.insert(scopes).values({
344
+ description: body.description ?? null,
345
+ id: body.id,
346
+ name: body.name
347
+ }).returning().get();
348
+ return c.json(result, 201);
349
+ } catch (err) {
350
+ if (err instanceof Error && err.message?.includes("UNIQUE constraint failed")) {
351
+ return c.json({ error: "Scope already exists" }, 409);
352
+ }
353
+ return c.json({ error: "Failed to create scope" }, 500);
354
+ }
355
+ });
356
+ apiAdminScopes.put(
357
+ "/:id",
358
+ (0, import_zod_validator2.zValidator)("json", insertScopeSchema.pick({ description: true, name: true }).partial()),
359
+ async (c) => {
360
+ const id = c.req.param("id");
361
+ const body = c.req.valid("json");
362
+ const result = await db.update(scopes).set({ description: body.description, name: body.name }).where((0, import_drizzle_orm8.eq)(scopes.id, id)).returning().get();
363
+ if (!result) {
364
+ return c.json({ error: "Scope not found" }, 404);
365
+ }
366
+ return c.json(result);
367
+ }
368
+ );
369
+ apiAdminScopes.delete("/:id", async (c) => {
370
+ const id = c.req.param("id");
371
+ const result = await db.delete(scopes).where((0, import_drizzle_orm8.eq)(scopes.id, id)).returning().get();
372
+ if (!result) {
373
+ return c.json({ error: "Scope not found" }, 404);
374
+ }
375
+ return c.json({ message: "Scope deleted" });
376
+ });
377
+
378
+ // src/api-admin-tokens.ts
379
+ var import_drizzle_orm9 = require("drizzle-orm");
380
+ var import_hono4 = require("hono");
381
+ var apiAdminTokens = new import_hono4.Hono();
382
+ apiAdminTokens.get("/", async (c) => {
383
+ const result = await db.select().from(tokens).all();
384
+ return c.json(result);
385
+ });
386
+ apiAdminTokens.get("/:accessToken", async (c) => {
387
+ const accessToken = c.req.param("accessToken");
388
+ const result = await db.select().from(tokens).where((0, import_drizzle_orm9.eq)(tokens.accessToken, accessToken)).get();
389
+ if (!result) {
390
+ return c.json({ error: "Token not found" }, 404);
391
+ }
392
+ return c.json(result);
393
+ });
394
+ apiAdminTokens.delete("/:accessToken", async (c) => {
395
+ const accessToken = c.req.param("accessToken");
396
+ const result = await db.delete(tokens).where((0, import_drizzle_orm9.eq)(tokens.accessToken, accessToken)).returning().get();
397
+ if (!result) {
398
+ return c.json({ error: "Token not found" }, 404);
399
+ }
400
+ return c.json({ message: "Token deleted" });
401
+ });
402
+ apiAdminTokens.post("/:accessToken/revoke", async (c) => {
403
+ const accessToken = c.req.param("accessToken");
404
+ const result = await db.update(tokens).set({
405
+ accessTokenExpiresAt: /* @__PURE__ */ new Date(0),
406
+ refreshTokenExpiresAt: /* @__PURE__ */ new Date(0)
407
+ }).where((0, import_drizzle_orm9.eq)(tokens.accessToken, accessToken)).returning().get();
408
+ if (!result) {
409
+ return c.json({ error: "Token not found" }, 404);
410
+ }
411
+ return c.json({ message: "Token revoked" });
412
+ });
413
+
193
414
  // src/api-admin.ts
194
- var apiAdmin = new import_hono.Hono();
415
+ var apiAdmin = new import_hono5.Hono();
416
+ apiAdmin.route("/scopes", apiAdminScopes);
417
+ apiAdmin.route("/clients", apiAdminClients);
418
+ apiAdmin.route("/tokens", apiAdminTokens);
419
+ apiAdmin.route("/auth-codes", apiAdminAuthCodes);
195
420
  apiAdmin.get("/users", async (c) => {
196
421
  const result = await db.select().from(users).all();
197
422
  return c.json(result);
198
423
  });
199
424
  apiAdmin.get("/users/:id", async (c) => {
200
425
  const id = c.req.param("id");
201
- const result = await db.select().from(users).where((0, import_drizzle_orm6.eq)(users.id, id)).get();
426
+ const result = await db.select().from(users).where((0, import_drizzle_orm10.eq)(users.id, id)).get();
202
427
  if (!result) {
203
428
  return c.json({ error: "User not found" }, 404);
204
429
  }
205
430
  return c.json(result);
206
431
  });
207
- apiAdmin.post("/users", (0, import_zod_validator.zValidator)("json", insertUserSchema), async (c) => {
432
+ apiAdmin.post("/users", (0, import_zod_validator3.zValidator)("json", insertUserSchema), async (c) => {
208
433
  const body = c.req.valid("json");
209
434
  try {
210
435
  const result = await db.insert(users).values(body).returning().get();
211
436
  return c.json(result, 201);
212
437
  } catch (err) {
213
- if (err instanceof Error) {
214
- if (err.message?.includes("UNIQUE constraint failed")) {
215
- return c.json({ error: "User already exists" }, 409);
216
- }
438
+ if (err instanceof Error && err.message?.includes("UNIQUE constraint failed")) {
439
+ return c.json({ error: "User already exists" }, 409);
217
440
  }
218
441
  return c.json({ error: "Failed to create user" }, 500);
219
442
  }
220
443
  });
221
444
  apiAdmin.delete("/users/:id", async (c) => {
222
445
  const id = c.req.param("id");
223
- const result = await db.delete(users).where((0, import_drizzle_orm6.eq)(users.id, id)).returning().get();
446
+ const result = await db.delete(users).where((0, import_drizzle_orm10.eq)(users.id, id)).returning().get();
224
447
  if (!result) {
225
448
  return c.json({ error: "User not found" }, 404);
226
449
  }
@@ -229,7 +452,7 @@ apiAdmin.delete("/users/:id", async (c) => {
229
452
 
230
453
  // src/api.ts
231
454
  function startServer(port = 3e3, options = {}) {
232
- const app = new import_hono2.Hono();
455
+ const app = new import_hono6.Hono();
233
456
  app.get("/", (c) => {
234
457
  return c.text("Hello Hono!");
235
458
  });
package/dist/cli.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli.ts","../package.json","../src/api.ts","../src/api-admin.ts","../src/db/index.ts","../src/db/schema/index.ts","../src/db/schema/auth-codes.ts","../src/db/schema/clients.ts","../src/db/schema/scopes.ts","../src/db/schema/tokens.ts","../src/db/schema/users.ts"],"sourcesContent":["#!/usr/bin/env bun\nimport { Command } from 'commander'\nimport packageJson from '../package.json' with { type: 'json' }\nimport { startServer } from './api.ts'\n\nconst program = new Command()\n\nprogram.name(packageJson.name).description(packageJson.description).version(packageJson.version)\n\nprogram\n .command('start')\n .description('Start the API server')\n .option('--admin', 'Enable admin API endpoints', false)\n .option('-p, --port <number>', 'Port to run the server on', '3000')\n .action((options) => {\n const { app, port } = startServer(parseInt(options.port, 10), {\n enableAdmin: options.admin,\n })\n\n Bun.serve({ fetch: app.fetch, port })\n })\n\nprogram.parse(process.argv)\n","{\n \"bin\": {\n \"solana-auth-oauth2-server\": \"dist/cli.js\"\n },\n \"dependencies\": {\n \"@hono/zod-validator\": \"^0.7.6\",\n \"@libsql/client\": \"^0.17.0\",\n \"commander\": \"^14.0.2\",\n \"drizzle-orm\": \"^0.45.1\",\n \"drizzle-zod\": \"^0.8.3\",\n \"hono\": \"^4.11.5\",\n \"libsql\": \"^0.5.22\",\n \"zod\": \"^4.3.6\"\n },\n \"devDependencies\": {\n \"@biomejs/biome\": \"^2.3.11\",\n \"@changesets/cli\": \"^2.29.8\",\n \"@types/bun\": \"latest\",\n \"drizzle-kit\": \"^0.31.8\",\n \"pkg-pr-new\": \"^0.0.62\",\n \"publint\": \"^0.3.16\",\n \"tsup\": \"^8.5.1\"\n },\n \"exports\": {\n \".\": {\n \"import\": {\n \"types\": \"./dist/index.d.ts\",\n \"default\": \"./dist/index.js\"\n },\n \"require\": {\n \"types\": \"./dist/index.d.cts\",\n \"default\": \"./dist/index.cjs\"\n }\n }\n },\n \"files\": [\"dist\"],\n \"license\": \"MIT\",\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"name\": \"solana-auth-oauth2-server\",\n \"description\": \"Solana Auth OAuth2 Server\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/solana-auth/solana-auth-oauth2-server.git\"\n },\n \"peerDependencies\": {\n \"typescript\": \"^5\"\n },\n \"scripts\": {\n \"build\": \"tsup\",\n \"changeset\": \"changeset\",\n \"check-types\": \"tsc -b --noEmit\",\n \"db:generate\": \"drizzle-kit generate\",\n \"db:migrate\": \"drizzle-kit migrate\",\n \"db:push\": \"drizzle-kit push\",\n \"db:seed\": \"bun src/seed.ts\",\n \"db:seed:oauth\": \"bun scripts/seed-oauth.ts\",\n \"db:studio\": \"drizzle-kit studio\",\n \"lint\": \"biome check --error-on-warnings\",\n \"lint:fix\": \"biome check --error-on-warnings --write\",\n \"release\": \"changeset publish\",\n \"test\": \"bun test ./test/\",\n \"test:watch\": \"bun test --watch ./test/\",\n \"version\": \"changeset version && bun lint:fix\"\n },\n \"type\": \"module\",\n \"types\": \"./dist/index.d.ts\",\n \"version\": \"0.0.0\"\n}\n","import { Hono } from 'hono'\nimport { apiAdmin } from './api-admin.ts'\n\nexport function startServer(port: number = 3000, options: { enableAdmin?: boolean } = {}) {\n const app = new Hono()\n\n app.get('/', (c) => {\n return c.text('Hello Hono!')\n })\n\n if (options.enableAdmin) {\n app.route('/admin', apiAdmin)\n console.log('Admin API enabled at /admin')\n }\n\n console.log(`Server is running on port ${port}`)\n\n return {\n app,\n port,\n }\n}\n","import { zValidator } from '@hono/zod-validator'\nimport { eq } from 'drizzle-orm'\nimport { Hono } from 'hono'\nimport { db } from './db/index.ts'\nimport { insertUserSchema, users } from './db/schema/index.ts'\n\nexport const apiAdmin = new Hono()\n\n// List users\napiAdmin.get('/users', async (c) => {\n const result = await db.select().from(users).all()\n return c.json(result)\n})\n\n// Get user by ID\napiAdmin.get('/users/:id', async (c) => {\n const id = c.req.param('id')\n const result = await db.select().from(users).where(eq(users.id, id)).get()\n\n if (!result) {\n return c.json({ error: 'User not found' }, 404)\n }\n\n return c.json(result)\n})\n\n// Create user\napiAdmin.post('/users', zValidator('json', insertUserSchema), async (c) => {\n const body = c.req.valid('json')\n\n try {\n const result = await db.insert(users).values(body).returning().get()\n\n return c.json(result, 201)\n } catch (err) {\n if (err instanceof Error) {\n if (err.message?.includes('UNIQUE constraint failed')) {\n return c.json({ error: 'User already exists' }, 409)\n }\n }\n return c.json({ error: 'Failed to create user' }, 500)\n }\n})\n\n// Delete user\napiAdmin.delete('/users/:id', async (c) => {\n const id = c.req.param('id')\n\n const result = await db.delete(users).where(eq(users.id, id)).returning().get()\n\n if (!result) {\n return c.json({ error: 'User not found' }, 404)\n }\n\n return c.json({ message: 'User deleted' })\n})\n","import { createClient } from '@libsql/client'\nimport { drizzle } from 'drizzle-orm/libsql'\nimport * as schema from './schema/index.ts'\n\nconst client = createClient({\n authToken: process.env.DATABASE_AUTH_TOKEN,\n url: process.env.DATABASE_URL || 'file:local.db',\n})\n\nexport const db = drizzle(client, { schema })\n","export * from './auth-codes.ts'\nexport * from './clients.ts'\nexport * from './scopes.ts'\nexport * from './tokens.ts'\nexport * from './users.ts'\n","import { sql } from 'drizzle-orm'\nimport { integer, sqliteTable, text } from 'drizzle-orm/sqlite-core'\n\nexport const authCodes = sqliteTable('auth_codes', {\n clientId: text('client_id').notNull(),\n code: text('code').primaryKey(),\n codeChallenge: text('code_challenge'),\n codeChallengeMethod: text('code_challenge_method').$type<'S256' | 'plain'>(),\n createdAt: integer('created_at', { mode: 'timestamp_ms' })\n .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`)\n .notNull(),\n expiresAt: integer('expires_at', { mode: 'timestamp_ms' }).notNull(),\n redirectUri: text('redirect_uri'),\n scopeIds: text('scope_ids', { mode: 'json' }).$type<string[]>().notNull().default([]),\n updatedAt: integer('updated_at', { mode: 'timestamp_ms' })\n .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`)\n .$onUpdate(() => new Date())\n .notNull(),\n userId: text('user_id'),\n})\n","import { sql } from 'drizzle-orm'\nimport { integer, sqliteTable, text } from 'drizzle-orm/sqlite-core'\n\nexport const clients = sqliteTable('clients', {\n allowedGrants: text('allowed_grants', { mode: 'json' }).$type<string[]>().notNull().default([]),\n createdAt: integer('created_at', { mode: 'timestamp_ms' })\n .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`)\n .notNull(),\n id: text('id').primaryKey(),\n name: text('name').notNull(),\n redirectUris: text('redirect_uris', { mode: 'json' }).$type<string[]>().notNull().default([]),\n scopeIds: text('scope_ids', { mode: 'json' }).$type<string[]>().notNull().default([]),\n secret: text('secret'),\n updatedAt: integer('updated_at', { mode: 'timestamp_ms' })\n .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`)\n .$onUpdate(() => new Date())\n .notNull(),\n})\n","import { sql } from 'drizzle-orm'\nimport { integer, sqliteTable, text } from 'drizzle-orm/sqlite-core'\n\nexport const scopes = sqliteTable('scopes', {\n createdAt: integer('created_at', { mode: 'timestamp_ms' })\n .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`)\n .notNull(),\n description: text('description'),\n id: text('id').primaryKey(),\n name: text('name').notNull().unique(),\n updatedAt: integer('updated_at', { mode: 'timestamp_ms' })\n .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`)\n .$onUpdate(() => new Date())\n .notNull(),\n})\n","import { sql } from 'drizzle-orm'\nimport { integer, sqliteTable, text } from 'drizzle-orm/sqlite-core'\n\nexport const tokens = sqliteTable('tokens', {\n accessToken: text('access_token').primaryKey(),\n accessTokenExpiresAt: integer('access_token_expires_at', {\n mode: 'timestamp_ms',\n }).notNull(),\n clientId: text('client_id').notNull(),\n createdAt: integer('created_at', { mode: 'timestamp_ms' })\n .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`)\n .notNull(),\n originatingAuthCodeId: text('originating_auth_code_id'),\n refreshToken: text('refresh_token').unique(),\n refreshTokenExpiresAt: integer('refresh_token_expires_at', {\n mode: 'timestamp_ms',\n }),\n scopeIds: text('scope_ids', { mode: 'json' }).$type<string[]>().notNull().default([]),\n updatedAt: integer('updated_at', { mode: 'timestamp_ms' })\n .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`)\n .$onUpdate(() => new Date())\n .notNull(),\n userId: text('user_id'),\n})\n","import { sql } from 'drizzle-orm'\nimport { integer, sqliteTable, text } from 'drizzle-orm/sqlite-core'\nimport { createInsertSchema, createSelectSchema } from 'drizzle-zod'\n\nexport const users = sqliteTable('users', {\n createdAt: integer('created_at', { mode: 'timestamp_ms' })\n .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`)\n .notNull(),\n email: text('email').notNull().unique(),\n id: text('id').primaryKey(),\n lastLoginAt: integer('last_login_at', { mode: 'timestamp_ms' }),\n name: text('name').notNull(),\n passwordHash: text('password_hash'),\n role: text('role').default('user').notNull(),\n tokenVersion: integer('token_version').default(0).notNull(),\n updatedAt: integer('updated_at', { mode: 'timestamp_ms' })\n .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`)\n .$onUpdate(() => new Date())\n .notNull(),\n})\n\nexport const insertUserSchema = createInsertSchema(users)\nexport const selectUserSchema = createSelectSchema(users)\n"],"mappings":"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","names":["import_hono","import_drizzle_orm","import_drizzle_orm","import_sqlite_core","import_drizzle_orm","import_sqlite_core","import_drizzle_orm","import_sqlite_core","import_drizzle_orm","import_sqlite_core"]}
1
+ {"version":3,"sources":["../src/cli.ts","../package.json","../src/api.ts","../src/api-admin.ts","../src/api-admin-auth-codes.ts","../src/db/index.ts","../src/db/schema/index.ts","../src/db/schema/auth-codes.ts","../src/db/schema/clients.ts","../src/db/schema/scopes.ts","../src/db/schema/tokens.ts","../src/db/schema/users.ts","../src/api-admin-clients.ts","../src/utils.ts","../src/api-admin-scopes.ts","../src/api-admin-tokens.ts"],"sourcesContent":["#!/usr/bin/env bun\nimport { Command } from 'commander'\nimport packageJson from '../package.json' with { type: 'json' }\nimport { startServer } from './api.ts'\n\nconst program = new Command()\n\nprogram.name(packageJson.name).description(packageJson.description).version(packageJson.version)\n\nprogram\n .command('start')\n .description('Start the API server')\n .option('--admin', 'Enable admin API endpoints', false)\n .option('-p, --port <number>', 'Port to run the server on', '3000')\n .action((options) => {\n const { app, port } = startServer(parseInt(options.port, 10), {\n enableAdmin: options.admin,\n })\n\n Bun.serve({ fetch: app.fetch, port })\n })\n\nprogram.parse(process.argv)\n","{\n \"bin\": {\n \"solana-auth-oauth2-server\": \"dist/cli.js\"\n },\n \"dependencies\": {\n \"@hono/zod-validator\": \"^0.7.6\",\n \"@libsql/client\": \"^0.17.0\",\n \"commander\": \"^14.0.2\",\n \"drizzle-orm\": \"^0.45.1\",\n \"drizzle-zod\": \"^0.8.3\",\n \"hono\": \"^4.11.5\",\n \"libsql\": \"^0.5.22\",\n \"zod\": \"^4.3.6\"\n },\n \"devDependencies\": {\n \"@biomejs/biome\": \"^2.3.11\",\n \"@changesets/cli\": \"^2.29.8\",\n \"@types/bun\": \"latest\",\n \"drizzle-kit\": \"^0.31.8\",\n \"pkg-pr-new\": \"^0.0.62\",\n \"publint\": \"^0.3.16\",\n \"tsup\": \"^8.5.1\"\n },\n \"exports\": {\n \".\": {\n \"import\": {\n \"types\": \"./dist/index.d.ts\",\n \"default\": \"./dist/index.js\"\n },\n \"require\": {\n \"types\": \"./dist/index.d.cts\",\n \"default\": \"./dist/index.cjs\"\n }\n }\n },\n \"files\": [\"dist\"],\n \"license\": \"MIT\",\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"name\": \"solana-auth-oauth2-server\",\n \"description\": \"Solana Auth OAuth2 Server\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/solana-auth/solana-auth-oauth2-server.git\"\n },\n \"peerDependencies\": {\n \"typescript\": \"^5\"\n },\n \"scripts\": {\n \"build\": \"tsup\",\n \"changeset\": \"changeset\",\n \"check-types\": \"tsc -b --noEmit\",\n \"db:generate\": \"drizzle-kit generate\",\n \"db:migrate\": \"drizzle-kit migrate\",\n \"db:push\": \"drizzle-kit push\",\n \"db:seed\": \"bun src/seed.ts\",\n \"db:seed:oauth\": \"bun scripts/seed-oauth.ts\",\n \"db:studio\": \"drizzle-kit studio\",\n \"lint\": \"biome check --error-on-warnings\",\n \"lint:fix\": \"biome check --error-on-warnings --write\",\n \"release\": \"changeset publish\",\n \"test\": \"bun test ./test/\",\n \"test:watch\": \"bun test --watch ./test/\",\n \"version\": \"changeset version && bun lint:fix\"\n },\n \"type\": \"module\",\n \"types\": \"./dist/index.d.ts\",\n \"version\": \"0.0.0\"\n}\n","import { Hono } from 'hono'\nimport { apiAdmin } from './api-admin.ts'\n\nexport function startServer(port: number = 3000, options: { enableAdmin?: boolean } = {}) {\n const app = new Hono()\n\n app.get('/', (c) => {\n return c.text('Hello Hono!')\n })\n\n if (options.enableAdmin) {\n app.route('/admin', apiAdmin)\n console.log('Admin API enabled at /admin')\n }\n\n console.log(`Server is running on port ${port}`)\n\n return {\n app,\n port,\n }\n}\n","import { zValidator } from '@hono/zod-validator'\nimport { eq } from 'drizzle-orm'\nimport { Hono } from 'hono'\nimport { apiAdminAuthCodes } from './api-admin-auth-codes.ts'\nimport { apiAdminClients } from './api-admin-clients.ts'\nimport { apiAdminScopes } from './api-admin-scopes.ts'\nimport { apiAdminTokens } from './api-admin-tokens.ts'\nimport { db } from './db/index.ts'\nimport { insertUserSchema, users } from './db/schema/index.ts'\n\nexport const apiAdmin = new Hono()\n\n// Mount sub-routers\napiAdmin.route('/scopes', apiAdminScopes)\napiAdmin.route('/clients', apiAdminClients)\napiAdmin.route('/tokens', apiAdminTokens)\napiAdmin.route('/auth-codes', apiAdminAuthCodes)\n\n// List users\napiAdmin.get('/users', async (c) => {\n const result = await db.select().from(users).all()\n return c.json(result)\n})\n\n// Get user by ID\napiAdmin.get('/users/:id', async (c) => {\n const id = c.req.param('id')\n const result = await db.select().from(users).where(eq(users.id, id)).get()\n if (!result) {\n return c.json({ error: 'User not found' }, 404)\n }\n return c.json(result)\n})\n\n// Create user\napiAdmin.post('/users', zValidator('json', insertUserSchema), async (c) => {\n const body = c.req.valid('json')\n\n try {\n const result = await db.insert(users).values(body).returning().get()\n\n return c.json(result, 201)\n } catch (err) {\n if (err instanceof Error && err.message?.includes('UNIQUE constraint failed')) {\n return c.json({ error: 'User already exists' }, 409)\n }\n return c.json({ error: 'Failed to create user' }, 500)\n }\n})\n\n// Delete user\napiAdmin.delete('/users/:id', async (c) => {\n const id = c.req.param('id')\n const result = await db.delete(users).where(eq(users.id, id)).returning().get()\n if (!result) {\n return c.json({ error: 'User not found' }, 404)\n }\n return c.json({ message: 'User deleted' })\n})\n","import { eq } from 'drizzle-orm'\nimport { Hono } from 'hono'\nimport { db } from './db/index.ts'\nimport { authCodes } from './db/schema/index.ts'\n\nexport const apiAdminAuthCodes = new Hono()\n\napiAdminAuthCodes.get('/', async (c) => {\n const result = await db.select().from(authCodes).all()\n return c.json(result)\n})\n\napiAdminAuthCodes.get('/:code', async (c) => {\n const code = c.req.param('code')\n const result = await db.select().from(authCodes).where(eq(authCodes.code, code)).get()\n if (!result) {\n return c.json({ error: 'Auth code not found' }, 404)\n }\n return c.json(result)\n})\n\napiAdminAuthCodes.delete('/:code', async (c) => {\n const code = c.req.param('code')\n const result = await db.delete(authCodes).where(eq(authCodes.code, code)).returning().get()\n if (!result) {\n return c.json({ error: 'Auth code not found' }, 404)\n }\n return c.json({ message: 'Auth code deleted' })\n})\n\napiAdminAuthCodes.post('/:code/revoke', async (c) => {\n const code = c.req.param('code')\n const result = await db\n .update(authCodes)\n .set({ expiresAt: new Date(0) })\n .where(eq(authCodes.code, code))\n .returning()\n .get()\n if (!result) {\n return c.json({ error: 'Auth code not found' }, 404)\n }\n return c.json({ message: 'Auth code revoked' })\n})\n","import { createClient } from '@libsql/client'\nimport { drizzle } from 'drizzle-orm/libsql'\nimport * as schema from './schema/index.ts'\n\nconst client = createClient({\n authToken: process.env.DATABASE_AUTH_TOKEN,\n url: process.env.DATABASE_URL || 'file:local.db',\n})\n\nexport const db = drizzle(client, { schema })\n","export * from './auth-codes.ts'\nexport * from './clients.ts'\nexport * from './scopes.ts'\nexport * from './tokens.ts'\nexport * from './users.ts'\n","import { sql } from 'drizzle-orm'\nimport { integer, sqliteTable, text } from 'drizzle-orm/sqlite-core'\nimport { createInsertSchema, createSelectSchema } from 'drizzle-zod'\n\nexport const authCodes = sqliteTable('auth_codes', {\n clientId: text('client_id').notNull(),\n code: text('code').primaryKey(),\n codeChallenge: text('code_challenge'),\n codeChallengeMethod: text('code_challenge_method').$type<'S256' | 'plain'>(),\n createdAt: integer('created_at', { mode: 'timestamp_ms' })\n .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`)\n .notNull(),\n expiresAt: integer('expires_at', { mode: 'timestamp_ms' }).notNull(),\n redirectUri: text('redirect_uri'),\n scopeIds: text('scope_ids', { mode: 'json' }).$type<string[]>().notNull().default([]),\n updatedAt: integer('updated_at', { mode: 'timestamp_ms' })\n .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`)\n .$onUpdate(() => new Date())\n .notNull(),\n userId: text('user_id'),\n})\n\nexport const insertAuthCodeSchema = createInsertSchema(authCodes)\nexport const selectAuthCodeSchema = createSelectSchema(authCodes)\n","import { sql } from 'drizzle-orm'\nimport { integer, sqliteTable, text } from 'drizzle-orm/sqlite-core'\nimport { createInsertSchema, createSelectSchema } from 'drizzle-zod'\n\nexport const clients = sqliteTable('clients', {\n allowedGrants: text('allowed_grants', { mode: 'json' }).$type<string[]>().notNull().default([]),\n createdAt: integer('created_at', { mode: 'timestamp_ms' })\n .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`)\n .notNull(),\n id: text('id').primaryKey(),\n name: text('name').notNull(),\n redirectUris: text('redirect_uris', { mode: 'json' }).$type<string[]>().notNull().default([]),\n scopeIds: text('scope_ids', { mode: 'json' }).$type<string[]>().notNull().default([]),\n secret: text('secret'),\n updatedAt: integer('updated_at', { mode: 'timestamp_ms' })\n .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`)\n .$onUpdate(() => new Date())\n .notNull(),\n})\n\nexport const insertClientSchema = createInsertSchema(clients)\nexport const selectClientSchema = createSelectSchema(clients)\n","import { sql } from 'drizzle-orm'\nimport { integer, sqliteTable, text } from 'drizzle-orm/sqlite-core'\nimport { createInsertSchema, createSelectSchema } from 'drizzle-zod'\n\nexport const scopes = sqliteTable('scopes', {\n createdAt: integer('created_at', { mode: 'timestamp_ms' })\n .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`)\n .notNull(),\n description: text('description'),\n id: text('id').primaryKey(),\n name: text('name').notNull().unique(),\n updatedAt: integer('updated_at', { mode: 'timestamp_ms' })\n .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`)\n .$onUpdate(() => new Date())\n .notNull(),\n})\n\nexport const insertScopeSchema = createInsertSchema(scopes)\nexport const selectScopeSchema = createSelectSchema(scopes)\n","import { sql } from 'drizzle-orm'\nimport { integer, sqliteTable, text } from 'drizzle-orm/sqlite-core'\nimport { createInsertSchema, createSelectSchema } from 'drizzle-zod'\n\nexport const tokens = sqliteTable('tokens', {\n accessToken: text('access_token').primaryKey(),\n accessTokenExpiresAt: integer('access_token_expires_at', {\n mode: 'timestamp_ms',\n }).notNull(),\n clientId: text('client_id').notNull(),\n createdAt: integer('created_at', { mode: 'timestamp_ms' })\n .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`)\n .notNull(),\n originatingAuthCodeId: text('originating_auth_code_id'),\n refreshToken: text('refresh_token').unique(),\n refreshTokenExpiresAt: integer('refresh_token_expires_at', {\n mode: 'timestamp_ms',\n }),\n scopeIds: text('scope_ids', { mode: 'json' }).$type<string[]>().notNull().default([]),\n updatedAt: integer('updated_at', { mode: 'timestamp_ms' })\n .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`)\n .$onUpdate(() => new Date())\n .notNull(),\n userId: text('user_id'),\n})\n\nexport const insertTokenSchema = createInsertSchema(tokens)\nexport const selectTokenSchema = createSelectSchema(tokens)\n","import { sql } from 'drizzle-orm'\nimport { integer, sqliteTable, text } from 'drizzle-orm/sqlite-core'\nimport { createInsertSchema, createSelectSchema } from 'drizzle-zod'\n\nexport const users = sqliteTable('users', {\n createdAt: integer('created_at', { mode: 'timestamp_ms' })\n .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`)\n .notNull(),\n email: text('email').notNull().unique(),\n id: text('id').primaryKey(),\n lastLoginAt: integer('last_login_at', { mode: 'timestamp_ms' }),\n name: text('name').notNull(),\n passwordHash: text('password_hash'),\n role: text('role').default('user').notNull(),\n tokenVersion: integer('token_version').default(0).notNull(),\n updatedAt: integer('updated_at', { mode: 'timestamp_ms' })\n .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`)\n .$onUpdate(() => new Date())\n .notNull(),\n})\n\nexport const insertUserSchema = createInsertSchema(users)\nexport const selectUserSchema = createSelectSchema(users)\n","import { zValidator } from '@hono/zod-validator'\nimport { eq } from 'drizzle-orm'\nimport { Hono } from 'hono'\nimport { db } from './db/index.ts'\nimport { clients, insertClientSchema } from './db/schema/index.ts'\nimport { generateRandomToken } from './utils.ts'\n\nexport const apiAdminClients = new Hono()\n\napiAdminClients.get('/', async (c) => {\n const result = await db.select().from(clients).all()\n return c.json(result)\n})\n\napiAdminClients.get('/:id', async (c) => {\n const id = c.req.param('id')\n const result = await db.select().from(clients).where(eq(clients.id, id)).get()\n if (!result) {\n return c.json({ error: 'Client not found' }, 404)\n }\n return c.json(result)\n})\n\napiAdminClients.post('/', zValidator('json', insertClientSchema), async (c) => {\n const body = c.req.valid('json')\n\n try {\n const result = await db\n .insert(clients)\n .values({\n allowedGrants: body.allowedGrants ?? ['authorization_code', 'refresh_token'],\n id: body.id,\n name: body.name,\n redirectUris: body.redirectUris ?? [],\n scopeIds: body.scopeIds ?? [],\n secret: body.secret ?? generateRandomToken(),\n })\n .returning()\n .get()\n return c.json(result, 201)\n } catch (err) {\n if (err instanceof Error && err.message?.includes('UNIQUE constraint failed')) {\n return c.json({ error: 'Client already exists' }, 409)\n }\n return c.json({ error: 'Failed to create client' }, 500)\n }\n})\n\napiAdminClients.put(\n '/:id',\n zValidator(\n 'json',\n insertClientSchema\n .pick({\n allowedGrants: true,\n name: true,\n redirectUris: true,\n scopeIds: true,\n secret: true,\n })\n .partial(),\n ),\n async (c) => {\n const id = c.req.param('id')\n const body = c.req.valid('json')\n const result = await db.update(clients).set(body).where(eq(clients.id, id)).returning().get()\n if (!result) {\n return c.json({ error: 'Client not found' }, 404)\n }\n return c.json(result)\n },\n)\n\napiAdminClients.delete('/:id', async (c) => {\n const id = c.req.param('id')\n const result = await db.delete(clients).where(eq(clients.id, id)).returning().get()\n if (!result) {\n return c.json({ error: 'Client not found' }, 404)\n }\n return c.json({ message: 'Client deleted' })\n})\n","import { randomBytes } from 'node:crypto'\n\nexport function generateRandomToken(length = 32): string {\n return randomBytes(length).toString('hex')\n}\n","import { zValidator } from '@hono/zod-validator'\nimport { eq } from 'drizzle-orm'\nimport { Hono } from 'hono'\nimport { db } from './db/index.ts'\nimport { insertScopeSchema, scopes } from './db/schema/index.ts'\n\nexport const apiAdminScopes = new Hono()\n\napiAdminScopes.get('/', async (c) => {\n const result = await db.select().from(scopes).all()\n return c.json(result)\n})\n\napiAdminScopes.get('/:id', async (c) => {\n const id = c.req.param('id')\n const result = await db.select().from(scopes).where(eq(scopes.id, id)).get()\n if (!result) {\n return c.json({ error: 'Scope not found' }, 404)\n }\n return c.json(result)\n})\n\napiAdminScopes.post('/', zValidator('json', insertScopeSchema), async (c) => {\n const body = c.req.valid('json')\n\n try {\n const result = await db\n .insert(scopes)\n .values({\n description: body.description ?? null,\n id: body.id,\n name: body.name,\n })\n .returning()\n .get()\n return c.json(result, 201)\n } catch (err) {\n if (err instanceof Error && err.message?.includes('UNIQUE constraint failed')) {\n return c.json({ error: 'Scope already exists' }, 409)\n }\n return c.json({ error: 'Failed to create scope' }, 500)\n }\n})\n\napiAdminScopes.put(\n '/:id',\n zValidator('json', insertScopeSchema.pick({ description: true, name: true }).partial()),\n async (c) => {\n const id = c.req.param('id')\n const body = c.req.valid('json')\n const result = await db\n .update(scopes)\n .set({ description: body.description, name: body.name })\n .where(eq(scopes.id, id))\n .returning()\n .get()\n if (!result) {\n return c.json({ error: 'Scope not found' }, 404)\n }\n return c.json(result)\n },\n)\n\napiAdminScopes.delete('/:id', async (c) => {\n const id = c.req.param('id')\n const result = await db.delete(scopes).where(eq(scopes.id, id)).returning().get()\n if (!result) {\n return c.json({ error: 'Scope not found' }, 404)\n }\n return c.json({ message: 'Scope deleted' })\n})\n","import { eq } from 'drizzle-orm'\nimport { Hono } from 'hono'\nimport { db } from './db/index.ts'\nimport { tokens } from './db/schema/index.ts'\n\nexport const apiAdminTokens = new Hono()\n\napiAdminTokens.get('/', async (c) => {\n const result = await db.select().from(tokens).all()\n return c.json(result)\n})\n\napiAdminTokens.get('/:accessToken', async (c) => {\n const accessToken = c.req.param('accessToken')\n const result = await db.select().from(tokens).where(eq(tokens.accessToken, accessToken)).get()\n if (!result) {\n return c.json({ error: 'Token not found' }, 404)\n }\n return c.json(result)\n})\n\napiAdminTokens.delete('/:accessToken', async (c) => {\n const accessToken = c.req.param('accessToken')\n const result = await db.delete(tokens).where(eq(tokens.accessToken, accessToken)).returning().get()\n if (!result) {\n return c.json({ error: 'Token not found' }, 404)\n }\n return c.json({ message: 'Token deleted' })\n})\n\napiAdminTokens.post('/:accessToken/revoke', async (c) => {\n const accessToken = c.req.param('accessToken')\n const result = await db\n .update(tokens)\n .set({\n accessTokenExpiresAt: new Date(0),\n refreshTokenExpiresAt: new Date(0),\n })\n .where(eq(tokens.accessToken, accessToken))\n .returning()\n .get()\n if (!result) {\n return c.json({ error: 'Token not found' }, 404)\n }\n return c.json({ message: 'Token revoked' })\n})\n"],"mappings":"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","names":["import_hono","import_zod_validator","import_drizzle_orm","import_hono","import_drizzle_orm","import_drizzle_orm","import_sqlite_core","import_drizzle_zod","import_drizzle_orm","import_sqlite_core","import_drizzle_zod","import_drizzle_orm","import_sqlite_core","import_drizzle_zod","import_drizzle_orm","import_sqlite_core","import_drizzle_zod","import_drizzle_orm","import_hono","import_zod_validator","import_drizzle_orm","import_hono","import_drizzle_orm","import_hono"]}
package/dist/cli.js CHANGED
@@ -80,10 +80,14 @@ var package_default = {
80
80
  };
81
81
 
82
82
  // src/api.ts
83
- import { Hono as Hono2 } from "hono";
83
+ import { Hono as Hono6 } from "hono";
84
84
 
85
85
  // src/api-admin.ts
86
- import { zValidator } from "@hono/zod-validator";
86
+ import { zValidator as zValidator3 } from "@hono/zod-validator";
87
+ import { eq as eq5 } from "drizzle-orm";
88
+ import { Hono as Hono5 } from "hono";
89
+
90
+ // src/api-admin-auth-codes.ts
87
91
  import { eq } from "drizzle-orm";
88
92
  import { Hono } from "hono";
89
93
 
@@ -96,8 +100,16 @@ var schema_exports = {};
96
100
  __export(schema_exports, {
97
101
  authCodes: () => authCodes,
98
102
  clients: () => clients,
103
+ insertAuthCodeSchema: () => insertAuthCodeSchema,
104
+ insertClientSchema: () => insertClientSchema,
105
+ insertScopeSchema: () => insertScopeSchema,
106
+ insertTokenSchema: () => insertTokenSchema,
99
107
  insertUserSchema: () => insertUserSchema,
100
108
  scopes: () => scopes,
109
+ selectAuthCodeSchema: () => selectAuthCodeSchema,
110
+ selectClientSchema: () => selectClientSchema,
111
+ selectScopeSchema: () => selectScopeSchema,
112
+ selectTokenSchema: () => selectTokenSchema,
101
113
  selectUserSchema: () => selectUserSchema,
102
114
  tokens: () => tokens,
103
115
  users: () => users
@@ -106,6 +118,7 @@ __export(schema_exports, {
106
118
  // src/db/schema/auth-codes.ts
107
119
  import { sql } from "drizzle-orm";
108
120
  import { integer, sqliteTable, text } from "drizzle-orm/sqlite-core";
121
+ import { createInsertSchema, createSelectSchema } from "drizzle-zod";
109
122
  var authCodes = sqliteTable("auth_codes", {
110
123
  clientId: text("client_id").notNull(),
111
124
  code: text("code").primaryKey(),
@@ -118,10 +131,13 @@ var authCodes = sqliteTable("auth_codes", {
118
131
  updatedAt: integer("updated_at", { mode: "timestamp_ms" }).default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`).$onUpdate(() => /* @__PURE__ */ new Date()).notNull(),
119
132
  userId: text("user_id")
120
133
  });
134
+ var insertAuthCodeSchema = createInsertSchema(authCodes);
135
+ var selectAuthCodeSchema = createSelectSchema(authCodes);
121
136
 
122
137
  // src/db/schema/clients.ts
123
138
  import { sql as sql2 } from "drizzle-orm";
124
139
  import { integer as integer2, sqliteTable as sqliteTable2, text as text2 } from "drizzle-orm/sqlite-core";
140
+ import { createInsertSchema as createInsertSchema2, createSelectSchema as createSelectSchema2 } from "drizzle-zod";
125
141
  var clients = sqliteTable2("clients", {
126
142
  allowedGrants: text2("allowed_grants", { mode: "json" }).$type().notNull().default([]),
127
143
  createdAt: integer2("created_at", { mode: "timestamp_ms" }).default(sql2`(cast(unixepoch('subsecond') * 1000 as integer))`).notNull(),
@@ -132,10 +148,13 @@ var clients = sqliteTable2("clients", {
132
148
  secret: text2("secret"),
133
149
  updatedAt: integer2("updated_at", { mode: "timestamp_ms" }).default(sql2`(cast(unixepoch('subsecond') * 1000 as integer))`).$onUpdate(() => /* @__PURE__ */ new Date()).notNull()
134
150
  });
151
+ var insertClientSchema = createInsertSchema2(clients);
152
+ var selectClientSchema = createSelectSchema2(clients);
135
153
 
136
154
  // src/db/schema/scopes.ts
137
155
  import { sql as sql3 } from "drizzle-orm";
138
156
  import { integer as integer3, sqliteTable as sqliteTable3, text as text3 } from "drizzle-orm/sqlite-core";
157
+ import { createInsertSchema as createInsertSchema3, createSelectSchema as createSelectSchema3 } from "drizzle-zod";
139
158
  var scopes = sqliteTable3("scopes", {
140
159
  createdAt: integer3("created_at", { mode: "timestamp_ms" }).default(sql3`(cast(unixepoch('subsecond') * 1000 as integer))`).notNull(),
141
160
  description: text3("description"),
@@ -143,10 +162,13 @@ var scopes = sqliteTable3("scopes", {
143
162
  name: text3("name").notNull().unique(),
144
163
  updatedAt: integer3("updated_at", { mode: "timestamp_ms" }).default(sql3`(cast(unixepoch('subsecond') * 1000 as integer))`).$onUpdate(() => /* @__PURE__ */ new Date()).notNull()
145
164
  });
165
+ var insertScopeSchema = createInsertSchema3(scopes);
166
+ var selectScopeSchema = createSelectSchema3(scopes);
146
167
 
147
168
  // src/db/schema/tokens.ts
148
169
  import { sql as sql4 } from "drizzle-orm";
149
170
  import { integer as integer4, sqliteTable as sqliteTable4, text as text4 } from "drizzle-orm/sqlite-core";
171
+ import { createInsertSchema as createInsertSchema4, createSelectSchema as createSelectSchema4 } from "drizzle-zod";
150
172
  var tokens = sqliteTable4("tokens", {
151
173
  accessToken: text4("access_token").primaryKey(),
152
174
  accessTokenExpiresAt: integer4("access_token_expires_at", {
@@ -163,11 +185,13 @@ var tokens = sqliteTable4("tokens", {
163
185
  updatedAt: integer4("updated_at", { mode: "timestamp_ms" }).default(sql4`(cast(unixepoch('subsecond') * 1000 as integer))`).$onUpdate(() => /* @__PURE__ */ new Date()).notNull(),
164
186
  userId: text4("user_id")
165
187
  });
188
+ var insertTokenSchema = createInsertSchema4(tokens);
189
+ var selectTokenSchema = createSelectSchema4(tokens);
166
190
 
167
191
  // src/db/schema/users.ts
168
192
  import { sql as sql5 } from "drizzle-orm";
169
193
  import { integer as integer5, sqliteTable as sqliteTable5, text as text5 } from "drizzle-orm/sqlite-core";
170
- import { createInsertSchema, createSelectSchema } from "drizzle-zod";
194
+ import { createInsertSchema as createInsertSchema5, createSelectSchema as createSelectSchema5 } from "drizzle-zod";
171
195
  var users = sqliteTable5("users", {
172
196
  createdAt: integer5("created_at", { mode: "timestamp_ms" }).default(sql5`(cast(unixepoch('subsecond') * 1000 as integer))`).notNull(),
173
197
  email: text5("email").notNull().unique(),
@@ -179,8 +203,8 @@ var users = sqliteTable5("users", {
179
203
  tokenVersion: integer5("token_version").default(0).notNull(),
180
204
  updatedAt: integer5("updated_at", { mode: "timestamp_ms" }).default(sql5`(cast(unixepoch('subsecond') * 1000 as integer))`).$onUpdate(() => /* @__PURE__ */ new Date()).notNull()
181
205
  });
182
- var insertUserSchema = createInsertSchema(users);
183
- var selectUserSchema = createSelectSchema(users);
206
+ var insertUserSchema = createInsertSchema5(users);
207
+ var selectUserSchema = createSelectSchema5(users);
184
208
 
185
209
  // src/db/index.ts
186
210
  var client = createClient({
@@ -189,37 +213,236 @@ var client = createClient({
189
213
  });
190
214
  var db = drizzle(client, { schema: schema_exports });
191
215
 
216
+ // src/api-admin-auth-codes.ts
217
+ var apiAdminAuthCodes = new Hono();
218
+ apiAdminAuthCodes.get("/", async (c) => {
219
+ const result = await db.select().from(authCodes).all();
220
+ return c.json(result);
221
+ });
222
+ apiAdminAuthCodes.get("/:code", async (c) => {
223
+ const code = c.req.param("code");
224
+ const result = await db.select().from(authCodes).where(eq(authCodes.code, code)).get();
225
+ if (!result) {
226
+ return c.json({ error: "Auth code not found" }, 404);
227
+ }
228
+ return c.json(result);
229
+ });
230
+ apiAdminAuthCodes.delete("/:code", async (c) => {
231
+ const code = c.req.param("code");
232
+ const result = await db.delete(authCodes).where(eq(authCodes.code, code)).returning().get();
233
+ if (!result) {
234
+ return c.json({ error: "Auth code not found" }, 404);
235
+ }
236
+ return c.json({ message: "Auth code deleted" });
237
+ });
238
+ apiAdminAuthCodes.post("/:code/revoke", async (c) => {
239
+ const code = c.req.param("code");
240
+ const result = await db.update(authCodes).set({ expiresAt: /* @__PURE__ */ new Date(0) }).where(eq(authCodes.code, code)).returning().get();
241
+ if (!result) {
242
+ return c.json({ error: "Auth code not found" }, 404);
243
+ }
244
+ return c.json({ message: "Auth code revoked" });
245
+ });
246
+
247
+ // src/api-admin-clients.ts
248
+ import { zValidator } from "@hono/zod-validator";
249
+ import { eq as eq2 } from "drizzle-orm";
250
+ import { Hono as Hono2 } from "hono";
251
+
252
+ // src/utils.ts
253
+ import { randomBytes } from "crypto";
254
+ function generateRandomToken(length = 32) {
255
+ return randomBytes(length).toString("hex");
256
+ }
257
+
258
+ // src/api-admin-clients.ts
259
+ var apiAdminClients = new Hono2();
260
+ apiAdminClients.get("/", async (c) => {
261
+ const result = await db.select().from(clients).all();
262
+ return c.json(result);
263
+ });
264
+ apiAdminClients.get("/:id", async (c) => {
265
+ const id = c.req.param("id");
266
+ const result = await db.select().from(clients).where(eq2(clients.id, id)).get();
267
+ if (!result) {
268
+ return c.json({ error: "Client not found" }, 404);
269
+ }
270
+ return c.json(result);
271
+ });
272
+ apiAdminClients.post("/", zValidator("json", insertClientSchema), async (c) => {
273
+ const body = c.req.valid("json");
274
+ try {
275
+ const result = await db.insert(clients).values({
276
+ allowedGrants: body.allowedGrants ?? ["authorization_code", "refresh_token"],
277
+ id: body.id,
278
+ name: body.name,
279
+ redirectUris: body.redirectUris ?? [],
280
+ scopeIds: body.scopeIds ?? [],
281
+ secret: body.secret ?? generateRandomToken()
282
+ }).returning().get();
283
+ return c.json(result, 201);
284
+ } catch (err) {
285
+ if (err instanceof Error && err.message?.includes("UNIQUE constraint failed")) {
286
+ return c.json({ error: "Client already exists" }, 409);
287
+ }
288
+ return c.json({ error: "Failed to create client" }, 500);
289
+ }
290
+ });
291
+ apiAdminClients.put(
292
+ "/:id",
293
+ zValidator(
294
+ "json",
295
+ insertClientSchema.pick({
296
+ allowedGrants: true,
297
+ name: true,
298
+ redirectUris: true,
299
+ scopeIds: true,
300
+ secret: true
301
+ }).partial()
302
+ ),
303
+ async (c) => {
304
+ const id = c.req.param("id");
305
+ const body = c.req.valid("json");
306
+ const result = await db.update(clients).set(body).where(eq2(clients.id, id)).returning().get();
307
+ if (!result) {
308
+ return c.json({ error: "Client not found" }, 404);
309
+ }
310
+ return c.json(result);
311
+ }
312
+ );
313
+ apiAdminClients.delete("/:id", async (c) => {
314
+ const id = c.req.param("id");
315
+ const result = await db.delete(clients).where(eq2(clients.id, id)).returning().get();
316
+ if (!result) {
317
+ return c.json({ error: "Client not found" }, 404);
318
+ }
319
+ return c.json({ message: "Client deleted" });
320
+ });
321
+
322
+ // src/api-admin-scopes.ts
323
+ import { zValidator as zValidator2 } from "@hono/zod-validator";
324
+ import { eq as eq3 } from "drizzle-orm";
325
+ import { Hono as Hono3 } from "hono";
326
+ var apiAdminScopes = new Hono3();
327
+ apiAdminScopes.get("/", async (c) => {
328
+ const result = await db.select().from(scopes).all();
329
+ return c.json(result);
330
+ });
331
+ apiAdminScopes.get("/:id", async (c) => {
332
+ const id = c.req.param("id");
333
+ const result = await db.select().from(scopes).where(eq3(scopes.id, id)).get();
334
+ if (!result) {
335
+ return c.json({ error: "Scope not found" }, 404);
336
+ }
337
+ return c.json(result);
338
+ });
339
+ apiAdminScopes.post("/", zValidator2("json", insertScopeSchema), async (c) => {
340
+ const body = c.req.valid("json");
341
+ try {
342
+ const result = await db.insert(scopes).values({
343
+ description: body.description ?? null,
344
+ id: body.id,
345
+ name: body.name
346
+ }).returning().get();
347
+ return c.json(result, 201);
348
+ } catch (err) {
349
+ if (err instanceof Error && err.message?.includes("UNIQUE constraint failed")) {
350
+ return c.json({ error: "Scope already exists" }, 409);
351
+ }
352
+ return c.json({ error: "Failed to create scope" }, 500);
353
+ }
354
+ });
355
+ apiAdminScopes.put(
356
+ "/:id",
357
+ zValidator2("json", insertScopeSchema.pick({ description: true, name: true }).partial()),
358
+ async (c) => {
359
+ const id = c.req.param("id");
360
+ const body = c.req.valid("json");
361
+ const result = await db.update(scopes).set({ description: body.description, name: body.name }).where(eq3(scopes.id, id)).returning().get();
362
+ if (!result) {
363
+ return c.json({ error: "Scope not found" }, 404);
364
+ }
365
+ return c.json(result);
366
+ }
367
+ );
368
+ apiAdminScopes.delete("/:id", async (c) => {
369
+ const id = c.req.param("id");
370
+ const result = await db.delete(scopes).where(eq3(scopes.id, id)).returning().get();
371
+ if (!result) {
372
+ return c.json({ error: "Scope not found" }, 404);
373
+ }
374
+ return c.json({ message: "Scope deleted" });
375
+ });
376
+
377
+ // src/api-admin-tokens.ts
378
+ import { eq as eq4 } from "drizzle-orm";
379
+ import { Hono as Hono4 } from "hono";
380
+ var apiAdminTokens = new Hono4();
381
+ apiAdminTokens.get("/", async (c) => {
382
+ const result = await db.select().from(tokens).all();
383
+ return c.json(result);
384
+ });
385
+ apiAdminTokens.get("/:accessToken", async (c) => {
386
+ const accessToken = c.req.param("accessToken");
387
+ const result = await db.select().from(tokens).where(eq4(tokens.accessToken, accessToken)).get();
388
+ if (!result) {
389
+ return c.json({ error: "Token not found" }, 404);
390
+ }
391
+ return c.json(result);
392
+ });
393
+ apiAdminTokens.delete("/:accessToken", async (c) => {
394
+ const accessToken = c.req.param("accessToken");
395
+ const result = await db.delete(tokens).where(eq4(tokens.accessToken, accessToken)).returning().get();
396
+ if (!result) {
397
+ return c.json({ error: "Token not found" }, 404);
398
+ }
399
+ return c.json({ message: "Token deleted" });
400
+ });
401
+ apiAdminTokens.post("/:accessToken/revoke", async (c) => {
402
+ const accessToken = c.req.param("accessToken");
403
+ const result = await db.update(tokens).set({
404
+ accessTokenExpiresAt: /* @__PURE__ */ new Date(0),
405
+ refreshTokenExpiresAt: /* @__PURE__ */ new Date(0)
406
+ }).where(eq4(tokens.accessToken, accessToken)).returning().get();
407
+ if (!result) {
408
+ return c.json({ error: "Token not found" }, 404);
409
+ }
410
+ return c.json({ message: "Token revoked" });
411
+ });
412
+
192
413
  // src/api-admin.ts
193
- var apiAdmin = new Hono();
414
+ var apiAdmin = new Hono5();
415
+ apiAdmin.route("/scopes", apiAdminScopes);
416
+ apiAdmin.route("/clients", apiAdminClients);
417
+ apiAdmin.route("/tokens", apiAdminTokens);
418
+ apiAdmin.route("/auth-codes", apiAdminAuthCodes);
194
419
  apiAdmin.get("/users", async (c) => {
195
420
  const result = await db.select().from(users).all();
196
421
  return c.json(result);
197
422
  });
198
423
  apiAdmin.get("/users/:id", async (c) => {
199
424
  const id = c.req.param("id");
200
- const result = await db.select().from(users).where(eq(users.id, id)).get();
425
+ const result = await db.select().from(users).where(eq5(users.id, id)).get();
201
426
  if (!result) {
202
427
  return c.json({ error: "User not found" }, 404);
203
428
  }
204
429
  return c.json(result);
205
430
  });
206
- apiAdmin.post("/users", zValidator("json", insertUserSchema), async (c) => {
431
+ apiAdmin.post("/users", zValidator3("json", insertUserSchema), async (c) => {
207
432
  const body = c.req.valid("json");
208
433
  try {
209
434
  const result = await db.insert(users).values(body).returning().get();
210
435
  return c.json(result, 201);
211
436
  } catch (err) {
212
- if (err instanceof Error) {
213
- if (err.message?.includes("UNIQUE constraint failed")) {
214
- return c.json({ error: "User already exists" }, 409);
215
- }
437
+ if (err instanceof Error && err.message?.includes("UNIQUE constraint failed")) {
438
+ return c.json({ error: "User already exists" }, 409);
216
439
  }
217
440
  return c.json({ error: "Failed to create user" }, 500);
218
441
  }
219
442
  });
220
443
  apiAdmin.delete("/users/:id", async (c) => {
221
444
  const id = c.req.param("id");
222
- const result = await db.delete(users).where(eq(users.id, id)).returning().get();
445
+ const result = await db.delete(users).where(eq5(users.id, id)).returning().get();
223
446
  if (!result) {
224
447
  return c.json({ error: "User not found" }, 404);
225
448
  }
@@ -228,7 +451,7 @@ apiAdmin.delete("/users/:id", async (c) => {
228
451
 
229
452
  // src/api.ts
230
453
  function startServer(port = 3e3, options = {}) {
231
- const app = new Hono2();
454
+ const app = new Hono6();
232
455
  app.get("/", (c) => {
233
456
  return c.text("Hello Hono!");
234
457
  });
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli.ts","../package.json","../src/api.ts","../src/api-admin.ts","../src/db/index.ts","../src/db/schema/index.ts","../src/db/schema/auth-codes.ts","../src/db/schema/clients.ts","../src/db/schema/scopes.ts","../src/db/schema/tokens.ts","../src/db/schema/users.ts"],"sourcesContent":["#!/usr/bin/env bun\nimport { Command } from 'commander'\nimport packageJson from '../package.json' with { type: 'json' }\nimport { startServer } from './api.ts'\n\nconst program = new Command()\n\nprogram.name(packageJson.name).description(packageJson.description).version(packageJson.version)\n\nprogram\n .command('start')\n .description('Start the API server')\n .option('--admin', 'Enable admin API endpoints', false)\n .option('-p, --port <number>', 'Port to run the server on', '3000')\n .action((options) => {\n const { app, port } = startServer(parseInt(options.port, 10), {\n enableAdmin: options.admin,\n })\n\n Bun.serve({ fetch: app.fetch, port })\n })\n\nprogram.parse(process.argv)\n","{\n \"bin\": {\n \"solana-auth-oauth2-server\": \"dist/cli.js\"\n },\n \"dependencies\": {\n \"@hono/zod-validator\": \"^0.7.6\",\n \"@libsql/client\": \"^0.17.0\",\n \"commander\": \"^14.0.2\",\n \"drizzle-orm\": \"^0.45.1\",\n \"drizzle-zod\": \"^0.8.3\",\n \"hono\": \"^4.11.5\",\n \"libsql\": \"^0.5.22\",\n \"zod\": \"^4.3.6\"\n },\n \"devDependencies\": {\n \"@biomejs/biome\": \"^2.3.11\",\n \"@changesets/cli\": \"^2.29.8\",\n \"@types/bun\": \"latest\",\n \"drizzle-kit\": \"^0.31.8\",\n \"pkg-pr-new\": \"^0.0.62\",\n \"publint\": \"^0.3.16\",\n \"tsup\": \"^8.5.1\"\n },\n \"exports\": {\n \".\": {\n \"import\": {\n \"types\": \"./dist/index.d.ts\",\n \"default\": \"./dist/index.js\"\n },\n \"require\": {\n \"types\": \"./dist/index.d.cts\",\n \"default\": \"./dist/index.cjs\"\n }\n }\n },\n \"files\": [\"dist\"],\n \"license\": \"MIT\",\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"name\": \"solana-auth-oauth2-server\",\n \"description\": \"Solana Auth OAuth2 Server\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/solana-auth/solana-auth-oauth2-server.git\"\n },\n \"peerDependencies\": {\n \"typescript\": \"^5\"\n },\n \"scripts\": {\n \"build\": \"tsup\",\n \"changeset\": \"changeset\",\n \"check-types\": \"tsc -b --noEmit\",\n \"db:generate\": \"drizzle-kit generate\",\n \"db:migrate\": \"drizzle-kit migrate\",\n \"db:push\": \"drizzle-kit push\",\n \"db:seed\": \"bun src/seed.ts\",\n \"db:seed:oauth\": \"bun scripts/seed-oauth.ts\",\n \"db:studio\": \"drizzle-kit studio\",\n \"lint\": \"biome check --error-on-warnings\",\n \"lint:fix\": \"biome check --error-on-warnings --write\",\n \"release\": \"changeset publish\",\n \"test\": \"bun test ./test/\",\n \"test:watch\": \"bun test --watch ./test/\",\n \"version\": \"changeset version && bun lint:fix\"\n },\n \"type\": \"module\",\n \"types\": \"./dist/index.d.ts\",\n \"version\": \"0.0.0\"\n}\n","import { Hono } from 'hono'\nimport { apiAdmin } from './api-admin.ts'\n\nexport function startServer(port: number = 3000, options: { enableAdmin?: boolean } = {}) {\n const app = new Hono()\n\n app.get('/', (c) => {\n return c.text('Hello Hono!')\n })\n\n if (options.enableAdmin) {\n app.route('/admin', apiAdmin)\n console.log('Admin API enabled at /admin')\n }\n\n console.log(`Server is running on port ${port}`)\n\n return {\n app,\n port,\n }\n}\n","import { zValidator } from '@hono/zod-validator'\nimport { eq } from 'drizzle-orm'\nimport { Hono } from 'hono'\nimport { db } from './db/index.ts'\nimport { insertUserSchema, users } from './db/schema/index.ts'\n\nexport const apiAdmin = new Hono()\n\n// List users\napiAdmin.get('/users', async (c) => {\n const result = await db.select().from(users).all()\n return c.json(result)\n})\n\n// Get user by ID\napiAdmin.get('/users/:id', async (c) => {\n const id = c.req.param('id')\n const result = await db.select().from(users).where(eq(users.id, id)).get()\n\n if (!result) {\n return c.json({ error: 'User not found' }, 404)\n }\n\n return c.json(result)\n})\n\n// Create user\napiAdmin.post('/users', zValidator('json', insertUserSchema), async (c) => {\n const body = c.req.valid('json')\n\n try {\n const result = await db.insert(users).values(body).returning().get()\n\n return c.json(result, 201)\n } catch (err) {\n if (err instanceof Error) {\n if (err.message?.includes('UNIQUE constraint failed')) {\n return c.json({ error: 'User already exists' }, 409)\n }\n }\n return c.json({ error: 'Failed to create user' }, 500)\n }\n})\n\n// Delete user\napiAdmin.delete('/users/:id', async (c) => {\n const id = c.req.param('id')\n\n const result = await db.delete(users).where(eq(users.id, id)).returning().get()\n\n if (!result) {\n return c.json({ error: 'User not found' }, 404)\n }\n\n return c.json({ message: 'User deleted' })\n})\n","import { createClient } from '@libsql/client'\nimport { drizzle } from 'drizzle-orm/libsql'\nimport * as schema from './schema/index.ts'\n\nconst client = createClient({\n authToken: process.env.DATABASE_AUTH_TOKEN,\n url: process.env.DATABASE_URL || 'file:local.db',\n})\n\nexport const db = drizzle(client, { schema })\n","export * from './auth-codes.ts'\nexport * from './clients.ts'\nexport * from './scopes.ts'\nexport * from './tokens.ts'\nexport * from './users.ts'\n","import { sql } from 'drizzle-orm'\nimport { integer, sqliteTable, text } from 'drizzle-orm/sqlite-core'\n\nexport const authCodes = sqliteTable('auth_codes', {\n clientId: text('client_id').notNull(),\n code: text('code').primaryKey(),\n codeChallenge: text('code_challenge'),\n codeChallengeMethod: text('code_challenge_method').$type<'S256' | 'plain'>(),\n createdAt: integer('created_at', { mode: 'timestamp_ms' })\n .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`)\n .notNull(),\n expiresAt: integer('expires_at', { mode: 'timestamp_ms' }).notNull(),\n redirectUri: text('redirect_uri'),\n scopeIds: text('scope_ids', { mode: 'json' }).$type<string[]>().notNull().default([]),\n updatedAt: integer('updated_at', { mode: 'timestamp_ms' })\n .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`)\n .$onUpdate(() => new Date())\n .notNull(),\n userId: text('user_id'),\n})\n","import { sql } from 'drizzle-orm'\nimport { integer, sqliteTable, text } from 'drizzle-orm/sqlite-core'\n\nexport const clients = sqliteTable('clients', {\n allowedGrants: text('allowed_grants', { mode: 'json' }).$type<string[]>().notNull().default([]),\n createdAt: integer('created_at', { mode: 'timestamp_ms' })\n .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`)\n .notNull(),\n id: text('id').primaryKey(),\n name: text('name').notNull(),\n redirectUris: text('redirect_uris', { mode: 'json' }).$type<string[]>().notNull().default([]),\n scopeIds: text('scope_ids', { mode: 'json' }).$type<string[]>().notNull().default([]),\n secret: text('secret'),\n updatedAt: integer('updated_at', { mode: 'timestamp_ms' })\n .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`)\n .$onUpdate(() => new Date())\n .notNull(),\n})\n","import { sql } from 'drizzle-orm'\nimport { integer, sqliteTable, text } from 'drizzle-orm/sqlite-core'\n\nexport const scopes = sqliteTable('scopes', {\n createdAt: integer('created_at', { mode: 'timestamp_ms' })\n .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`)\n .notNull(),\n description: text('description'),\n id: text('id').primaryKey(),\n name: text('name').notNull().unique(),\n updatedAt: integer('updated_at', { mode: 'timestamp_ms' })\n .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`)\n .$onUpdate(() => new Date())\n .notNull(),\n})\n","import { sql } from 'drizzle-orm'\nimport { integer, sqliteTable, text } from 'drizzle-orm/sqlite-core'\n\nexport const tokens = sqliteTable('tokens', {\n accessToken: text('access_token').primaryKey(),\n accessTokenExpiresAt: integer('access_token_expires_at', {\n mode: 'timestamp_ms',\n }).notNull(),\n clientId: text('client_id').notNull(),\n createdAt: integer('created_at', { mode: 'timestamp_ms' })\n .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`)\n .notNull(),\n originatingAuthCodeId: text('originating_auth_code_id'),\n refreshToken: text('refresh_token').unique(),\n refreshTokenExpiresAt: integer('refresh_token_expires_at', {\n mode: 'timestamp_ms',\n }),\n scopeIds: text('scope_ids', { mode: 'json' }).$type<string[]>().notNull().default([]),\n updatedAt: integer('updated_at', { mode: 'timestamp_ms' })\n .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`)\n .$onUpdate(() => new Date())\n .notNull(),\n userId: text('user_id'),\n})\n","import { sql } from 'drizzle-orm'\nimport { integer, sqliteTable, text } from 'drizzle-orm/sqlite-core'\nimport { createInsertSchema, createSelectSchema } from 'drizzle-zod'\n\nexport const users = sqliteTable('users', {\n createdAt: integer('created_at', { mode: 'timestamp_ms' })\n .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`)\n .notNull(),\n email: text('email').notNull().unique(),\n id: text('id').primaryKey(),\n lastLoginAt: integer('last_login_at', { mode: 'timestamp_ms' }),\n name: text('name').notNull(),\n passwordHash: text('password_hash'),\n role: text('role').default('user').notNull(),\n tokenVersion: integer('token_version').default(0).notNull(),\n updatedAt: integer('updated_at', { mode: 'timestamp_ms' })\n .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`)\n .$onUpdate(() => new Date())\n .notNull(),\n})\n\nexport const insertUserSchema = createInsertSchema(users)\nexport const selectUserSchema = createSelectSchema(users)\n"],"mappings":"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","names":["Hono","sql","integer","sqliteTable","text","sql","integer","sqliteTable","text","sql","integer","sqliteTable","text","sql","integer","sqliteTable","text","Hono"]}
1
+ {"version":3,"sources":["../src/cli.ts","../package.json","../src/api.ts","../src/api-admin.ts","../src/api-admin-auth-codes.ts","../src/db/index.ts","../src/db/schema/index.ts","../src/db/schema/auth-codes.ts","../src/db/schema/clients.ts","../src/db/schema/scopes.ts","../src/db/schema/tokens.ts","../src/db/schema/users.ts","../src/api-admin-clients.ts","../src/utils.ts","../src/api-admin-scopes.ts","../src/api-admin-tokens.ts"],"sourcesContent":["#!/usr/bin/env bun\nimport { Command } from 'commander'\nimport packageJson from '../package.json' with { type: 'json' }\nimport { startServer } from './api.ts'\n\nconst program = new Command()\n\nprogram.name(packageJson.name).description(packageJson.description).version(packageJson.version)\n\nprogram\n .command('start')\n .description('Start the API server')\n .option('--admin', 'Enable admin API endpoints', false)\n .option('-p, --port <number>', 'Port to run the server on', '3000')\n .action((options) => {\n const { app, port } = startServer(parseInt(options.port, 10), {\n enableAdmin: options.admin,\n })\n\n Bun.serve({ fetch: app.fetch, port })\n })\n\nprogram.parse(process.argv)\n","{\n \"bin\": {\n \"solana-auth-oauth2-server\": \"dist/cli.js\"\n },\n \"dependencies\": {\n \"@hono/zod-validator\": \"^0.7.6\",\n \"@libsql/client\": \"^0.17.0\",\n \"commander\": \"^14.0.2\",\n \"drizzle-orm\": \"^0.45.1\",\n \"drizzle-zod\": \"^0.8.3\",\n \"hono\": \"^4.11.5\",\n \"libsql\": \"^0.5.22\",\n \"zod\": \"^4.3.6\"\n },\n \"devDependencies\": {\n \"@biomejs/biome\": \"^2.3.11\",\n \"@changesets/cli\": \"^2.29.8\",\n \"@types/bun\": \"latest\",\n \"drizzle-kit\": \"^0.31.8\",\n \"pkg-pr-new\": \"^0.0.62\",\n \"publint\": \"^0.3.16\",\n \"tsup\": \"^8.5.1\"\n },\n \"exports\": {\n \".\": {\n \"import\": {\n \"types\": \"./dist/index.d.ts\",\n \"default\": \"./dist/index.js\"\n },\n \"require\": {\n \"types\": \"./dist/index.d.cts\",\n \"default\": \"./dist/index.cjs\"\n }\n }\n },\n \"files\": [\"dist\"],\n \"license\": \"MIT\",\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"name\": \"solana-auth-oauth2-server\",\n \"description\": \"Solana Auth OAuth2 Server\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/solana-auth/solana-auth-oauth2-server.git\"\n },\n \"peerDependencies\": {\n \"typescript\": \"^5\"\n },\n \"scripts\": {\n \"build\": \"tsup\",\n \"changeset\": \"changeset\",\n \"check-types\": \"tsc -b --noEmit\",\n \"db:generate\": \"drizzle-kit generate\",\n \"db:migrate\": \"drizzle-kit migrate\",\n \"db:push\": \"drizzle-kit push\",\n \"db:seed\": \"bun src/seed.ts\",\n \"db:seed:oauth\": \"bun scripts/seed-oauth.ts\",\n \"db:studio\": \"drizzle-kit studio\",\n \"lint\": \"biome check --error-on-warnings\",\n \"lint:fix\": \"biome check --error-on-warnings --write\",\n \"release\": \"changeset publish\",\n \"test\": \"bun test ./test/\",\n \"test:watch\": \"bun test --watch ./test/\",\n \"version\": \"changeset version && bun lint:fix\"\n },\n \"type\": \"module\",\n \"types\": \"./dist/index.d.ts\",\n \"version\": \"0.0.0\"\n}\n","import { Hono } from 'hono'\nimport { apiAdmin } from './api-admin.ts'\n\nexport function startServer(port: number = 3000, options: { enableAdmin?: boolean } = {}) {\n const app = new Hono()\n\n app.get('/', (c) => {\n return c.text('Hello Hono!')\n })\n\n if (options.enableAdmin) {\n app.route('/admin', apiAdmin)\n console.log('Admin API enabled at /admin')\n }\n\n console.log(`Server is running on port ${port}`)\n\n return {\n app,\n port,\n }\n}\n","import { zValidator } from '@hono/zod-validator'\nimport { eq } from 'drizzle-orm'\nimport { Hono } from 'hono'\nimport { apiAdminAuthCodes } from './api-admin-auth-codes.ts'\nimport { apiAdminClients } from './api-admin-clients.ts'\nimport { apiAdminScopes } from './api-admin-scopes.ts'\nimport { apiAdminTokens } from './api-admin-tokens.ts'\nimport { db } from './db/index.ts'\nimport { insertUserSchema, users } from './db/schema/index.ts'\n\nexport const apiAdmin = new Hono()\n\n// Mount sub-routers\napiAdmin.route('/scopes', apiAdminScopes)\napiAdmin.route('/clients', apiAdminClients)\napiAdmin.route('/tokens', apiAdminTokens)\napiAdmin.route('/auth-codes', apiAdminAuthCodes)\n\n// List users\napiAdmin.get('/users', async (c) => {\n const result = await db.select().from(users).all()\n return c.json(result)\n})\n\n// Get user by ID\napiAdmin.get('/users/:id', async (c) => {\n const id = c.req.param('id')\n const result = await db.select().from(users).where(eq(users.id, id)).get()\n if (!result) {\n return c.json({ error: 'User not found' }, 404)\n }\n return c.json(result)\n})\n\n// Create user\napiAdmin.post('/users', zValidator('json', insertUserSchema), async (c) => {\n const body = c.req.valid('json')\n\n try {\n const result = await db.insert(users).values(body).returning().get()\n\n return c.json(result, 201)\n } catch (err) {\n if (err instanceof Error && err.message?.includes('UNIQUE constraint failed')) {\n return c.json({ error: 'User already exists' }, 409)\n }\n return c.json({ error: 'Failed to create user' }, 500)\n }\n})\n\n// Delete user\napiAdmin.delete('/users/:id', async (c) => {\n const id = c.req.param('id')\n const result = await db.delete(users).where(eq(users.id, id)).returning().get()\n if (!result) {\n return c.json({ error: 'User not found' }, 404)\n }\n return c.json({ message: 'User deleted' })\n})\n","import { eq } from 'drizzle-orm'\nimport { Hono } from 'hono'\nimport { db } from './db/index.ts'\nimport { authCodes } from './db/schema/index.ts'\n\nexport const apiAdminAuthCodes = new Hono()\n\napiAdminAuthCodes.get('/', async (c) => {\n const result = await db.select().from(authCodes).all()\n return c.json(result)\n})\n\napiAdminAuthCodes.get('/:code', async (c) => {\n const code = c.req.param('code')\n const result = await db.select().from(authCodes).where(eq(authCodes.code, code)).get()\n if (!result) {\n return c.json({ error: 'Auth code not found' }, 404)\n }\n return c.json(result)\n})\n\napiAdminAuthCodes.delete('/:code', async (c) => {\n const code = c.req.param('code')\n const result = await db.delete(authCodes).where(eq(authCodes.code, code)).returning().get()\n if (!result) {\n return c.json({ error: 'Auth code not found' }, 404)\n }\n return c.json({ message: 'Auth code deleted' })\n})\n\napiAdminAuthCodes.post('/:code/revoke', async (c) => {\n const code = c.req.param('code')\n const result = await db\n .update(authCodes)\n .set({ expiresAt: new Date(0) })\n .where(eq(authCodes.code, code))\n .returning()\n .get()\n if (!result) {\n return c.json({ error: 'Auth code not found' }, 404)\n }\n return c.json({ message: 'Auth code revoked' })\n})\n","import { createClient } from '@libsql/client'\nimport { drizzle } from 'drizzle-orm/libsql'\nimport * as schema from './schema/index.ts'\n\nconst client = createClient({\n authToken: process.env.DATABASE_AUTH_TOKEN,\n url: process.env.DATABASE_URL || 'file:local.db',\n})\n\nexport const db = drizzle(client, { schema })\n","export * from './auth-codes.ts'\nexport * from './clients.ts'\nexport * from './scopes.ts'\nexport * from './tokens.ts'\nexport * from './users.ts'\n","import { sql } from 'drizzle-orm'\nimport { integer, sqliteTable, text } from 'drizzle-orm/sqlite-core'\nimport { createInsertSchema, createSelectSchema } from 'drizzle-zod'\n\nexport const authCodes = sqliteTable('auth_codes', {\n clientId: text('client_id').notNull(),\n code: text('code').primaryKey(),\n codeChallenge: text('code_challenge'),\n codeChallengeMethod: text('code_challenge_method').$type<'S256' | 'plain'>(),\n createdAt: integer('created_at', { mode: 'timestamp_ms' })\n .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`)\n .notNull(),\n expiresAt: integer('expires_at', { mode: 'timestamp_ms' }).notNull(),\n redirectUri: text('redirect_uri'),\n scopeIds: text('scope_ids', { mode: 'json' }).$type<string[]>().notNull().default([]),\n updatedAt: integer('updated_at', { mode: 'timestamp_ms' })\n .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`)\n .$onUpdate(() => new Date())\n .notNull(),\n userId: text('user_id'),\n})\n\nexport const insertAuthCodeSchema = createInsertSchema(authCodes)\nexport const selectAuthCodeSchema = createSelectSchema(authCodes)\n","import { sql } from 'drizzle-orm'\nimport { integer, sqliteTable, text } from 'drizzle-orm/sqlite-core'\nimport { createInsertSchema, createSelectSchema } from 'drizzle-zod'\n\nexport const clients = sqliteTable('clients', {\n allowedGrants: text('allowed_grants', { mode: 'json' }).$type<string[]>().notNull().default([]),\n createdAt: integer('created_at', { mode: 'timestamp_ms' })\n .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`)\n .notNull(),\n id: text('id').primaryKey(),\n name: text('name').notNull(),\n redirectUris: text('redirect_uris', { mode: 'json' }).$type<string[]>().notNull().default([]),\n scopeIds: text('scope_ids', { mode: 'json' }).$type<string[]>().notNull().default([]),\n secret: text('secret'),\n updatedAt: integer('updated_at', { mode: 'timestamp_ms' })\n .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`)\n .$onUpdate(() => new Date())\n .notNull(),\n})\n\nexport const insertClientSchema = createInsertSchema(clients)\nexport const selectClientSchema = createSelectSchema(clients)\n","import { sql } from 'drizzle-orm'\nimport { integer, sqliteTable, text } from 'drizzle-orm/sqlite-core'\nimport { createInsertSchema, createSelectSchema } from 'drizzle-zod'\n\nexport const scopes = sqliteTable('scopes', {\n createdAt: integer('created_at', { mode: 'timestamp_ms' })\n .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`)\n .notNull(),\n description: text('description'),\n id: text('id').primaryKey(),\n name: text('name').notNull().unique(),\n updatedAt: integer('updated_at', { mode: 'timestamp_ms' })\n .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`)\n .$onUpdate(() => new Date())\n .notNull(),\n})\n\nexport const insertScopeSchema = createInsertSchema(scopes)\nexport const selectScopeSchema = createSelectSchema(scopes)\n","import { sql } from 'drizzle-orm'\nimport { integer, sqliteTable, text } from 'drizzle-orm/sqlite-core'\nimport { createInsertSchema, createSelectSchema } from 'drizzle-zod'\n\nexport const tokens = sqliteTable('tokens', {\n accessToken: text('access_token').primaryKey(),\n accessTokenExpiresAt: integer('access_token_expires_at', {\n mode: 'timestamp_ms',\n }).notNull(),\n clientId: text('client_id').notNull(),\n createdAt: integer('created_at', { mode: 'timestamp_ms' })\n .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`)\n .notNull(),\n originatingAuthCodeId: text('originating_auth_code_id'),\n refreshToken: text('refresh_token').unique(),\n refreshTokenExpiresAt: integer('refresh_token_expires_at', {\n mode: 'timestamp_ms',\n }),\n scopeIds: text('scope_ids', { mode: 'json' }).$type<string[]>().notNull().default([]),\n updatedAt: integer('updated_at', { mode: 'timestamp_ms' })\n .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`)\n .$onUpdate(() => new Date())\n .notNull(),\n userId: text('user_id'),\n})\n\nexport const insertTokenSchema = createInsertSchema(tokens)\nexport const selectTokenSchema = createSelectSchema(tokens)\n","import { sql } from 'drizzle-orm'\nimport { integer, sqliteTable, text } from 'drizzle-orm/sqlite-core'\nimport { createInsertSchema, createSelectSchema } from 'drizzle-zod'\n\nexport const users = sqliteTable('users', {\n createdAt: integer('created_at', { mode: 'timestamp_ms' })\n .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`)\n .notNull(),\n email: text('email').notNull().unique(),\n id: text('id').primaryKey(),\n lastLoginAt: integer('last_login_at', { mode: 'timestamp_ms' }),\n name: text('name').notNull(),\n passwordHash: text('password_hash'),\n role: text('role').default('user').notNull(),\n tokenVersion: integer('token_version').default(0).notNull(),\n updatedAt: integer('updated_at', { mode: 'timestamp_ms' })\n .default(sql`(cast(unixepoch('subsecond') * 1000 as integer))`)\n .$onUpdate(() => new Date())\n .notNull(),\n})\n\nexport const insertUserSchema = createInsertSchema(users)\nexport const selectUserSchema = createSelectSchema(users)\n","import { zValidator } from '@hono/zod-validator'\nimport { eq } from 'drizzle-orm'\nimport { Hono } from 'hono'\nimport { db } from './db/index.ts'\nimport { clients, insertClientSchema } from './db/schema/index.ts'\nimport { generateRandomToken } from './utils.ts'\n\nexport const apiAdminClients = new Hono()\n\napiAdminClients.get('/', async (c) => {\n const result = await db.select().from(clients).all()\n return c.json(result)\n})\n\napiAdminClients.get('/:id', async (c) => {\n const id = c.req.param('id')\n const result = await db.select().from(clients).where(eq(clients.id, id)).get()\n if (!result) {\n return c.json({ error: 'Client not found' }, 404)\n }\n return c.json(result)\n})\n\napiAdminClients.post('/', zValidator('json', insertClientSchema), async (c) => {\n const body = c.req.valid('json')\n\n try {\n const result = await db\n .insert(clients)\n .values({\n allowedGrants: body.allowedGrants ?? ['authorization_code', 'refresh_token'],\n id: body.id,\n name: body.name,\n redirectUris: body.redirectUris ?? [],\n scopeIds: body.scopeIds ?? [],\n secret: body.secret ?? generateRandomToken(),\n })\n .returning()\n .get()\n return c.json(result, 201)\n } catch (err) {\n if (err instanceof Error && err.message?.includes('UNIQUE constraint failed')) {\n return c.json({ error: 'Client already exists' }, 409)\n }\n return c.json({ error: 'Failed to create client' }, 500)\n }\n})\n\napiAdminClients.put(\n '/:id',\n zValidator(\n 'json',\n insertClientSchema\n .pick({\n allowedGrants: true,\n name: true,\n redirectUris: true,\n scopeIds: true,\n secret: true,\n })\n .partial(),\n ),\n async (c) => {\n const id = c.req.param('id')\n const body = c.req.valid('json')\n const result = await db.update(clients).set(body).where(eq(clients.id, id)).returning().get()\n if (!result) {\n return c.json({ error: 'Client not found' }, 404)\n }\n return c.json(result)\n },\n)\n\napiAdminClients.delete('/:id', async (c) => {\n const id = c.req.param('id')\n const result = await db.delete(clients).where(eq(clients.id, id)).returning().get()\n if (!result) {\n return c.json({ error: 'Client not found' }, 404)\n }\n return c.json({ message: 'Client deleted' })\n})\n","import { randomBytes } from 'node:crypto'\n\nexport function generateRandomToken(length = 32): string {\n return randomBytes(length).toString('hex')\n}\n","import { zValidator } from '@hono/zod-validator'\nimport { eq } from 'drizzle-orm'\nimport { Hono } from 'hono'\nimport { db } from './db/index.ts'\nimport { insertScopeSchema, scopes } from './db/schema/index.ts'\n\nexport const apiAdminScopes = new Hono()\n\napiAdminScopes.get('/', async (c) => {\n const result = await db.select().from(scopes).all()\n return c.json(result)\n})\n\napiAdminScopes.get('/:id', async (c) => {\n const id = c.req.param('id')\n const result = await db.select().from(scopes).where(eq(scopes.id, id)).get()\n if (!result) {\n return c.json({ error: 'Scope not found' }, 404)\n }\n return c.json(result)\n})\n\napiAdminScopes.post('/', zValidator('json', insertScopeSchema), async (c) => {\n const body = c.req.valid('json')\n\n try {\n const result = await db\n .insert(scopes)\n .values({\n description: body.description ?? null,\n id: body.id,\n name: body.name,\n })\n .returning()\n .get()\n return c.json(result, 201)\n } catch (err) {\n if (err instanceof Error && err.message?.includes('UNIQUE constraint failed')) {\n return c.json({ error: 'Scope already exists' }, 409)\n }\n return c.json({ error: 'Failed to create scope' }, 500)\n }\n})\n\napiAdminScopes.put(\n '/:id',\n zValidator('json', insertScopeSchema.pick({ description: true, name: true }).partial()),\n async (c) => {\n const id = c.req.param('id')\n const body = c.req.valid('json')\n const result = await db\n .update(scopes)\n .set({ description: body.description, name: body.name })\n .where(eq(scopes.id, id))\n .returning()\n .get()\n if (!result) {\n return c.json({ error: 'Scope not found' }, 404)\n }\n return c.json(result)\n },\n)\n\napiAdminScopes.delete('/:id', async (c) => {\n const id = c.req.param('id')\n const result = await db.delete(scopes).where(eq(scopes.id, id)).returning().get()\n if (!result) {\n return c.json({ error: 'Scope not found' }, 404)\n }\n return c.json({ message: 'Scope deleted' })\n})\n","import { eq } from 'drizzle-orm'\nimport { Hono } from 'hono'\nimport { db } from './db/index.ts'\nimport { tokens } from './db/schema/index.ts'\n\nexport const apiAdminTokens = new Hono()\n\napiAdminTokens.get('/', async (c) => {\n const result = await db.select().from(tokens).all()\n return c.json(result)\n})\n\napiAdminTokens.get('/:accessToken', async (c) => {\n const accessToken = c.req.param('accessToken')\n const result = await db.select().from(tokens).where(eq(tokens.accessToken, accessToken)).get()\n if (!result) {\n return c.json({ error: 'Token not found' }, 404)\n }\n return c.json(result)\n})\n\napiAdminTokens.delete('/:accessToken', async (c) => {\n const accessToken = c.req.param('accessToken')\n const result = await db.delete(tokens).where(eq(tokens.accessToken, accessToken)).returning().get()\n if (!result) {\n return c.json({ error: 'Token not found' }, 404)\n }\n return c.json({ message: 'Token deleted' })\n})\n\napiAdminTokens.post('/:accessToken/revoke', async (c) => {\n const accessToken = c.req.param('accessToken')\n const result = await db\n .update(tokens)\n .set({\n accessTokenExpiresAt: new Date(0),\n refreshTokenExpiresAt: new Date(0),\n })\n .where(eq(tokens.accessToken, accessToken))\n .returning()\n .get()\n if (!result) {\n return c.json({ error: 'Token not found' }, 404)\n }\n return c.json({ message: 'Token revoked' })\n})\n"],"mappings":"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","names":["Hono","zValidator","eq","Hono","sql","integer","sqliteTable","text","createInsertSchema","createSelectSchema","sql","integer","sqliteTable","text","createInsertSchema","createSelectSchema","sql","integer","sqliteTable","text","createInsertSchema","createSelectSchema","sql","integer","sqliteTable","text","createInsertSchema","createSelectSchema","eq","Hono","Hono","eq","zValidator","eq","Hono","Hono","eq","zValidator","eq","Hono","Hono","eq","Hono","eq","zValidator","Hono"]}
package/package.json CHANGED
@@ -67,5 +67,5 @@
67
67
  },
68
68
  "type": "module",
69
69
  "types": "./dist/index.d.ts",
70
- "version": "0.1.0-canary-20260125213759"
70
+ "version": "0.1.0-canary-20260125224000"
71
71
  }