@fuzdev/fuz_app 0.82.0 → 0.83.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account_queries.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/auth/account_queries.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EAEN,KAAK,OAAO,EACZ,KAAK,KAAK,EACV,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC1B,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"account_queries.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/auth/account_queries.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,22 @@
|
|
|
9
9
|
import { assert_row } from '../db/assert_row.js';
|
|
10
10
|
import { to_admin_account, } from './account_schema.js';
|
|
11
11
|
import { ADMIN_ACCOUNT_LIST_DEFAULT_LIMIT } from './admin_action_specs.js';
|
|
12
|
+
/**
|
|
13
|
+
* The full `account` column set, named explicitly so a row read fails loud
|
|
14
|
+
* on schema drift.
|
|
15
|
+
*
|
|
16
|
+
* `SELECT *` silently omits a dropped column, which the login lookups then
|
|
17
|
+
* misread: `query_account_by_username_or_email` filters its result with
|
|
18
|
+
* `account.deleted_at === null`, so a missing `deleted_at` column reads back
|
|
19
|
+
* as `undefined`, `undefined === null` is `false`, and *every* login resolves
|
|
20
|
+
* to "not found" (401) — a silent, total auth outage instead of an error.
|
|
21
|
+
* Selecting named columns turns that drift into a hard Postgres
|
|
22
|
+
* `column "..." does not exist`. Mirrors the Rust side
|
|
23
|
+
* (`fuz_auth/src/account_queries.rs`), which selects named columns and
|
|
24
|
+
* decodes them positionally. Keep in sync with `Account` and the `account`
|
|
25
|
+
* DDL in `auth/auth_ddl.ts`.
|
|
26
|
+
*/
|
|
27
|
+
const ACCOUNT_COLUMNS = 'id, username, email, email_verified, password_hash, created_at, created_by, updated_at, updated_by, deleted_at, deleted_by';
|
|
12
28
|
/**
|
|
13
29
|
* Create a new account.
|
|
14
30
|
*
|
|
@@ -33,25 +49,19 @@ export const query_create_account = async (deps, input) => {
|
|
|
33
49
|
* soft-deleted rows too, uses `query_purge_account` directly.
|
|
34
50
|
*/
|
|
35
51
|
export const query_account_by_id = async (deps, id) => {
|
|
36
|
-
return deps.db.query_one(`SELECT
|
|
37
|
-
id,
|
|
38
|
-
]);
|
|
52
|
+
return deps.db.query_one(`SELECT ${ACCOUNT_COLUMNS} FROM account WHERE id = $1 AND deleted_at IS NULL`, [id]);
|
|
39
53
|
};
|
|
40
54
|
/**
|
|
41
55
|
* Find an account by username (case-insensitive).
|
|
42
56
|
*/
|
|
43
57
|
export const query_account_by_username = async (deps, username) => {
|
|
44
|
-
return deps.db.query_one(`SELECT
|
|
45
|
-
username,
|
|
46
|
-
]);
|
|
58
|
+
return deps.db.query_one(`SELECT ${ACCOUNT_COLUMNS} FROM account WHERE LOWER(username) = LOWER($1)`, [username]);
|
|
47
59
|
};
|
|
48
60
|
/**
|
|
49
61
|
* Find an account by email (case-insensitive).
|
|
50
62
|
*/
|
|
51
63
|
export const query_account_by_email = async (deps, email) => {
|
|
52
|
-
return deps.db.query_one(`SELECT
|
|
53
|
-
email,
|
|
54
|
-
]);
|
|
64
|
+
return deps.db.query_one(`SELECT ${ACCOUNT_COLUMNS} FROM account WHERE LOWER(email) = LOWER($1)`, [email]);
|
|
55
65
|
};
|
|
56
66
|
/**
|
|
57
67
|
* Find an account by username or email.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fuzdev/fuz_app",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.83.0",
|
|
4
4
|
"description": "fullstack app library",
|
|
5
5
|
"glyph": "🗝",
|
|
6
6
|
"logo": "logo.svg",
|
|
@@ -28,16 +28,17 @@
|
|
|
28
28
|
"peerDependencies": {
|
|
29
29
|
"@electric-sql/pglite": ">=0.4",
|
|
30
30
|
"@fuzdev/blake3_wasm": ">=0.1.0",
|
|
31
|
-
"@fuzdev/fuz_util": ">=0.
|
|
31
|
+
"@fuzdev/fuz_util": ">=0.65.1",
|
|
32
32
|
"@hono/node-server": ">=1",
|
|
33
33
|
"@hono/node-ws": ">=1",
|
|
34
34
|
"@node-rs/argon2": ">=2",
|
|
35
35
|
"@sveltejs/kit": "^2",
|
|
36
|
+
"esm-env": "^1",
|
|
36
37
|
"hono": ">=4",
|
|
37
38
|
"pg": ">=8",
|
|
38
39
|
"svelte": "^5",
|
|
39
40
|
"ws": ">=8",
|
|
40
|
-
"zod": "
|
|
41
|
+
"zod": "^4"
|
|
41
42
|
},
|
|
42
43
|
"peerDependenciesMeta": {
|
|
43
44
|
"@electric-sql/pglite": {
|
|
@@ -52,6 +53,9 @@
|
|
|
52
53
|
"@node-rs/argon2": {
|
|
53
54
|
"optional": true
|
|
54
55
|
},
|
|
56
|
+
"esm-env": {
|
|
57
|
+
"optional": true
|
|
58
|
+
},
|
|
55
59
|
"hono": {
|
|
56
60
|
"optional": true
|
|
57
61
|
},
|
|
@@ -65,19 +69,18 @@
|
|
|
65
69
|
"devDependencies": {
|
|
66
70
|
"@electric-sql/pglite": "^0.4.5",
|
|
67
71
|
"@fuzdev/blake3_wasm": "^0.1.1",
|
|
68
|
-
"@fuzdev/fuz_code": "^0.
|
|
69
|
-
"@fuzdev/fuz_css": "^0.
|
|
70
|
-
"@fuzdev/fuz_ui": "^0.
|
|
71
|
-
"@fuzdev/fuz_util": "^0.
|
|
72
|
-
"@fuzdev/gro": "^0.
|
|
72
|
+
"@fuzdev/fuz_code": "^0.46.0",
|
|
73
|
+
"@fuzdev/fuz_css": "^0.62.0",
|
|
74
|
+
"@fuzdev/fuz_ui": "^0.199.0",
|
|
75
|
+
"@fuzdev/fuz_util": "^0.65.1",
|
|
76
|
+
"@fuzdev/gro": "^0.204.0",
|
|
73
77
|
"@hono/node-server": "^1.19.14",
|
|
74
78
|
"@hono/node-ws": "^1.3.1",
|
|
75
|
-
"@jridgewell/trace-mapping": "^0.3.31",
|
|
76
79
|
"@node-rs/argon2": "^2.0.2",
|
|
77
80
|
"@ryanatkn/eslint-config": "^0.12.1",
|
|
78
81
|
"@sveltejs/acorn-typescript": "^1.0.9",
|
|
79
82
|
"@sveltejs/adapter-static": "^3.0.10",
|
|
80
|
-
"@sveltejs/kit": "^2.
|
|
83
|
+
"@sveltejs/kit": "^2.63.0",
|
|
81
84
|
"@sveltejs/package": "^2.5.7",
|
|
82
85
|
"@sveltejs/vite-plugin-svelte": "^6.2.4",
|
|
83
86
|
"@types/estree": "^1.0.8",
|
|
@@ -93,9 +96,9 @@
|
|
|
93
96
|
"pg": "^8.20.0",
|
|
94
97
|
"prettier": "^3.7.4",
|
|
95
98
|
"prettier-plugin-svelte": "^3.5.1",
|
|
96
|
-
"svelte": "^5.56.
|
|
97
|
-
"svelte-check": "^4.
|
|
98
|
-
"svelte-docinfo": "^0.
|
|
99
|
+
"svelte": "^5.56.2",
|
|
100
|
+
"svelte-check": "^4.6.0",
|
|
101
|
+
"svelte-docinfo": "^0.4.1",
|
|
99
102
|
"svelte2tsx": "^0.7.52",
|
|
100
103
|
"tslib": "^2.8.1",
|
|
101
104
|
"typescript": "^5.9.3",
|