@supacloud/lite 0.31.2 → 0.31.3

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/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.31.3](https://github.com/vibeunion/supacloud/compare/supacloud-lite-v0.31.2...supacloud-lite-v0.31.3) (2026-10-17)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * **cli:** align verification target resolution ([#2052](https://github.com/vibeunion/supacloud/issues/2052)) ([3cfcc36](https://github.com/vibeunion/supacloud/commit/3cfcc362f87ecdaf82a4df303f5af436875fb36e))
9
+ * **lite:** align default storage size limit ([#2053](https://github.com/vibeunion/supacloud/issues/2053)) ([8414234](https://github.com/vibeunion/supacloud/commit/8414234d72fc42440ea1133646d6b11422097a4a))
10
+ * **lite:** validate image size metadata ([#2046](https://github.com/vibeunion/supacloud/issues/2046)) ([9ea248e](https://github.com/vibeunion/supacloud/commit/9ea248ecca9cebf5b1bba8b70ea50195613d1f3d))
11
+ * **supacloud-lite:** bind email tokens to current account address ([#2047](https://github.com/vibeunion/supacloud/issues/2047)) ([355d08c](https://github.com/vibeunion/supacloud/commit/355d08cdbc7d0d90085a2208557f1decc1d15e82))
12
+
3
13
  ## [0.31.2](https://github.com/vibeunion/supacloud/compare/supacloud-lite-v0.31.1...supacloud-lite-v0.31.2) (2026-10-17)
4
14
 
5
15
 
package/dist/cli.js CHANGED
@@ -8,7 +8,7 @@ import { dirname as dirname8, join as join10, resolve as resolve6 } from "path";
8
8
  // package.json
9
9
  var package_default = {
10
10
  name: "@supacloud/lite",
11
- version: "0.31.2",
11
+ version: "0.31.3",
12
12
  description: "Bun-native, single-project Supabase-compatible backend powered by PGlite or native PostgreSQL",
13
13
  type: "module",
14
14
  license: "Apache-2.0",
@@ -67,16 +67,16 @@ var package_default = {
67
67
  "@electric-sql/pglite-pgmq": "0.0.8",
68
68
  "@electric-sql/pglite-pgvector": "0.0.11",
69
69
  "@electric-sql/pglite-postgis": "0.2.10",
70
- "@supacloud/db": "0.18.3",
70
+ "@supacloud/db": "0.18.4",
71
71
  "exact-mirror": "1.2.6",
72
72
  tar: "^7.5.22",
73
73
  typebox: "1.3.37"
74
74
  },
75
75
  devDependencies: {
76
- "@supacloud/app": "0.28.2",
77
- "@supacloud/contracts": "0.11.4",
78
- "@supacloud/compiler": "0.47.2",
79
- "@supacloud/elysia": "0.33.4",
76
+ "@supacloud/app": "0.28.3",
77
+ "@supacloud/contracts": "0.11.5",
78
+ "@supacloud/compiler": "0.47.3",
79
+ "@supacloud/elysia": "0.33.5",
80
80
  "@supabase/supabase-js": "^2.117.3",
81
81
  "@types/bun": "^1.4.3",
82
82
  effect: "4.0.5",
@@ -85,13 +85,13 @@ var package_default = {
85
85
  typescript: "^7.0.2"
86
86
  },
87
87
  overrides: {
88
- "@supacloud/db": "0.18.3",
89
- "@supacloud/app": "0.28.2",
90
- "@supacloud/compiler": "0.47.2",
91
- "@supacloud/elysia": "0.33.4",
92
- "@supacloud/contracts": "0.11.4",
93
- "@supacloud/commands": "0.9.6",
94
- "@supacloud/delivery": "0.19.3",
88
+ "@supacloud/db": "0.18.4",
89
+ "@supacloud/app": "0.28.3",
90
+ "@supacloud/compiler": "0.47.3",
91
+ "@supacloud/elysia": "0.33.5",
92
+ "@supacloud/contracts": "0.11.5",
93
+ "@supacloud/commands": "0.9.7",
94
+ "@supacloud/delivery": "0.19.4",
95
95
  "@graphql-tools/utils": "^12.0.4"
96
96
  },
97
97
  engines: {
@@ -1526,16 +1526,6 @@ class AuthHandler {
1526
1526
  if (body.email && !this.settings.autoconfirm) {
1527
1527
  return authError(501, "email_change_confirmation_not_supported", "Email changes that require confirmation are not supported by SupaCloud Lite V1");
1528
1528
  }
1529
- const upgradingAnon = (user.is_anonymous ?? false) && !!body.email;
1530
- if (body.email) {
1531
- const email = body.email.toLowerCase().trim();
1532
- const clash = await this.db.query(`select id from auth.users where email = $1 and id <> $2`, [email, user.id]);
1533
- if (clash.rows.length > 0) {
1534
- return authError(422, "email_exists", "A user with this email address has already been registered");
1535
- }
1536
- params.push(email);
1537
- sets.push(`email = $${params.length}, email_confirmed_at = now()`);
1538
- }
1539
1529
  if (body.password) {
1540
1530
  if (body.password.length < this.settings.minPasswordLength) {
1541
1531
  return authError(422, "weak_password", `Password should be at least ${this.settings.minPasswordLength} characters.`);
@@ -1547,22 +1537,41 @@ class AuthHandler {
1547
1537
  params.push(JSON.stringify(body.data));
1548
1538
  sets.push(`raw_user_meta_data = coalesce(raw_user_meta_data, '{}'::jsonb) || $${params.length}::jsonb`);
1549
1539
  }
1550
- if (upgradingAnon) {
1551
- sets.push(`is_anonymous = false`);
1552
- sets.push(`raw_app_meta_data = coalesce(raw_app_meta_data, '{}'::jsonb) || '{"provider":"email","providers":["email"]}'::jsonb`);
1553
- }
1554
- if (sets.length === 0) {
1555
- return json(200, this.userJson(user, await this.getUserFactors(user.id), await this.getUserIdentities(user.id)));
1556
- }
1557
- params.push(user.id);
1558
- const payload = await this.db.transaction(async (query) => {
1559
- const res = await query(`update auth.users set ${sets.join(", ")}, updated_at = now() where id = $${params.length} returning *`, params);
1560
- const updated = res.rows[0];
1540
+ const response = await this.db.transaction(async (query) => {
1541
+ const currentResult = await query(`select * from auth.users where id = $1 and deleted_at is null
1542
+ and (banned_until is null or banned_until <= now()) for update`, [user.id]);
1543
+ const current = currentResult.rows[0];
1544
+ if (!current)
1545
+ return authError(401, "no_authorization", "Invalid or expired token");
1546
+ const transactionSets = [...sets];
1547
+ const transactionParams = [...params];
1548
+ const upgradingAnon = (current.is_anonymous ?? false) && !!body.email;
1549
+ if (body.email) {
1550
+ const email = body.email.toLowerCase().trim();
1551
+ const clash = await query(`select id from auth.users where email = $1 and id <> $2`, [email, current.id]);
1552
+ if (clash.rows.length > 0) {
1553
+ return authError(422, "email_exists", "A user with this email address has already been registered");
1554
+ }
1555
+ transactionParams.push(email);
1556
+ transactionSets.push(`email = $${transactionParams.length}, email_confirmed_at = now()`);
1557
+ }
1558
+ if (upgradingAnon) {
1559
+ transactionSets.push(`is_anonymous = false`);
1560
+ transactionSets.push(`raw_app_meta_data = coalesce(raw_app_meta_data, '{}'::jsonb) || '{"provider":"email","providers":["email"]}'::jsonb`);
1561
+ }
1562
+ if (transactionSets.length === 0) {
1563
+ return json(200, await this.userJsonWithRelations(current, query));
1564
+ }
1565
+ transactionParams.push(current.id);
1566
+ const updatedResult = await query(`update auth.users set ${transactionSets.join(", ")}, updated_at = now() where id = $${transactionParams.length} returning *`, transactionParams);
1567
+ const updated = updatedResult.rows[0];
1568
+ if (!updated)
1569
+ return authError(401, "no_authorization", "Invalid or expired token");
1561
1570
  if (body.email)
1562
1571
  await this.ensureEmailIdentity(updated, query);
1563
- return this.userJsonWithRelations(updated, query);
1572
+ return json(200, await this.userJsonWithRelations(updated, query));
1564
1573
  });
1565
- return json(200, payload);
1574
+ return response;
1566
1575
  }
1567
1576
  async logout(req, url) {
1568
1577
  const claims = await this.claimsFromBearer(req);
@@ -1816,8 +1825,8 @@ Or sign in with this link: ${link}`
1816
1825
  return claimedToken ? this.confirmEmailTokenUser(query, claimedToken) : null;
1817
1826
  }
1818
1827
  async lockAndDeleteEmailToken(query, candidate, redemption) {
1819
- const eligible = await query(`select id from auth.users where id = $1 and deleted_at is null
1820
- and (banned_until is null or banned_until <= now()) for update`, [candidate.user_id]);
1828
+ const eligible = await query(`select id from auth.users where id = $1 and lower(email) = lower($2)
1829
+ and deleted_at is null and (banned_until is null or banned_until <= now()) for update`, [candidate.user_id, candidate.email]);
1821
1830
  if (eligible.rows.length === 0)
1822
1831
  return null;
1823
1832
  const claimedTokens = await query(`delete from auth.one_time_tokens
@@ -1880,11 +1889,10 @@ Or sign in with this link: ${link}`
1880
1889
  async redeemPhoneOtp(phone, code) {
1881
1890
  const tokenDigest = `hmac-sha256:v1:${await keyedDigest(this.config.jwtSecret, "supacloud-lite:phone-otp:v1", `${phone}\x00${code}`)}`;
1882
1891
  return this.db.transaction(async (query) => {
1883
- const claimed = await query(`delete from auth.one_time_tokens
1892
+ const candidate = await query(`select user_id from auth.one_time_tokens
1884
1893
  where phone = $1 and token_type = 'sms' and token = $2
1885
- and expires_at > now() and attempts < $3
1886
- returning user_id`, [phone, tokenDigest, AuthHandler.MAX_OTP_ATTEMPTS]);
1887
- const userId = claimed.rows[0]?.user_id;
1894
+ and expires_at > now() and attempts < $3`, [phone, tokenDigest, AuthHandler.MAX_OTP_ATTEMPTS]);
1895
+ const userId = candidate.rows[0]?.user_id;
1888
1896
  if (!userId) {
1889
1897
  const attempt = await query(`update auth.one_time_tokens set attempts = attempts + 1
1890
1898
  where phone = $1 and token_type = 'sms' and expires_at > now()
@@ -1896,6 +1904,22 @@ Or sign in with this link: ${link}`
1896
1904
  await query(`delete from auth.one_time_tokens where phone = $1 and expires_at <= now()`, [phone]);
1897
1905
  return null;
1898
1906
  }
1907
+ const currentUser = await query(`select phone,
1908
+ deleted_at is null and (banned_until is null or banned_until <= now()) as auth_eligible
1909
+ from auth.users where id = $1 for update`, [userId]);
1910
+ const current = currentUser.rows[0];
1911
+ if (!current || current.phone !== phone)
1912
+ return null;
1913
+ if (!current.auth_eligible) {
1914
+ await query(`delete from auth.one_time_tokens where phone = $1`, [phone]);
1915
+ return null;
1916
+ }
1917
+ const claimed = await query(`delete from auth.one_time_tokens
1918
+ where phone = $1 and token_type = 'sms' and token = $2
1919
+ and expires_at > now() and attempts < $3 and user_id = $4
1920
+ returning user_id`, [phone, tokenDigest, AuthHandler.MAX_OTP_ATTEMPTS, userId]);
1921
+ if (claimed.rows.length === 0)
1922
+ return null;
1899
1923
  await query(`delete from auth.one_time_tokens where phone = $1`, [phone]);
1900
1924
  const users = await query(`update auth.users
1901
1925
  set phone_confirmed_at = coalesce(phone_confirmed_at, now()), last_sign_in_at = now(), updated_at = now()
@@ -2201,6 +2225,9 @@ Or sign in with this link: ${link}`
2201
2225
  const user = await this.userFromBearer(req);
2202
2226
  if (!user)
2203
2227
  return authError(401, "no_authorization", "This endpoint requires a Bearer token");
2228
+ if (!this.settings.totpVerifyEnabled) {
2229
+ return authError(422, "mfa_totp_verify_disabled", "TOTP verification is disabled");
2230
+ }
2204
2231
  const body = await req.json().catch(() => ({}));
2205
2232
  const fr = await this.db.query(`select id, secret, status from auth.mfa_factors where id = $1 and user_id = $2`, [factorId, user.id]);
2206
2233
  const factor = fr.rows[0];
@@ -9238,7 +9265,8 @@ function applyResize(image, metadata, options) {
9238
9265
  async function transformImage(source, options, knownSourceSize, configuredLimits = {}) {
9239
9266
  const limits = resolveImageTransformLimits(configuredLimits);
9240
9267
  const actualSourceSize = source instanceof Uint8Array ? source.byteLength : await Promise.resolve(source.size);
9241
- const sourceSize = Math.max(knownSourceSize ?? 0, actualSourceSize);
9268
+ const declaredSourceSize = typeof knownSourceSize === "number" && Number.isFinite(knownSourceSize) && knownSourceSize >= 0 ? knownSourceSize : 0;
9269
+ const sourceSize = Math.max(declaredSourceSize, actualSourceSize);
9242
9270
  if (sourceSize > limits.maxInputBytes) {
9243
9271
  return imageTransformInputTooLarge(limits.maxInputBytes);
9244
9272
  }
@@ -9464,7 +9492,7 @@ function isRenderableActiveType(contentType) {
9464
9492
  return t === "text/html" || t === "application/xhtml+xml" || t === "image/svg+xml" || t === "application/xml" || t === "text/xml";
9465
9493
  }
9466
9494
  var TUS_VERSION = "1.0.0";
9467
- var DEFAULT_FILE_SIZE_LIMIT = 50 * 1024 * 1024;
9495
+ var DEFAULT_FILE_SIZE_LIMIT = 500 * 1024 * 1024;
9468
9496
  var MULTIPART_OVERHEAD_LIMIT = 1024 * 1024;
9469
9497
  var MAX_CONCURRENT_TUS_UPLOADS = 4;
9470
9498
  var MAX_COMPLETED_TUS_UPLOADS = 64;
package/dist/index.js CHANGED
@@ -88,7 +88,7 @@ function randomToken(bytes = 32) {
88
88
  // package.json
89
89
  var package_default = {
90
90
  name: "@supacloud/lite",
91
- version: "0.31.2",
91
+ version: "0.31.3",
92
92
  description: "Bun-native, single-project Supabase-compatible backend powered by PGlite or native PostgreSQL",
93
93
  type: "module",
94
94
  license: "Apache-2.0",
@@ -147,16 +147,16 @@ var package_default = {
147
147
  "@electric-sql/pglite-pgmq": "0.0.8",
148
148
  "@electric-sql/pglite-pgvector": "0.0.11",
149
149
  "@electric-sql/pglite-postgis": "0.2.10",
150
- "@supacloud/db": "0.18.3",
150
+ "@supacloud/db": "0.18.4",
151
151
  "exact-mirror": "1.2.6",
152
152
  tar: "^7.5.22",
153
153
  typebox: "1.3.37"
154
154
  },
155
155
  devDependencies: {
156
- "@supacloud/app": "0.28.2",
157
- "@supacloud/contracts": "0.11.4",
158
- "@supacloud/compiler": "0.47.2",
159
- "@supacloud/elysia": "0.33.4",
156
+ "@supacloud/app": "0.28.3",
157
+ "@supacloud/contracts": "0.11.5",
158
+ "@supacloud/compiler": "0.47.3",
159
+ "@supacloud/elysia": "0.33.5",
160
160
  "@supabase/supabase-js": "^2.117.3",
161
161
  "@types/bun": "^1.4.3",
162
162
  effect: "4.0.5",
@@ -165,13 +165,13 @@ var package_default = {
165
165
  typescript: "^7.0.2"
166
166
  },
167
167
  overrides: {
168
- "@supacloud/db": "0.18.3",
169
- "@supacloud/app": "0.28.2",
170
- "@supacloud/compiler": "0.47.2",
171
- "@supacloud/elysia": "0.33.4",
172
- "@supacloud/contracts": "0.11.4",
173
- "@supacloud/commands": "0.9.6",
174
- "@supacloud/delivery": "0.19.3",
168
+ "@supacloud/db": "0.18.4",
169
+ "@supacloud/app": "0.28.3",
170
+ "@supacloud/compiler": "0.47.3",
171
+ "@supacloud/elysia": "0.33.5",
172
+ "@supacloud/contracts": "0.11.5",
173
+ "@supacloud/commands": "0.9.7",
174
+ "@supacloud/delivery": "0.19.4",
175
175
  "@graphql-tools/utils": "^12.0.4"
176
176
  },
177
177
  engines: {
@@ -1532,16 +1532,6 @@ class AuthHandler {
1532
1532
  if (body.email && !this.settings.autoconfirm) {
1533
1533
  return authError(501, "email_change_confirmation_not_supported", "Email changes that require confirmation are not supported by SupaCloud Lite V1");
1534
1534
  }
1535
- const upgradingAnon = (user.is_anonymous ?? false) && !!body.email;
1536
- if (body.email) {
1537
- const email = body.email.toLowerCase().trim();
1538
- const clash = await this.db.query(`select id from auth.users where email = $1 and id <> $2`, [email, user.id]);
1539
- if (clash.rows.length > 0) {
1540
- return authError(422, "email_exists", "A user with this email address has already been registered");
1541
- }
1542
- params.push(email);
1543
- sets.push(`email = $${params.length}, email_confirmed_at = now()`);
1544
- }
1545
1535
  if (body.password) {
1546
1536
  if (body.password.length < this.settings.minPasswordLength) {
1547
1537
  return authError(422, "weak_password", `Password should be at least ${this.settings.minPasswordLength} characters.`);
@@ -1553,22 +1543,41 @@ class AuthHandler {
1553
1543
  params.push(JSON.stringify(body.data));
1554
1544
  sets.push(`raw_user_meta_data = coalesce(raw_user_meta_data, '{}'::jsonb) || $${params.length}::jsonb`);
1555
1545
  }
1556
- if (upgradingAnon) {
1557
- sets.push(`is_anonymous = false`);
1558
- sets.push(`raw_app_meta_data = coalesce(raw_app_meta_data, '{}'::jsonb) || '{"provider":"email","providers":["email"]}'::jsonb`);
1559
- }
1560
- if (sets.length === 0) {
1561
- return json(200, this.userJson(user, await this.getUserFactors(user.id), await this.getUserIdentities(user.id)));
1562
- }
1563
- params.push(user.id);
1564
- const payload = await this.db.transaction(async (query) => {
1565
- const res = await query(`update auth.users set ${sets.join(", ")}, updated_at = now() where id = $${params.length} returning *`, params);
1566
- const updated = res.rows[0];
1546
+ const response = await this.db.transaction(async (query) => {
1547
+ const currentResult = await query(`select * from auth.users where id = $1 and deleted_at is null
1548
+ and (banned_until is null or banned_until <= now()) for update`, [user.id]);
1549
+ const current = currentResult.rows[0];
1550
+ if (!current)
1551
+ return authError(401, "no_authorization", "Invalid or expired token");
1552
+ const transactionSets = [...sets];
1553
+ const transactionParams = [...params];
1554
+ const upgradingAnon = (current.is_anonymous ?? false) && !!body.email;
1555
+ if (body.email) {
1556
+ const email = body.email.toLowerCase().trim();
1557
+ const clash = await query(`select id from auth.users where email = $1 and id <> $2`, [email, current.id]);
1558
+ if (clash.rows.length > 0) {
1559
+ return authError(422, "email_exists", "A user with this email address has already been registered");
1560
+ }
1561
+ transactionParams.push(email);
1562
+ transactionSets.push(`email = $${transactionParams.length}, email_confirmed_at = now()`);
1563
+ }
1564
+ if (upgradingAnon) {
1565
+ transactionSets.push(`is_anonymous = false`);
1566
+ transactionSets.push(`raw_app_meta_data = coalesce(raw_app_meta_data, '{}'::jsonb) || '{"provider":"email","providers":["email"]}'::jsonb`);
1567
+ }
1568
+ if (transactionSets.length === 0) {
1569
+ return json(200, await this.userJsonWithRelations(current, query));
1570
+ }
1571
+ transactionParams.push(current.id);
1572
+ const updatedResult = await query(`update auth.users set ${transactionSets.join(", ")}, updated_at = now() where id = $${transactionParams.length} returning *`, transactionParams);
1573
+ const updated = updatedResult.rows[0];
1574
+ if (!updated)
1575
+ return authError(401, "no_authorization", "Invalid or expired token");
1567
1576
  if (body.email)
1568
1577
  await this.ensureEmailIdentity(updated, query);
1569
- return this.userJsonWithRelations(updated, query);
1578
+ return json(200, await this.userJsonWithRelations(updated, query));
1570
1579
  });
1571
- return json(200, payload);
1580
+ return response;
1572
1581
  }
1573
1582
  async logout(req, url) {
1574
1583
  const claims = await this.claimsFromBearer(req);
@@ -1822,8 +1831,8 @@ Or sign in with this link: ${link}`
1822
1831
  return claimedToken ? this.confirmEmailTokenUser(query, claimedToken) : null;
1823
1832
  }
1824
1833
  async lockAndDeleteEmailToken(query, candidate, redemption) {
1825
- const eligible = await query(`select id from auth.users where id = $1 and deleted_at is null
1826
- and (banned_until is null or banned_until <= now()) for update`, [candidate.user_id]);
1834
+ const eligible = await query(`select id from auth.users where id = $1 and lower(email) = lower($2)
1835
+ and deleted_at is null and (banned_until is null or banned_until <= now()) for update`, [candidate.user_id, candidate.email]);
1827
1836
  if (eligible.rows.length === 0)
1828
1837
  return null;
1829
1838
  const claimedTokens = await query(`delete from auth.one_time_tokens
@@ -1886,11 +1895,10 @@ Or sign in with this link: ${link}`
1886
1895
  async redeemPhoneOtp(phone, code) {
1887
1896
  const tokenDigest = `hmac-sha256:v1:${await keyedDigest(this.config.jwtSecret, "supacloud-lite:phone-otp:v1", `${phone}\x00${code}`)}`;
1888
1897
  return this.db.transaction(async (query) => {
1889
- const claimed = await query(`delete from auth.one_time_tokens
1898
+ const candidate = await query(`select user_id from auth.one_time_tokens
1890
1899
  where phone = $1 and token_type = 'sms' and token = $2
1891
- and expires_at > now() and attempts < $3
1892
- returning user_id`, [phone, tokenDigest, AuthHandler.MAX_OTP_ATTEMPTS]);
1893
- const userId = claimed.rows[0]?.user_id;
1900
+ and expires_at > now() and attempts < $3`, [phone, tokenDigest, AuthHandler.MAX_OTP_ATTEMPTS]);
1901
+ const userId = candidate.rows[0]?.user_id;
1894
1902
  if (!userId) {
1895
1903
  const attempt = await query(`update auth.one_time_tokens set attempts = attempts + 1
1896
1904
  where phone = $1 and token_type = 'sms' and expires_at > now()
@@ -1902,6 +1910,22 @@ Or sign in with this link: ${link}`
1902
1910
  await query(`delete from auth.one_time_tokens where phone = $1 and expires_at <= now()`, [phone]);
1903
1911
  return null;
1904
1912
  }
1913
+ const currentUser = await query(`select phone,
1914
+ deleted_at is null and (banned_until is null or banned_until <= now()) as auth_eligible
1915
+ from auth.users where id = $1 for update`, [userId]);
1916
+ const current = currentUser.rows[0];
1917
+ if (!current || current.phone !== phone)
1918
+ return null;
1919
+ if (!current.auth_eligible) {
1920
+ await query(`delete from auth.one_time_tokens where phone = $1`, [phone]);
1921
+ return null;
1922
+ }
1923
+ const claimed = await query(`delete from auth.one_time_tokens
1924
+ where phone = $1 and token_type = 'sms' and token = $2
1925
+ and expires_at > now() and attempts < $3 and user_id = $4
1926
+ returning user_id`, [phone, tokenDigest, AuthHandler.MAX_OTP_ATTEMPTS, userId]);
1927
+ if (claimed.rows.length === 0)
1928
+ return null;
1905
1929
  await query(`delete from auth.one_time_tokens where phone = $1`, [phone]);
1906
1930
  const users = await query(`update auth.users
1907
1931
  set phone_confirmed_at = coalesce(phone_confirmed_at, now()), last_sign_in_at = now(), updated_at = now()
@@ -2207,6 +2231,9 @@ Or sign in with this link: ${link}`
2207
2231
  const user = await this.userFromBearer(req);
2208
2232
  if (!user)
2209
2233
  return authError(401, "no_authorization", "This endpoint requires a Bearer token");
2234
+ if (!this.settings.totpVerifyEnabled) {
2235
+ return authError(422, "mfa_totp_verify_disabled", "TOTP verification is disabled");
2236
+ }
2210
2237
  const body = await req.json().catch(() => ({}));
2211
2238
  const fr = await this.db.query(`select id, secret, status from auth.mfa_factors where id = $1 and user_id = $2`, [factorId, user.id]);
2212
2239
  const factor = fr.rows[0];
@@ -9232,7 +9259,8 @@ function applyResize(image, metadata, options) {
9232
9259
  async function transformImage(source, options, knownSourceSize, configuredLimits = {}) {
9233
9260
  const limits = resolveImageTransformLimits(configuredLimits);
9234
9261
  const actualSourceSize = source instanceof Uint8Array ? source.byteLength : await Promise.resolve(source.size);
9235
- const sourceSize = Math.max(knownSourceSize ?? 0, actualSourceSize);
9262
+ const declaredSourceSize = typeof knownSourceSize === "number" && Number.isFinite(knownSourceSize) && knownSourceSize >= 0 ? knownSourceSize : 0;
9263
+ const sourceSize = Math.max(declaredSourceSize, actualSourceSize);
9236
9264
  if (sourceSize > limits.maxInputBytes) {
9237
9265
  return imageTransformInputTooLarge(limits.maxInputBytes);
9238
9266
  }
@@ -9458,7 +9486,7 @@ function isRenderableActiveType(contentType) {
9458
9486
  return t === "text/html" || t === "application/xhtml+xml" || t === "image/svg+xml" || t === "application/xml" || t === "text/xml";
9459
9487
  }
9460
9488
  var TUS_VERSION = "1.0.0";
9461
- var DEFAULT_FILE_SIZE_LIMIT = 50 * 1024 * 1024;
9489
+ var DEFAULT_FILE_SIZE_LIMIT = 500 * 1024 * 1024;
9462
9490
  var MULTIPART_OVERHEAD_LIMIT = 1024 * 1024;
9463
9491
  var MAX_CONCURRENT_TUS_UPLOADS = 4;
9464
9492
  var MAX_COMPLETED_TUS_UPLOADS = 64;
@@ -1 +1 @@
1
- {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../src/runtime/auth/handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../src/runtime/auth/handler.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"image-transform.d.ts","sourceRoot":"","sources":["../../../src/runtime/storage/image-transform.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,MAAM,CAAA;AACrD,MAAM,MAAM,oBAAoB,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAA;AAErE,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,oBAAoB,CAAA;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,oBAAoB,CAAA;CAC7B;AAED,MAAM,WAAW,4BAA4B;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAA;IACvC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,oBAAoB,CAAA;CAC9B;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,KAAK,CAAA;IACT,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAA;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,MAAM,yBAAyB,GACjC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,qBAAqB,CAAA;CAAE,GAC1C,mBAAmB,CAAA;AAEvB,MAAM,MAAM,oBAAoB,GAC5B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,UAAU,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GACpD,mBAAmB,CAAA;AAgBvB,MAAM,WAAW,oBAAoB;IACnC,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,oEAAoE;AACpE,wBAAgB,2BAA2B,CAAC,OAAO,GAAE,oBAAyB,GAAG,QAAQ,CAAC,oBAAoB,CAAC,CAS9G;AAED,wBAAgB,2BAA2B,CAAC,aAAa,EAAE,MAAM,GAAG,mBAAmB,CAOtF;AA6BD,iFAAiF;AACjF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,eAAe,GAAG,yBAAyB,CAsCrF;AAED,gFAAgF;AAChF,wBAAgB,4BAA4B,CAAC,OAAO,CAAC,EAAE,4BAA4B,GAAG,eAAe,CASpG;AA0DD,iFAAiF;AACjF,wBAAsB,cAAc,CAClC,MAAM,EAAE,UAAU,GAAG,IAAI,EACzB,OAAO,EAAE,qBAAqB,EAC9B,eAAe,CAAC,EAAE,MAAM,EACxB,gBAAgB,GAAE,oBAAyB,GAC1C,OAAO,CAAC,oBAAoB,CAAC,CAsD/B"}
1
+ {"version":3,"file":"image-transform.d.ts","sourceRoot":"","sources":["../../../src/runtime/storage/image-transform.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,MAAM,CAAA;AACrD,MAAM,MAAM,oBAAoB,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAA;AAErE,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,oBAAoB,CAAA;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,oBAAoB,CAAA;CAC7B;AAED,MAAM,WAAW,4BAA4B;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAA;IACvC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,oBAAoB,CAAA;CAC9B;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,KAAK,CAAA;IACT,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAA;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,MAAM,yBAAyB,GACjC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,qBAAqB,CAAA;CAAE,GAC1C,mBAAmB,CAAA;AAEvB,MAAM,MAAM,oBAAoB,GAC5B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,UAAU,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GACpD,mBAAmB,CAAA;AAgBvB,MAAM,WAAW,oBAAoB;IACnC,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,oEAAoE;AACpE,wBAAgB,2BAA2B,CAAC,OAAO,GAAE,oBAAyB,GAAG,QAAQ,CAAC,oBAAoB,CAAC,CAS9G;AAED,wBAAgB,2BAA2B,CAAC,aAAa,EAAE,MAAM,GAAG,mBAAmB,CAOtF;AA6BD,iFAAiF;AACjF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,eAAe,GAAG,yBAAyB,CAsCrF;AAED,gFAAgF;AAChF,wBAAgB,4BAA4B,CAAC,OAAO,CAAC,EAAE,4BAA4B,GAAG,eAAe,CASpG;AA0DD,iFAAiF;AACjF,wBAAsB,cAAc,CAClC,MAAM,EAAE,UAAU,GAAG,IAAI,EACzB,OAAO,EAAE,qBAAqB,EAC9B,eAAe,CAAC,EAAE,MAAM,EACxB,gBAAgB,GAAE,oBAAyB,GAC1C,OAAO,CAAC,oBAAoB,CAAC,CAyD/B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@supacloud/lite",
3
- "version": "0.31.2",
3
+ "version": "0.31.3",
4
4
  "description": "Bun-native, single-project Supabase-compatible backend powered by PGlite or native PostgreSQL",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
@@ -59,16 +59,16 @@
59
59
  "@electric-sql/pglite-pgmq": "0.0.8",
60
60
  "@electric-sql/pglite-pgvector": "0.0.11",
61
61
  "@electric-sql/pglite-postgis": "0.2.10",
62
- "@supacloud/db": "0.18.3",
62
+ "@supacloud/db": "0.18.4",
63
63
  "exact-mirror": "1.2.6",
64
64
  "tar": "^7.5.22",
65
65
  "typebox": "1.3.37"
66
66
  },
67
67
  "devDependencies": {
68
- "@supacloud/app": "0.28.2",
69
- "@supacloud/contracts": "0.11.4",
70
- "@supacloud/compiler": "0.47.2",
71
- "@supacloud/elysia": "0.33.4",
68
+ "@supacloud/app": "0.28.3",
69
+ "@supacloud/contracts": "0.11.5",
70
+ "@supacloud/compiler": "0.47.3",
71
+ "@supacloud/elysia": "0.33.5",
72
72
  "@supabase/supabase-js": "^2.117.3",
73
73
  "@types/bun": "^1.4.3",
74
74
  "effect": "4.0.5",
@@ -77,13 +77,13 @@
77
77
  "typescript": "^7.0.2"
78
78
  },
79
79
  "overrides": {
80
- "@supacloud/db": "0.18.3",
81
- "@supacloud/app": "0.28.2",
82
- "@supacloud/compiler": "0.47.2",
83
- "@supacloud/elysia": "0.33.4",
84
- "@supacloud/contracts": "0.11.4",
85
- "@supacloud/commands": "0.9.6",
86
- "@supacloud/delivery": "0.19.3",
80
+ "@supacloud/db": "0.18.4",
81
+ "@supacloud/app": "0.28.3",
82
+ "@supacloud/compiler": "0.47.3",
83
+ "@supacloud/elysia": "0.33.5",
84
+ "@supacloud/contracts": "0.11.5",
85
+ "@supacloud/commands": "0.9.7",
86
+ "@supacloud/delivery": "0.19.4",
87
87
  "@graphql-tools/utils": "^12.0.4"
88
88
  },
89
89
  "engines": {