diff --git a/package-lock.json b/package-lock.json index f956e6d..693a05c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,9 +6,9 @@ "": { "name": "auth-auth", "dependencies": { - "@better-auth/oauth-provider": "1.6.27", + "@better-auth/oauth-provider": "1.7.5", "@hono/node-server": "^2.1.0", - "better-auth": "^1.6.20", + "better-auth": "^1.7.5", "date-fns": "^4.4.0", "hono": "^4.13.1", "hono-pino": "^0.10.3", @@ -91,19 +91,18 @@ } }, "node_modules/@better-auth/core": { - "version": "1.6.27", - "resolved": "https://registry.npmjs.org/@better-auth/core/-/core-1.6.27.tgz", - "integrity": "sha512-A6/mQW4AT2kSHCRZDh9+k8jPUqnCUUCymzBgIroK0l60wLioMtJdcmZiTwrAn6KVUw+4XWw64MgaRn7LOie3wg==", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/@better-auth/core/-/core-1.7.5.tgz", + "integrity": "sha512-kVlSu4H8OKQfjg4b/Zj5MOaospt83N0JbX38wsDzE58Yw95jzovFkU3pxzB1eUFYc4mkuhUMZD8iT1gpUjNMcQ==", "license": "MIT", "dependencies": { - "@opentelemetry/semantic-conventions": "^1.39.0", + "@opentelemetry/semantic-conventions": "^1.41.1", "@standard-schema/spec": "^1.1.0", - "zod": "^4.3.6" + "zod": "^4.5.4" }, "peerDependencies": { "@better-auth/utils": "0.4.2", - "@better-fetch/fetch": "1.3.1", - "@cloudflare/workers-types": ">=4", + "@better-fetch/fetch": "1.3.2", "@opentelemetry/api": "^1.9.0", "better-call": "1.4.0", "jose": "^6.1.0", @@ -111,21 +110,34 @@ "nanostores": "^1.0.1" }, "peerDependenciesMeta": { - "@cloudflare/workers-types": { - "optional": true - }, "@opentelemetry/api": { "optional": true } } }, + "node_modules/@better-auth/drizzle-adapter": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/@better-auth/drizzle-adapter/-/drizzle-adapter-1.7.5.tgz", + "integrity": "sha512-9SM7v1735SoaedRDcDbHc5ULgXEd2vUlEJkvRHpMF2Q9qf59TRh1b5A9hryyecyi56bm/0CNUDU3nY0uVWj5/Q==", + "license": "MIT", + "peerDependencies": { + "@better-auth/core": "^1.7.5", + "@better-auth/utils": "0.4.2", + "drizzle-orm": "^0.45.2 || >=1.0.0-rc.1 <2.0.0" + }, + "peerDependenciesMeta": { + "drizzle-orm": { + "optional": true + } + } + }, "node_modules/@better-auth/kysely-adapter": { - "version": "1.6.27", - "resolved": "https://registry.npmjs.org/@better-auth/kysely-adapter/-/kysely-adapter-1.6.27.tgz", - "integrity": "sha512-aavv7W4+b3QVObYo166baplWvwocCk8ORDxRqQ9ytzVl/waiUpSXAOtDHdXZHFsoVHFVPtEzyEq0Tqr3Qvvfig==", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/@better-auth/kysely-adapter/-/kysely-adapter-1.7.5.tgz", + "integrity": "sha512-1wE5gvnjW+c1i4GrLtL9HLn3s0Xrq4YneCDan1NO1dpz0mEguLFNlzfnUGykTFrDwvFh2X5rkIbA8ALCj6WzXQ==", "license": "MIT", "peerDependencies": { - "@better-auth/core": "^1.6.27", + "@better-auth/core": "^1.7.5", "@better-auth/utils": "0.4.2", "kysely": "^0.28.17 || ^0.29.0" }, @@ -136,22 +148,22 @@ } }, "node_modules/@better-auth/memory-adapter": { - "version": "1.6.27", - "resolved": "https://registry.npmjs.org/@better-auth/memory-adapter/-/memory-adapter-1.6.27.tgz", - "integrity": "sha512-p4NB37MdaVFkxkpLEAKjORgTPhaOAPu1M2zgQXiTJJ3F6Uq3Y1YcCgoz+VxJu0TQfxibCsJD/dZlJMVgf+CF7A==", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/@better-auth/memory-adapter/-/memory-adapter-1.7.5.tgz", + "integrity": "sha512-YDmnfR9zOXbn5SNYYwfHBPuc19hg1d1C1vUXb+Hm8Q91pTsstFNX5OTlZbo7f28q06FpogAEfGGCN/2QV39cig==", "license": "MIT", "peerDependencies": { - "@better-auth/core": "^1.6.27", + "@better-auth/core": "^1.7.5", "@better-auth/utils": "0.4.2" } }, "node_modules/@better-auth/mongo-adapter": { - "version": "1.6.27", - "resolved": "https://registry.npmjs.org/@better-auth/mongo-adapter/-/mongo-adapter-1.6.27.tgz", - "integrity": "sha512-IOYbJMIjEC//f+JpFlmIQjh6x1R/rGAfdzlojFk6HeAJqbsELuMcI+27dIoesbfHLF/icTrSpZtK986XhJrCfA==", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/@better-auth/mongo-adapter/-/mongo-adapter-1.7.5.tgz", + "integrity": "sha512-Yq0LfF0VlA9Kfjcjp/v43MSsChv7vKd1ct0Mt15px4zlqaCPIGfPbjw9YNM6jTo0fGpqLR0n15PllSWmLLRp9g==", "license": "MIT", "peerDependencies": { - "@better-auth/core": "^1.6.27", + "@better-auth/core": "^1.7.5", "@better-auth/utils": "0.4.2", "mongodb": "^6.0.0 || ^7.0.0" }, @@ -162,29 +174,29 @@ } }, "node_modules/@better-auth/oauth-provider": { - "version": "1.6.27", - "resolved": "https://registry.npmjs.org/@better-auth/oauth-provider/-/oauth-provider-1.6.27.tgz", - "integrity": "sha512-xUQ8GgbWUOYesO5wocrzbHdGa0Jojrxh59Vdew/1xzRRDYfXPEP/vq8Sj754BBwXjGAoKkvU/u6BaLXLBNOlYA==", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/@better-auth/oauth-provider/-/oauth-provider-1.7.5.tgz", + "integrity": "sha512-hVHb1TfydO8hWJXeZaGeJ+1506Fn+8hsffes+TFwi6/gl/ui+GqJVliPhHhuaOqpC1gN8ZFiLr0u8bh0aSnTLg==", "license": "MIT", "dependencies": { - "jose": "^6.1.3", - "zod": "^4.3.6" + "jose": "^6.2.3", + "zod": "^4.5.4" }, "peerDependencies": { - "@better-auth/core": "^1.6.27", + "@better-auth/core": "^1.7.5", "@better-auth/utils": "0.4.2", - "@better-fetch/fetch": "1.3.1", - "better-auth": "^1.6.27", + "@better-fetch/fetch": "1.3.2", + "better-auth": "^1.7.5", "better-call": "1.4.0" } }, "node_modules/@better-auth/prisma-adapter": { - "version": "1.6.27", - "resolved": "https://registry.npmjs.org/@better-auth/prisma-adapter/-/prisma-adapter-1.6.27.tgz", - "integrity": "sha512-v7DXVyaFbkrfLoiFDtcVF7BkEZgFa/DgEGE7XjrAXmMACa5pjDvb7lm8W5X+/qgIbQP04eThhgFQ6EWOsjr8OQ==", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/@better-auth/prisma-adapter/-/prisma-adapter-1.7.5.tgz", + "integrity": "sha512-QfW6HS9vK0FMcbI/GsQLdplICxOz0EPzYWGONZT4ovL3cSItd4YH/09USbPPVl+VUQCdznAQIk+n+NKvHdmSag==", "license": "MIT", "peerDependencies": { - "@better-auth/core": "^1.6.27", + "@better-auth/core": "^1.7.5", "@better-auth/utils": "0.4.2", "@prisma/client": "^5.0.0 || ^6.0.0 || ^7.0.0", "prisma": "^5.0.0 || ^6.0.0 || ^7.0.0" @@ -199,14 +211,14 @@ } }, "node_modules/@better-auth/telemetry": { - "version": "1.6.27", - "resolved": "https://registry.npmjs.org/@better-auth/telemetry/-/telemetry-1.6.27.tgz", - "integrity": "sha512-aYrSiVWQfua8w5YX8X1cM6ca48EdS0t5k+CvYXIsruaNIpR1DXMe1DOD0M5FWAVABnlCf9joyHXbFRSIZSNY/A==", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/@better-auth/telemetry/-/telemetry-1.7.5.tgz", + "integrity": "sha512-e/REPqMy9Em+gC6G0xWBikiMLRuy532Er7jqdoNkPBa65FbywgWcm1cZbgdW5CnHsrM3OLZsmKn14yeGoDISeg==", "license": "MIT", "peerDependencies": { - "@better-auth/core": "^1.6.27", + "@better-auth/core": "^1.7.5", "@better-auth/utils": "0.4.2", - "@better-fetch/fetch": "1.3.1" + "@better-fetch/fetch": "1.3.2" } }, "node_modules/@better-auth/utils": { @@ -219,9 +231,9 @@ } }, "node_modules/@better-fetch/fetch": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@better-fetch/fetch/-/fetch-1.3.1.tgz", - "integrity": "sha512-ABkD1WhyfPZprKRQI3bhATjeiFuNWC9PXhfGWqL+sg/gKrM977oFrYkdb4msM3hgUGonr7KlOsOFT5TU2rht9g==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@better-fetch/fetch/-/fetch-1.3.2.tgz", + "integrity": "sha512-Gs7n99b5tqUC6cQAPbV0uED3IraHB6xQbHLQ/C3l7ZFafHScOx9pQ+DYmP5blbLFShVWLqxNUlI9wi4xU/X+ow==", "license": "MIT" }, "node_modules/@commitlint/cli": { @@ -1965,14 +1977,14 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-26.0.0.tgz", - "integrity": "sha512-vf2YFi1iY9lHGwNJMs01biZFbKJkrZR1T6/MlzjhJLPdntOHLhTrDSnSVcdtvjihi4VQNlrFRIxLsDBlQpAipA==", + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-26.6.3.tgz", + "integrity": "sha512-dsqMQQoeTLqu9wynDD00q573mNzso3IdQOAfHRJqLCcmCFPoGo9A1bDpUcv/9tnKpErQWv9uKeGfl37EIS02Yg==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "undici-types": "~8.3.0" + "undici-types": "~8.9.0" } }, "node_modules/@typescript/native-preview": { @@ -2641,28 +2653,28 @@ } }, "node_modules/better-auth": { - "version": "1.6.27", - "resolved": "https://registry.npmjs.org/better-auth/-/better-auth-1.6.27.tgz", - "integrity": "sha512-x3jyxpAiBSsMO/DaXMFSVwM8bTqnYZlCKsZxBV43zL3ZtsGa/CzeUuNKxPT2Lsz7ahTBY90Ku1tibN6nRpVEbw==", - "license": "MIT", - "dependencies": { - "@better-auth/core": "1.6.27", - "@better-auth/drizzle-adapter": "1.6.27", - "@better-auth/kysely-adapter": "1.6.27", - "@better-auth/memory-adapter": "1.6.27", - "@better-auth/mongo-adapter": "1.6.27", - "@better-auth/prisma-adapter": "1.6.27", - "@better-auth/telemetry": "1.6.27", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/better-auth/-/better-auth-1.7.5.tgz", + "integrity": "sha512-aKE0Zt2EPTpFvmq4/oATNyG/mAfc6JUqWkW9pzGlrVnzUb0lso7GJ9BPxD6JPhLqYV1a9zOAb0uAz1Q5fm+eHA==", + "license": "MIT", + "dependencies": { + "@better-auth/core": "1.7.5", + "@better-auth/drizzle-adapter": "1.7.5", + "@better-auth/kysely-adapter": "1.7.5", + "@better-auth/memory-adapter": "1.7.5", + "@better-auth/mongo-adapter": "1.7.5", + "@better-auth/prisma-adapter": "1.7.5", + "@better-auth/telemetry": "1.7.5", "@better-auth/utils": "0.4.2", - "@better-fetch/fetch": "1.3.1", - "@noble/ciphers": "^2.1.1", - "@noble/hashes": "^2.0.1", + "@better-fetch/fetch": "1.3.2", + "@noble/ciphers": "^2.2.0", + "@noble/hashes": "^2.2.0", "better-call": "1.4.0", "defu": "^6.1.4", - "jose": "^6.1.3", + "jose": "^6.2.3", "kysely": "^0.28.17 || ^0.29.0", - "nanostores": "^1.1.1", - "zod": "^4.3.6" + "nanostores": "^1.3.0", + "zod": "^4.5.4" }, "peerDependencies": { "@lynx-js/react": "*", @@ -2670,9 +2682,8 @@ "@sveltejs/kit": "^2.0.0", "@tanstack/react-start": "^1.0.0", "@tanstack/solid-start": "^1.0.0", - "better-sqlite3": "^12.0.0", - "drizzle-kit": ">=0.31.4", - "drizzle-orm": "^0.45.2", + "drizzle-kit": ">=0.31.4 || >=1.0.0-beta.1", + "drizzle-orm": "^0.45.2 || >=1.0.0-rc.1 <2.0.0", "mongodb": "^6.0.0 || ^7.0.0", "mysql2": "^3.0.0", "next": "^14.0.0 || ^15.0.0 || ^16.0.0", @@ -2682,7 +2693,7 @@ "react-dom": "^18.0.0 || ^19.0.0", "solid-js": "^1.0.0", "svelte": "^4.0.0 || ^5.0.0", - "vitest": "^2.0.0 || ^3.0.0 || ^4.0.0", + "vitest": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", "vue": "^3.0.0" }, "peerDependenciesMeta": { @@ -2701,9 +2712,6 @@ "@tanstack/solid-start": { "optional": true }, - "better-sqlite3": { - "optional": true - }, "drizzle-kit": { "optional": true }, @@ -2745,22 +2753,6 @@ } } }, - "node_modules/better-auth/node_modules/@better-auth/drizzle-adapter": { - "version": "1.6.27", - "resolved": "https://registry.npmjs.org/@better-auth/drizzle-adapter/-/drizzle-adapter-1.6.27.tgz", - "integrity": "sha512-BDJ02ra/fji/ah3aIpxjjNOu/JQVex0UisxS4S0vGZZyiAs+DL24mn3/iovyD5dWB3u3NaGg1n8zpTOntiIXcg==", - "license": "MIT", - "peerDependencies": { - "@better-auth/core": "^1.6.27", - "@better-auth/utils": "0.4.2", - "drizzle-orm": "^0.45.2" - }, - "peerDependenciesMeta": { - "drizzle-orm": { - "optional": true - } - } - }, "node_modules/better-call": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/better-call/-/better-call-1.4.0.tgz", @@ -6284,9 +6276,9 @@ } }, "node_modules/undici-types": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.3.0.tgz", - "integrity": "sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==", + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.9.0.tgz", + "integrity": "sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg==", "dev": true, "license": "MIT", "peer": true @@ -6575,9 +6567,9 @@ "license": "MIT" }, "node_modules/zod": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", - "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", + "version": "4.6.5", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.6.5.tgz", + "integrity": "sha512-v5l/aFXZQeai4awLbOpSoHecE9UiMrnfx75tEXLjNonXVARxQ5mOeipTjROUchszUNCqnE+hqAMujRsRHsut2Q==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" diff --git a/package.json b/package.json index 7ca6e7a..55be6af 100644 --- a/package.json +++ b/package.json @@ -24,9 +24,9 @@ "e2e": "playwright test" }, "dependencies": { - "@better-auth/oauth-provider": "1.6.27", + "@better-auth/oauth-provider": "1.7.5", "@hono/node-server": "^2.1.0", - "better-auth": "^1.6.20", + "better-auth": "^1.7.5", "date-fns": "^4.4.0", "hono": "^4.13.1", "hono-pino": "^0.10.3", diff --git a/src/app/db/seed-client.js b/src/app/db/seed-client.js index e1fb00a..8b53441 100644 --- a/src/app/db/seed-client.js +++ b/src/app/db/seed-client.js @@ -5,8 +5,6 @@ * first-party client row via raw SQL. */ -// ponytail: raw SQL because Better Auth doesn't expose a public API to -// create OAuth clients without admin auth. If the schema changes, update here. export async function seedPlannerClient(db, redirectUris, schemaName) { const uris = Array.isArray(redirectUris) ? redirectUris : [redirectUris]; // Validate schemaName to prevent SQL injection — only alphanumeric + underscore @@ -20,11 +18,11 @@ export async function seedPlannerClient(db, redirectUris, schemaName) { const sql = `INSERT INTO ${table} ( id, "clientId", "clientSecret", name, "redirectUris", "grantTypes", "responseTypes", "tokenEndpointAuthMethod", - "public", "skipConsent", "requirePKCE", "createdAt", "updatedAt" + "skipConsent", "requirePKCE", "createdAt", "updatedAt" ) VALUES ( 'planner-seed', 'planner', NULL, 'Codebar Planner', $1::jsonb, to_jsonb(ARRAY['authorization_code']), - to_jsonb(ARRAY['code']), 'none', true, true, true, + to_jsonb(ARRAY['code']), 'none', true, true, NOW(), NOW() ) ON CONFLICT ("clientId") DO UPDATE SET "redirectUris" = $1::jsonb`; diff --git a/test/features/oauth-provider.test.js b/test/features/oauth-provider.test.js index 235e64a..7304f42 100644 --- a/test/features/oauth-provider.test.js +++ b/test/features/oauth-provider.test.js @@ -21,7 +21,9 @@ test("OAuth Provider plugin tests", async (t) => { t.ok(client, "planner client exists"); t.equal(client.clientId, "planner", "clientId is planner"); - t.equal(client.public, true, "client is public"); + t.notOk("public" in client, "legacy public column is not in the schema"); + t.notOk("type" in client, "legacy type column is not in the schema"); + t.equal(client.skipConsent, true, "consent is skipped"); t.equal(client.requirePKCE, true, "PKCE is required"); t.equal( client.tokenEndpointAuthMethod,