@dubsdotapp/expo 0.2.74 → 0.2.76

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/index.mjs CHANGED
@@ -2128,6 +2128,12 @@ async function getDeviceInfo() {
2128
2128
  }
2129
2129
  }
2130
2130
 
2131
+ // src/utils/avatarUrl.ts
2132
+ function ensurePngAvatar(url) {
2133
+ if (!url) return void 0;
2134
+ return url.replace("/svg?", "/png?");
2135
+ }
2136
+
2131
2137
  // src/hooks/useAuth.ts
2132
2138
  function useAuth() {
2133
2139
  const sharedAuth = useContext3(AuthContext);
@@ -2138,6 +2144,10 @@ function useAuth() {
2138
2144
  const [token, setToken] = useState11(null);
2139
2145
  const [error, setError] = useState11(null);
2140
2146
  const pendingAuth = useRef2(null);
2147
+ const normalizeUser = (u) => ({
2148
+ ...u,
2149
+ avatar: ensurePngAvatar(u.avatar) ?? u.avatar
2150
+ });
2141
2151
  const reset = useCallback10(() => {
2142
2152
  setStatus("idle");
2143
2153
  setUser(null);
@@ -2171,7 +2181,7 @@ function useAuth() {
2171
2181
  setStatus("needsRegistration");
2172
2182
  return;
2173
2183
  }
2174
- setUser(result.user);
2184
+ setUser(normalizeUser(result.user));
2175
2185
  setToken(result.token);
2176
2186
  setStatus("authenticated");
2177
2187
  } catch (err) {
@@ -2206,7 +2216,7 @@ function useAuth() {
2206
2216
  });
2207
2217
  pendingAuth.current = null;
2208
2218
  const user2 = avatarUrl && !result.user.avatar ? { ...result.user, avatar: avatarUrl } : result.user;
2209
- setUser(user2);
2219
+ setUser(normalizeUser(user2));
2210
2220
  setToken(result.token);
2211
2221
  setStatus("authenticated");
2212
2222
  } catch (err) {
@@ -2229,7 +2239,7 @@ function useAuth() {
2229
2239
  try {
2230
2240
  client.setToken(savedToken);
2231
2241
  const me = await client.getMe();
2232
- setUser(me);
2242
+ setUser(normalizeUser(me));
2233
2243
  setToken(savedToken);
2234
2244
  setStatus("authenticated");
2235
2245
  return true;
@@ -2244,7 +2254,7 @@ function useAuth() {
2244
2254
  const refreshUser = useCallback10(async () => {
2245
2255
  try {
2246
2256
  const me = await client.getMe();
2247
- setUser(me);
2257
+ setUser(normalizeUser(me));
2248
2258
  } catch {
2249
2259
  }
2250
2260
  }, [client]);
@@ -3300,7 +3310,7 @@ function UserProfileCard({
3300
3310
  }) {
3301
3311
  const t = useDubsTheme();
3302
3312
  const imageUri = useMemo3(
3303
- () => avatarUrl || `https://api.dicebear.com/9.x/avataaars/png?seed=${walletAddress}&size=128`,
3313
+ () => ensurePngAvatar(avatarUrl) || `https://api.dicebear.com/9.x/avataaars/png?seed=${walletAddress}&size=128`,
3304
3314
  [avatarUrl, walletAddress]
3305
3315
  );
3306
3316
  return /* @__PURE__ */ jsxs3(View3, { style: [styles2.card, { backgroundColor: t.surface, borderColor: t.border }], children: [
@@ -3532,7 +3542,7 @@ function getAvatarUrl2(style, seed, size = 256) {
3532
3542
  function parseAvatarUrl(url) {
3533
3543
  if (!url) return { style: "adventurer", seed: generateSeed2() };
3534
3544
  try {
3535
- const match = url.match(/\/9\.x\/([^/]+)\/png\?seed=([^&]+)/);
3545
+ const match = url.match(/\/\d+\.x\/([^/]+)\/(?:png|svg)\?seed=([^&]+)/);
3536
3546
  if (match) return { style: match[1], seed: match[2] };
3537
3547
  } catch {
3538
3548
  }
@@ -3812,7 +3822,8 @@ var styles4 = StyleSheet5.create({
3812
3822
  },
3813
3823
  avatar: {
3814
3824
  width: "100%",
3815
- height: "100%"
3825
+ height: "100%",
3826
+ backgroundColor: "#1a1a2e"
3816
3827
  },
3817
3828
  avatarLoading: {
3818
3829
  ...StyleSheet5.absoluteFillObject,
@@ -3863,7 +3874,8 @@ var styles4 = StyleSheet5.create({
3863
3874
  },
3864
3875
  styleTileImage: {
3865
3876
  width: "100%",
3866
- height: "100%"
3877
+ height: "100%",
3878
+ backgroundColor: "#1a1a2e"
3867
3879
  },
3868
3880
  // Error
3869
3881
  errorBox: {
@@ -4318,7 +4330,7 @@ function BettorRow({
4318
4330
  const showAvatar = bettor.avatar && !imgFailed;
4319
4331
  return /* @__PURE__ */ jsxs9(View9, { style: [styles8.row, !isFirst && { borderTopColor: t.border, borderTopWidth: 1 }], children: [
4320
4332
  /* @__PURE__ */ jsx11(View9, { style: [styles8.dot, { backgroundColor: dotColor }] }),
4321
- showAvatar ? /* @__PURE__ */ jsx11(Img, { source: { uri: bettor.avatar }, style: styles8.avatar, resizeMode: "cover", onError: () => setImgFailed(true) }) : /* @__PURE__ */ jsx11(View9, { style: [styles8.avatar, styles8.avatarPlaceholder] }),
4333
+ showAvatar ? /* @__PURE__ */ jsx11(Img, { source: { uri: ensurePngAvatar(bettor.avatar) }, style: styles8.avatar, resizeMode: "cover", onError: () => setImgFailed(true) }) : /* @__PURE__ */ jsx11(View9, { style: [styles8.avatar, styles8.avatarPlaceholder] }),
4322
4334
  /* @__PURE__ */ jsx11(View9, { style: styles8.nameCol, children: /* @__PURE__ */ jsx11(Text9, { style: [styles8.username, { color: t.text }], numberOfLines: 1, children: bettor.username || truncateWallet(bettor.wallet, truncateChars) }) }),
4323
4335
  /* @__PURE__ */ jsxs9(Text9, { style: [styles8.amount, { color: t.textSecondary }], children: [
4324
4336
  bettor.amount,
@@ -5611,6 +5623,7 @@ export {
5611
5623
  UserProfileCard,
5612
5624
  UserProfileSheet,
5613
5625
  createSecureStoreStorage,
5626
+ ensurePngAvatar,
5614
5627
  getDeviceInfo,
5615
5628
  isSolanaSeeker,
5616
5629
  mergeTheme,