@erikey/react 0.1.7 → 0.2.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.
- package/dist/index.d.mts +2518 -54
- package/dist/index.d.ts +2518 -54
- package/dist/index.js +163 -335
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +161 -334
- package/dist/index.mjs.map +1 -1
- package/dist/ui/index.js +208 -38
- package/dist/ui/index.js.map +1 -1
- package/dist/ui/index.mjs +208 -38
- package/dist/ui/index.mjs.map +1 -1
- package/package.json +1 -3
package/dist/index.js
CHANGED
|
@@ -20,8 +20,9 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
20
20
|
// src/index.ts
|
|
21
21
|
var index_exports = {};
|
|
22
22
|
__export(index_exports, {
|
|
23
|
-
createAuthClient: () =>
|
|
24
|
-
createDashboardClient: () => createDashboardClient
|
|
23
|
+
createAuthClient: () => createAuthClient2,
|
|
24
|
+
createDashboardClient: () => createDashboardClient,
|
|
25
|
+
createKvClient: () => createKvClient
|
|
25
26
|
});
|
|
26
27
|
module.exports = __toCommonJS(index_exports);
|
|
27
28
|
|
|
@@ -1638,284 +1639,151 @@ function createDashboardClient(config) {
|
|
|
1638
1639
|
});
|
|
1639
1640
|
}
|
|
1640
1641
|
|
|
1641
|
-
//
|
|
1642
|
-
|
|
1642
|
+
// src/lib/cross-origin-auth.ts
|
|
1643
|
+
function shouldUseBearerAuth(authApiUrl) {
|
|
1644
|
+
if (typeof window === "undefined") {
|
|
1645
|
+
return false;
|
|
1646
|
+
}
|
|
1647
|
+
try {
|
|
1648
|
+
const currentOrigin = window.location.origin;
|
|
1649
|
+
const authOrigin = new URL(authApiUrl).origin;
|
|
1650
|
+
return currentOrigin !== authOrigin;
|
|
1651
|
+
} catch {
|
|
1652
|
+
return false;
|
|
1653
|
+
}
|
|
1654
|
+
}
|
|
1655
|
+
function getStorageKey(projectId) {
|
|
1656
|
+
return `erikey.session.${projectId}`;
|
|
1657
|
+
}
|
|
1658
|
+
function storeToken(projectId, session) {
|
|
1659
|
+
if (typeof window === "undefined") return;
|
|
1660
|
+
const key = getStorageKey(projectId);
|
|
1661
|
+
localStorage.setItem(key, JSON.stringify(session));
|
|
1662
|
+
}
|
|
1663
|
+
function getStoredToken(projectId) {
|
|
1664
|
+
if (typeof window === "undefined") return null;
|
|
1665
|
+
const key = getStorageKey(projectId);
|
|
1666
|
+
const stored = localStorage.getItem(key);
|
|
1667
|
+
if (!stored) return null;
|
|
1668
|
+
try {
|
|
1669
|
+
const session = JSON.parse(stored);
|
|
1670
|
+
if (new Date(session.expiresAt) < /* @__PURE__ */ new Date()) {
|
|
1671
|
+
localStorage.removeItem(key);
|
|
1672
|
+
return null;
|
|
1673
|
+
}
|
|
1674
|
+
return session.token;
|
|
1675
|
+
} catch {
|
|
1676
|
+
localStorage.removeItem(key);
|
|
1677
|
+
return null;
|
|
1678
|
+
}
|
|
1679
|
+
}
|
|
1680
|
+
function clearToken(projectId) {
|
|
1681
|
+
if (typeof window === "undefined") return;
|
|
1682
|
+
const key = getStorageKey(projectId);
|
|
1683
|
+
localStorage.removeItem(key);
|
|
1684
|
+
}
|
|
1685
|
+
|
|
1686
|
+
// src/auth-client.ts
|
|
1643
1687
|
function createAuthClient2(config) {
|
|
1644
|
-
const { projectId, baseUrl =
|
|
1645
|
-
const
|
|
1646
|
-
|
|
1647
|
-
|
|
1648
|
-
|
|
1649
|
-
|
|
1650
|
-
}
|
|
1651
|
-
|
|
1652
|
-
|
|
1653
|
-
|
|
1654
|
-
|
|
1655
|
-
|
|
1656
|
-
|
|
1657
|
-
const data = await response.json();
|
|
1658
|
-
if (!response.ok) {
|
|
1659
|
-
return {
|
|
1660
|
-
success: false,
|
|
1661
|
-
error: data?.error?.message || data?.message || "Request failed"
|
|
1662
|
-
};
|
|
1688
|
+
const { projectId, baseUrl = "https://auth.erikey.com" } = config;
|
|
1689
|
+
const useBearerAuth = shouldUseBearerAuth(baseUrl);
|
|
1690
|
+
const fetchOptions = {
|
|
1691
|
+
// Always send project ID header for multi-tenant routing
|
|
1692
|
+
headers: {
|
|
1693
|
+
"X-Project-Id": projectId
|
|
1694
|
+
},
|
|
1695
|
+
// For cross-origin contexts, use Bearer token auth
|
|
1696
|
+
...useBearerAuth && {
|
|
1697
|
+
auth: {
|
|
1698
|
+
type: "Bearer",
|
|
1699
|
+
token: () => getStoredToken(projectId) || ""
|
|
1700
|
+
}
|
|
1663
1701
|
}
|
|
1664
|
-
return {
|
|
1665
|
-
success: true,
|
|
1666
|
-
data
|
|
1667
|
-
};
|
|
1668
1702
|
};
|
|
1703
|
+
const client = createAuthClient({
|
|
1704
|
+
baseURL: baseUrl,
|
|
1705
|
+
fetchOptions,
|
|
1706
|
+
// For same-origin, include cookies
|
|
1707
|
+
...!useBearerAuth && { credentials: "include" }
|
|
1708
|
+
});
|
|
1709
|
+
if (!useBearerAuth) {
|
|
1710
|
+
return client;
|
|
1711
|
+
}
|
|
1669
1712
|
return {
|
|
1670
|
-
|
|
1671
|
-
|
|
1672
|
-
|
|
1673
|
-
|
|
1674
|
-
|
|
1675
|
-
|
|
1676
|
-
|
|
1677
|
-
|
|
1678
|
-
|
|
1679
|
-
|
|
1680
|
-
|
|
1681
|
-
|
|
1682
|
-
|
|
1683
|
-
|
|
1684
|
-
method: "POST",
|
|
1685
|
-
body: JSON.stringify(data)
|
|
1686
|
-
});
|
|
1687
|
-
},
|
|
1688
|
-
/**
|
|
1689
|
-
* Sign out the current user
|
|
1690
|
-
*/
|
|
1691
|
-
signOut: async () => {
|
|
1692
|
-
return fetchWithAuth("/sign-out", {
|
|
1693
|
-
method: "POST"
|
|
1694
|
-
});
|
|
1695
|
-
},
|
|
1696
|
-
/**
|
|
1697
|
-
* Get the current authenticated user
|
|
1698
|
-
*/
|
|
1699
|
-
getUser: async () => {
|
|
1700
|
-
return fetchWithAuth("/get-session", {
|
|
1701
|
-
method: "GET"
|
|
1702
|
-
});
|
|
1703
|
-
},
|
|
1704
|
-
/**
|
|
1705
|
-
* Request a password reset email
|
|
1706
|
-
*/
|
|
1707
|
-
forgotPassword: async (email) => {
|
|
1708
|
-
const result = await fetchWithAuth("/forget-password", {
|
|
1709
|
-
method: "POST",
|
|
1710
|
-
body: JSON.stringify({ email })
|
|
1711
|
-
});
|
|
1712
|
-
if (!result.success) {
|
|
1713
|
-
return { success: false, message: result.error || "Failed to request password reset" };
|
|
1714
|
-
}
|
|
1715
|
-
return {
|
|
1716
|
-
success: true,
|
|
1717
|
-
message: result.data?.message || "Password reset email sent"
|
|
1718
|
-
};
|
|
1719
|
-
},
|
|
1720
|
-
/**
|
|
1721
|
-
* Reset password with a token from the reset email
|
|
1722
|
-
*/
|
|
1723
|
-
resetPassword: async (token, newPassword) => {
|
|
1724
|
-
const result = await fetchWithAuth("/reset-password", {
|
|
1725
|
-
method: "POST",
|
|
1726
|
-
body: JSON.stringify({ token, newPassword })
|
|
1727
|
-
});
|
|
1728
|
-
if (!result.success) {
|
|
1729
|
-
return { success: false, message: result.error || "Failed to reset password" };
|
|
1730
|
-
}
|
|
1731
|
-
return {
|
|
1732
|
-
success: true,
|
|
1733
|
-
message: result.data?.message || "Password reset successful"
|
|
1734
|
-
};
|
|
1735
|
-
},
|
|
1736
|
-
/**
|
|
1737
|
-
* Set a single key-value pair
|
|
1738
|
-
*/
|
|
1739
|
-
setValue: async (key, value) => {
|
|
1740
|
-
return fetchWithAuth(`/key-value/${encodeURIComponent(key)}`, {
|
|
1741
|
-
method: "PUT",
|
|
1742
|
-
body: JSON.stringify({ value })
|
|
1743
|
-
});
|
|
1744
|
-
},
|
|
1745
|
-
/**
|
|
1746
|
-
* Get a single key-value pair
|
|
1747
|
-
*/
|
|
1748
|
-
getValue: async (key) => {
|
|
1749
|
-
const result = await fetchWithAuth(
|
|
1750
|
-
`/key-value/${encodeURIComponent(key)}`,
|
|
1751
|
-
{ method: "GET" }
|
|
1752
|
-
);
|
|
1753
|
-
if (!result.success) {
|
|
1754
|
-
return { success: false, error: result.error };
|
|
1755
|
-
}
|
|
1756
|
-
return {
|
|
1757
|
-
success: true,
|
|
1758
|
-
data: {
|
|
1759
|
-
key: result.data.key,
|
|
1760
|
-
value: result.data.value,
|
|
1761
|
-
createdAt: result.data.createdAt,
|
|
1762
|
-
updatedAt: result.data.updatedAt
|
|
1713
|
+
...client,
|
|
1714
|
+
signIn: {
|
|
1715
|
+
...client.signIn,
|
|
1716
|
+
email: async (...args) => {
|
|
1717
|
+
const result = await client.signIn.email(...args);
|
|
1718
|
+
const token = result.data?.token;
|
|
1719
|
+
const sessionId = result.data?.session?.id || "session";
|
|
1720
|
+
if (token) {
|
|
1721
|
+
const session = {
|
|
1722
|
+
id: sessionId,
|
|
1723
|
+
token,
|
|
1724
|
+
expiresAt: new Date(Date.now() + 7 * 24 * 60 * 60 * 1e3).toISOString()
|
|
1725
|
+
};
|
|
1726
|
+
storeToken(projectId, session);
|
|
1763
1727
|
}
|
|
1764
|
-
|
|
1728
|
+
return result;
|
|
1729
|
+
},
|
|
1730
|
+
// Social OAuth works as-is (redirect-based, no token in response)
|
|
1731
|
+
social: client.signIn.social
|
|
1765
1732
|
},
|
|
1766
|
-
|
|
1767
|
-
|
|
1768
|
-
|
|
1769
|
-
|
|
1770
|
-
|
|
1771
|
-
"
|
|
1772
|
-
|
|
1773
|
-
|
|
1774
|
-
|
|
1775
|
-
|
|
1776
|
-
|
|
1777
|
-
|
|
1778
|
-
|
|
1779
|
-
data: {
|
|
1780
|
-
kvPairs: result.data.kvPairs,
|
|
1781
|
-
total: result.data.total
|
|
1733
|
+
signUp: {
|
|
1734
|
+
...client.signUp,
|
|
1735
|
+
email: async (...args) => {
|
|
1736
|
+
const result = await client.signUp.email(...args);
|
|
1737
|
+
const token = result.data?.token;
|
|
1738
|
+
const sessionId = result.data?.session?.id || "session";
|
|
1739
|
+
if (token) {
|
|
1740
|
+
const session = {
|
|
1741
|
+
id: sessionId,
|
|
1742
|
+
token,
|
|
1743
|
+
expiresAt: new Date(Date.now() + 7 * 24 * 60 * 60 * 1e3).toISOString()
|
|
1744
|
+
};
|
|
1745
|
+
storeToken(projectId, session);
|
|
1782
1746
|
}
|
|
1783
|
-
|
|
1784
|
-
},
|
|
1785
|
-
/**
|
|
1786
|
-
* Delete a single key-value pair
|
|
1787
|
-
*/
|
|
1788
|
-
deleteValue: async (key) => {
|
|
1789
|
-
const result = await fetchWithAuth(
|
|
1790
|
-
`/key-value/${encodeURIComponent(key)}`,
|
|
1791
|
-
{ method: "DELETE" }
|
|
1792
|
-
);
|
|
1793
|
-
if (!result.success) {
|
|
1794
|
-
return { success: false, error: result.error };
|
|
1747
|
+
return result;
|
|
1795
1748
|
}
|
|
1796
|
-
return {
|
|
1797
|
-
success: true,
|
|
1798
|
-
data: {
|
|
1799
|
-
message: result.data.message || "KV pair deleted"
|
|
1800
|
-
}
|
|
1801
|
-
};
|
|
1802
1749
|
},
|
|
1803
|
-
|
|
1804
|
-
|
|
1805
|
-
|
|
1806
|
-
*/
|
|
1807
|
-
deleteValues: async (keys) => {
|
|
1808
|
-
if (keys.length === 0) {
|
|
1809
|
-
return {
|
|
1810
|
-
success: true,
|
|
1811
|
-
data: {
|
|
1812
|
-
deleted: [],
|
|
1813
|
-
failed: []
|
|
1814
|
-
}
|
|
1815
|
-
};
|
|
1816
|
-
}
|
|
1817
|
-
const results = await Promise.allSettled(
|
|
1818
|
-
keys.map(
|
|
1819
|
-
(key) => fetchWithAuth(
|
|
1820
|
-
`/key-value/${encodeURIComponent(key)}`,
|
|
1821
|
-
{ method: "DELETE" }
|
|
1822
|
-
).then((result) => ({ key, result }))
|
|
1823
|
-
)
|
|
1824
|
-
);
|
|
1825
|
-
const deleted = [];
|
|
1826
|
-
const failed = [];
|
|
1827
|
-
results.forEach((result, index) => {
|
|
1828
|
-
if (result.status === "fulfilled") {
|
|
1829
|
-
const { key, result: deleteResult } = result.value;
|
|
1830
|
-
if (deleteResult.success) {
|
|
1831
|
-
deleted.push(key);
|
|
1832
|
-
} else {
|
|
1833
|
-
failed.push({
|
|
1834
|
-
key,
|
|
1835
|
-
error: deleteResult.error || "Delete failed"
|
|
1836
|
-
});
|
|
1837
|
-
}
|
|
1838
|
-
} else {
|
|
1839
|
-
failed.push({
|
|
1840
|
-
key: keys[index],
|
|
1841
|
-
error: result.reason?.message || "Request failed"
|
|
1842
|
-
});
|
|
1843
|
-
}
|
|
1844
|
-
});
|
|
1845
|
-
return {
|
|
1846
|
-
success: failed.length === 0,
|
|
1847
|
-
data: {
|
|
1848
|
-
deleted,
|
|
1849
|
-
failed
|
|
1850
|
-
}
|
|
1851
|
-
};
|
|
1750
|
+
signOut: async (...args) => {
|
|
1751
|
+
clearToken(projectId);
|
|
1752
|
+
return client.signOut(...args);
|
|
1852
1753
|
},
|
|
1853
|
-
|
|
1854
|
-
|
|
1855
|
-
|
|
1856
|
-
|
|
1857
|
-
const result = await fetchWithAuth(
|
|
1858
|
-
"/key-value/bulk",
|
|
1859
|
-
{
|
|
1860
|
-
method: "POST",
|
|
1861
|
-
body: JSON.stringify({ kvPairs })
|
|
1862
|
-
}
|
|
1863
|
-
);
|
|
1864
|
-
if (!result.success) {
|
|
1865
|
-
return { success: false, error: result.error };
|
|
1866
|
-
}
|
|
1867
|
-
return {
|
|
1868
|
-
success: true,
|
|
1869
|
-
data: {
|
|
1870
|
-
results: result.data.results,
|
|
1871
|
-
total: result.data.total
|
|
1872
|
-
}
|
|
1873
|
-
};
|
|
1874
|
-
}
|
|
1754
|
+
// useSession works as-is - it uses the Bearer token from fetchOptions
|
|
1755
|
+
useSession: client.useSession,
|
|
1756
|
+
// Pass through other methods
|
|
1757
|
+
getSession: client.getSession
|
|
1875
1758
|
};
|
|
1876
1759
|
}
|
|
1877
1760
|
|
|
1878
1761
|
// ../../sandpack-auth/dist/client/index.js
|
|
1879
|
-
function
|
|
1762
|
+
function shouldUseBearerAuth2(authApiUrl) {
|
|
1880
1763
|
if (typeof window === "undefined") {
|
|
1881
1764
|
return false;
|
|
1882
1765
|
}
|
|
1883
|
-
if (process.env.NODE_ENV === "production") {
|
|
1884
|
-
console.warn(
|
|
1885
|
-
"[SANDPACK-AUTH] Sandpack detection called in production environment. This should only run in development/preview. Returning false."
|
|
1886
|
-
);
|
|
1887
|
-
return false;
|
|
1888
|
-
}
|
|
1889
1766
|
try {
|
|
1890
|
-
const
|
|
1891
|
-
|
|
1892
|
-
|
|
1893
|
-
|
|
1767
|
+
const currentOrigin = window.location.origin;
|
|
1768
|
+
const authOrigin = new URL(authApiUrl).origin;
|
|
1769
|
+
const isCrossOrigin = currentOrigin !== authOrigin;
|
|
1770
|
+
if (isCrossOrigin) {
|
|
1771
|
+
console.log("[Sandpack Auth] Cross-origin detected:", {
|
|
1772
|
+
current: currentOrigin,
|
|
1773
|
+
auth: authOrigin
|
|
1774
|
+
});
|
|
1775
|
+
}
|
|
1776
|
+
return isCrossOrigin;
|
|
1777
|
+
} catch (error) {
|
|
1778
|
+
console.error("[Sandpack Auth] Failed to check origin:", error);
|
|
1779
|
+
return false;
|
|
1894
1780
|
}
|
|
1895
1781
|
}
|
|
1896
|
-
function
|
|
1782
|
+
function getStorageKey2(projectId) {
|
|
1897
1783
|
return `erikey.session.${projectId}`;
|
|
1898
1784
|
}
|
|
1899
|
-
function
|
|
1900
|
-
const key =
|
|
1901
|
-
const stored = {
|
|
1902
|
-
token: session.token,
|
|
1903
|
-
expiresAt: session.expiresAt
|
|
1904
|
-
};
|
|
1905
|
-
console.log("[Sandpack Auth] Storing token:", {
|
|
1906
|
-
key,
|
|
1907
|
-
tokenPreview: session.token.substring(0, 20) + "..."
|
|
1908
|
-
});
|
|
1909
|
-
localStorage.setItem(key, JSON.stringify(stored));
|
|
1910
|
-
const check = localStorage.getItem(key);
|
|
1911
|
-
if (!check) {
|
|
1912
|
-
console.error("[Sandpack Auth] Failed to store token in localStorage");
|
|
1913
|
-
} else {
|
|
1914
|
-
console.log("[Sandpack Auth] Token stored successfully");
|
|
1915
|
-
}
|
|
1916
|
-
}
|
|
1917
|
-
function getStoredToken(projectId) {
|
|
1918
|
-
const key = getStorageKey(projectId);
|
|
1785
|
+
function getStoredToken2(projectId) {
|
|
1786
|
+
const key = getStorageKey2(projectId);
|
|
1919
1787
|
const stored = localStorage.getItem(key);
|
|
1920
1788
|
if (!stored) {
|
|
1921
1789
|
return null;
|
|
@@ -1934,33 +1802,26 @@ function getStoredToken(projectId) {
|
|
|
1934
1802
|
return null;
|
|
1935
1803
|
}
|
|
1936
1804
|
}
|
|
1937
|
-
function clearToken(projectId) {
|
|
1938
|
-
const key = getStorageKey(projectId);
|
|
1939
|
-
console.log("[Sandpack Auth] Clearing token from localStorage");
|
|
1940
|
-
localStorage.removeItem(key);
|
|
1941
|
-
}
|
|
1942
1805
|
|
|
1943
|
-
// src/
|
|
1944
|
-
function
|
|
1945
|
-
const { projectId } = config;
|
|
1946
|
-
const
|
|
1947
|
-
const
|
|
1948
|
-
const inSandpack = isSandpackEnvironment();
|
|
1949
|
-
if (!inSandpack) {
|
|
1950
|
-
return client;
|
|
1951
|
-
}
|
|
1952
|
-
const fetchWithBearer = async (endpoint, options) => {
|
|
1953
|
-
const token = getStoredToken(projectId);
|
|
1806
|
+
// src/kv-client.ts
|
|
1807
|
+
function createKvClient(config) {
|
|
1808
|
+
const { projectId, baseUrl = "https://auth.erikey.com" } = config;
|
|
1809
|
+
const useBearerAuth = shouldUseBearerAuth2(baseUrl);
|
|
1810
|
+
const fetchWithAuth = async (endpoint, options) => {
|
|
1954
1811
|
const headers = {
|
|
1955
1812
|
"Content-Type": "application/json",
|
|
1956
1813
|
"X-Project-Id": projectId,
|
|
1957
1814
|
...options?.headers || {}
|
|
1958
1815
|
};
|
|
1959
|
-
if (
|
|
1960
|
-
|
|
1816
|
+
if (useBearerAuth) {
|
|
1817
|
+
const token = getStoredToken2(projectId);
|
|
1818
|
+
if (token) {
|
|
1819
|
+
headers["Authorization"] = `Bearer ${token}`;
|
|
1820
|
+
}
|
|
1961
1821
|
}
|
|
1962
1822
|
const response = await fetch(`${baseUrl}/api/auth${endpoint}`, {
|
|
1963
1823
|
...options,
|
|
1824
|
+
credentials: useBearerAuth ? "omit" : "include",
|
|
1964
1825
|
headers
|
|
1965
1826
|
});
|
|
1966
1827
|
const data = await response.json();
|
|
@@ -1976,66 +1837,20 @@ function createAuthClient3(config) {
|
|
|
1976
1837
|
};
|
|
1977
1838
|
};
|
|
1978
1839
|
return {
|
|
1979
|
-
|
|
1980
|
-
|
|
1981
|
-
|
|
1982
|
-
if (result.success && token) {
|
|
1983
|
-
console.log("[Sandpack Auth] Storing token after sign-up");
|
|
1984
|
-
storeToken(projectId, {
|
|
1985
|
-
token,
|
|
1986
|
-
expiresAt: new Date(Date.now() + 7 * 24 * 60 * 60 * 1e3).toISOString()
|
|
1987
|
-
// 7 days
|
|
1988
|
-
});
|
|
1989
|
-
}
|
|
1990
|
-
return result;
|
|
1991
|
-
},
|
|
1992
|
-
signIn: async (data) => {
|
|
1993
|
-
const result = await client.signIn(data);
|
|
1994
|
-
const token = result.data?.token || result.data?.session?.token;
|
|
1995
|
-
if (result.success && token) {
|
|
1996
|
-
console.log("[Sandpack Auth] Storing token after sign-in");
|
|
1997
|
-
storeToken(projectId, {
|
|
1998
|
-
token,
|
|
1999
|
-
expiresAt: new Date(Date.now() + 7 * 24 * 60 * 60 * 1e3).toISOString()
|
|
2000
|
-
// 7 days
|
|
2001
|
-
});
|
|
2002
|
-
}
|
|
2003
|
-
return result;
|
|
2004
|
-
},
|
|
2005
|
-
signOut: async () => {
|
|
2006
|
-
const result = await client.signOut();
|
|
2007
|
-
clearToken(projectId);
|
|
2008
|
-
return result;
|
|
2009
|
-
},
|
|
2010
|
-
getUser: async () => {
|
|
2011
|
-
const token = getStoredToken(projectId);
|
|
2012
|
-
if (token) {
|
|
2013
|
-
const response = await fetch(`${baseUrl}/api/auth/get-session`, {
|
|
2014
|
-
headers: {
|
|
2015
|
-
"Authorization": `Bearer ${token}`,
|
|
2016
|
-
"X-Project-Id": projectId
|
|
2017
|
-
}
|
|
2018
|
-
});
|
|
2019
|
-
const data = await response.json();
|
|
2020
|
-
if (response.ok && (data?.user || data?.email)) {
|
|
2021
|
-
return { success: true, data };
|
|
2022
|
-
}
|
|
2023
|
-
console.log("[Sandpack Auth] Bearer token invalid, clearing");
|
|
2024
|
-
clearToken(projectId);
|
|
2025
|
-
}
|
|
2026
|
-
return { success: true, data: void 0 };
|
|
2027
|
-
},
|
|
2028
|
-
forgotPassword: client.forgotPassword,
|
|
2029
|
-
resetPassword: client.resetPassword,
|
|
2030
|
-
// KV methods - wrapped with Bearer token support for Sandpack
|
|
1840
|
+
/**
|
|
1841
|
+
* Set a single key-value pair
|
|
1842
|
+
*/
|
|
2031
1843
|
setValue: async (key, value) => {
|
|
2032
|
-
return
|
|
1844
|
+
return fetchWithAuth(`/key-value/${encodeURIComponent(key)}`, {
|
|
2033
1845
|
method: "PUT",
|
|
2034
1846
|
body: JSON.stringify({ value })
|
|
2035
1847
|
});
|
|
2036
1848
|
},
|
|
1849
|
+
/**
|
|
1850
|
+
* Get a single key-value pair
|
|
1851
|
+
*/
|
|
2037
1852
|
getValue: async (key) => {
|
|
2038
|
-
const result = await
|
|
1853
|
+
const result = await fetchWithAuth(
|
|
2039
1854
|
`/key-value/${encodeURIComponent(key)}`,
|
|
2040
1855
|
{ method: "GET" }
|
|
2041
1856
|
);
|
|
@@ -2052,8 +1867,11 @@ function createAuthClient3(config) {
|
|
|
2052
1867
|
}
|
|
2053
1868
|
};
|
|
2054
1869
|
},
|
|
1870
|
+
/**
|
|
1871
|
+
* Get all key-value pairs for the authenticated user
|
|
1872
|
+
*/
|
|
2055
1873
|
getValues: async () => {
|
|
2056
|
-
const result = await
|
|
1874
|
+
const result = await fetchWithAuth(
|
|
2057
1875
|
"/key-value",
|
|
2058
1876
|
{ method: "GET" }
|
|
2059
1877
|
);
|
|
@@ -2068,8 +1886,11 @@ function createAuthClient3(config) {
|
|
|
2068
1886
|
}
|
|
2069
1887
|
};
|
|
2070
1888
|
},
|
|
1889
|
+
/**
|
|
1890
|
+
* Delete a single key-value pair
|
|
1891
|
+
*/
|
|
2071
1892
|
deleteValue: async (key) => {
|
|
2072
|
-
const result = await
|
|
1893
|
+
const result = await fetchWithAuth(
|
|
2073
1894
|
`/key-value/${encodeURIComponent(key)}`,
|
|
2074
1895
|
{ method: "DELETE" }
|
|
2075
1896
|
);
|
|
@@ -2083,6 +1904,9 @@ function createAuthClient3(config) {
|
|
|
2083
1904
|
}
|
|
2084
1905
|
};
|
|
2085
1906
|
},
|
|
1907
|
+
/**
|
|
1908
|
+
* Delete multiple key-value pairs
|
|
1909
|
+
*/
|
|
2086
1910
|
deleteValues: async (keys) => {
|
|
2087
1911
|
if (keys.length === 0) {
|
|
2088
1912
|
return {
|
|
@@ -2095,7 +1919,7 @@ function createAuthClient3(config) {
|
|
|
2095
1919
|
}
|
|
2096
1920
|
const results = await Promise.allSettled(
|
|
2097
1921
|
keys.map(
|
|
2098
|
-
(key) =>
|
|
1922
|
+
(key) => fetchWithAuth(
|
|
2099
1923
|
`/key-value/${encodeURIComponent(key)}`,
|
|
2100
1924
|
{ method: "DELETE" }
|
|
2101
1925
|
).then((result) => ({ key, result }))
|
|
@@ -2129,8 +1953,11 @@ function createAuthClient3(config) {
|
|
|
2129
1953
|
}
|
|
2130
1954
|
};
|
|
2131
1955
|
},
|
|
1956
|
+
/**
|
|
1957
|
+
* Set multiple key-value pairs in bulk (max 100 pairs)
|
|
1958
|
+
*/
|
|
2132
1959
|
setValues: async (kvPairs) => {
|
|
2133
|
-
const result = await
|
|
1960
|
+
const result = await fetchWithAuth(
|
|
2134
1961
|
"/key-value/bulk",
|
|
2135
1962
|
{
|
|
2136
1963
|
method: "POST",
|
|
@@ -2153,6 +1980,7 @@ function createAuthClient3(config) {
|
|
|
2153
1980
|
// Annotate the CommonJS export names for ESM import in node:
|
|
2154
1981
|
0 && (module.exports = {
|
|
2155
1982
|
createAuthClient,
|
|
2156
|
-
createDashboardClient
|
|
1983
|
+
createDashboardClient,
|
|
1984
|
+
createKvClient
|
|
2157
1985
|
});
|
|
2158
1986
|
//# sourceMappingURL=index.js.map
|