@howone/sdk 0.1.20 → 0.1.22
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 +3 -7
- package/dist/index.d.ts +3 -7
- package/dist/index.js +50 -22
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +52 -23
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -424,7 +424,7 @@ interface LoginFormProps {
|
|
|
424
424
|
declare const LoginForm: React$1.FC<LoginFormProps>;
|
|
425
425
|
|
|
426
426
|
type Theme$1 = "dark" | "light" | "system";
|
|
427
|
-
type
|
|
427
|
+
type HowoneContextValue = {
|
|
428
428
|
user: ReturnType<typeof parseUserFromToken> | null;
|
|
429
429
|
token: string | null;
|
|
430
430
|
isAuthenticated: boolean;
|
|
@@ -435,10 +435,8 @@ interface HowoneProviderProps {
|
|
|
435
435
|
autoRedirect?: boolean;
|
|
436
436
|
showFloatingButton?: boolean;
|
|
437
437
|
projectId?: string;
|
|
438
|
-
/** 主题相关配置 */
|
|
439
438
|
defaultTheme?: Theme$1;
|
|
440
439
|
themeStorageKey?: string;
|
|
441
|
-
/** 如果为 true,将忽略 localStorage 中的值,始终使用 defaultTheme */
|
|
442
440
|
forceDefaultTheme?: boolean;
|
|
443
441
|
}
|
|
444
442
|
/**
|
|
@@ -462,9 +460,7 @@ interface HowoneProviderProps {
|
|
|
462
460
|
* ```
|
|
463
461
|
*/
|
|
464
462
|
declare const HowoneProvider: React$1.FC<HowoneProviderProps>;
|
|
465
|
-
declare function
|
|
466
|
-
declare const AuthProvider: React$1.FC<HowoneProviderProps>;
|
|
467
|
-
type AuthProviderProps = HowoneProviderProps;
|
|
463
|
+
declare function useHowoneContext(): HowoneContextValue;
|
|
468
464
|
|
|
469
465
|
type AuthState = {
|
|
470
466
|
user: Record<string, unknown> | null;
|
|
@@ -573,4 +569,4 @@ declare function useDebounce<T>(value: T, delay: number): T;
|
|
|
573
569
|
*/
|
|
574
570
|
declare function injectEarlyErrorHandler(): void;
|
|
575
571
|
|
|
576
|
-
export { type AIWorkflowClientOptions, type AIWorkflowResponse, AUTH_ROOT, AUTH_TOKEN_KEY, type AccessContext, type Artifact, type ArtifactCreateInput, type ArtifactListQuery,
|
|
572
|
+
export { type AIWorkflowClientOptions, type AIWorkflowResponse, AUTH_ROOT, AUTH_TOKEN_KEY, type AccessContext, type Artifact, type ArtifactCreateInput, type ArtifactListQuery, type AxiosAIWorkflowOptions, ClayxToast, DefaultErrorFallback, type EmailLoginRequest, type EmailLoginResponse, ErrorBoundary, FloatingButton, GlobalToastContainer, HowoneProvider, type HowoneProviderProps, Loading, LoadingSpinner, LoginForm, type SendCodeRequest, type SendCodeResponse, ThemeProvider, ThemeToggle, type Visibility, aiRequest, aiWorkflow, canAccessArtifact, createAIWorkflowClient, createAIWorkflowClientAxios, createArtifactsClient, createClient, getAuthRoot, getCodeStatus, getDefaultProjectId, getToken, howone, injectEarlyErrorHandler, isTokenValid, loginWithEmailCode, onAuthStateChanged, parseUserFromToken, request, sendEmailVerificationCode, setAuthRoot, setDefaultProjectId, setToken, unifiedAuth, unifiedOAuth, useAuth, useDebounce, useHowoneContext, useIsMobile, useTheme, workflowRequest };
|
package/dist/index.d.ts
CHANGED
|
@@ -424,7 +424,7 @@ interface LoginFormProps {
|
|
|
424
424
|
declare const LoginForm: React$1.FC<LoginFormProps>;
|
|
425
425
|
|
|
426
426
|
type Theme$1 = "dark" | "light" | "system";
|
|
427
|
-
type
|
|
427
|
+
type HowoneContextValue = {
|
|
428
428
|
user: ReturnType<typeof parseUserFromToken> | null;
|
|
429
429
|
token: string | null;
|
|
430
430
|
isAuthenticated: boolean;
|
|
@@ -435,10 +435,8 @@ interface HowoneProviderProps {
|
|
|
435
435
|
autoRedirect?: boolean;
|
|
436
436
|
showFloatingButton?: boolean;
|
|
437
437
|
projectId?: string;
|
|
438
|
-
/** 主题相关配置 */
|
|
439
438
|
defaultTheme?: Theme$1;
|
|
440
439
|
themeStorageKey?: string;
|
|
441
|
-
/** 如果为 true,将忽略 localStorage 中的值,始终使用 defaultTheme */
|
|
442
440
|
forceDefaultTheme?: boolean;
|
|
443
441
|
}
|
|
444
442
|
/**
|
|
@@ -462,9 +460,7 @@ interface HowoneProviderProps {
|
|
|
462
460
|
* ```
|
|
463
461
|
*/
|
|
464
462
|
declare const HowoneProvider: React$1.FC<HowoneProviderProps>;
|
|
465
|
-
declare function
|
|
466
|
-
declare const AuthProvider: React$1.FC<HowoneProviderProps>;
|
|
467
|
-
type AuthProviderProps = HowoneProviderProps;
|
|
463
|
+
declare function useHowoneContext(): HowoneContextValue;
|
|
468
464
|
|
|
469
465
|
type AuthState = {
|
|
470
466
|
user: Record<string, unknown> | null;
|
|
@@ -573,4 +569,4 @@ declare function useDebounce<T>(value: T, delay: number): T;
|
|
|
573
569
|
*/
|
|
574
570
|
declare function injectEarlyErrorHandler(): void;
|
|
575
571
|
|
|
576
|
-
export { type AIWorkflowClientOptions, type AIWorkflowResponse, AUTH_ROOT, AUTH_TOKEN_KEY, type AccessContext, type Artifact, type ArtifactCreateInput, type ArtifactListQuery,
|
|
572
|
+
export { type AIWorkflowClientOptions, type AIWorkflowResponse, AUTH_ROOT, AUTH_TOKEN_KEY, type AccessContext, type Artifact, type ArtifactCreateInput, type ArtifactListQuery, type AxiosAIWorkflowOptions, ClayxToast, DefaultErrorFallback, type EmailLoginRequest, type EmailLoginResponse, ErrorBoundary, FloatingButton, GlobalToastContainer, HowoneProvider, type HowoneProviderProps, Loading, LoadingSpinner, LoginForm, type SendCodeRequest, type SendCodeResponse, ThemeProvider, ThemeToggle, type Visibility, aiRequest, aiWorkflow, canAccessArtifact, createAIWorkflowClient, createAIWorkflowClientAxios, createArtifactsClient, createClient, getAuthRoot, getCodeStatus, getDefaultProjectId, getToken, howone, injectEarlyErrorHandler, isTokenValid, loginWithEmailCode, onAuthStateChanged, parseUserFromToken, request, sendEmailVerificationCode, setAuthRoot, setDefaultProjectId, setToken, unifiedAuth, unifiedOAuth, useAuth, useDebounce, useHowoneContext, useIsMobile, useTheme, workflowRequest };
|
package/dist/index.js
CHANGED
|
@@ -235,7 +235,6 @@ var index_exports = {};
|
|
|
235
235
|
__export(index_exports, {
|
|
236
236
|
AUTH_ROOT: () => AUTH_ROOT,
|
|
237
237
|
AUTH_TOKEN_KEY: () => AUTH_TOKEN_KEY,
|
|
238
|
-
AuthProvider: () => AuthProvider,
|
|
239
238
|
ClayxToast: () => ClayxToast,
|
|
240
239
|
DefaultErrorFallback: () => DefaultErrorFallback,
|
|
241
240
|
ErrorBoundary: () => ErrorBoundary,
|
|
@@ -272,8 +271,8 @@ __export(index_exports, {
|
|
|
272
271
|
unifiedAuth: () => unifiedAuth,
|
|
273
272
|
unifiedOAuth: () => unifiedOAuth,
|
|
274
273
|
useAuth: () => useAuth,
|
|
275
|
-
useAuthContext: () => useAuthContext,
|
|
276
274
|
useDebounce: () => useDebounce,
|
|
275
|
+
useHowoneContext: () => useHowoneContext,
|
|
277
276
|
useIsMobile: () => useIsMobile,
|
|
278
277
|
useTheme: () => useTheme,
|
|
279
278
|
workflowRequest: () => workflowRequest
|
|
@@ -389,7 +388,6 @@ var UnifiedAuthService = class {
|
|
|
389
388
|
};
|
|
390
389
|
popupCheckInterval = window.setInterval(checkPopupStatus, 1e3);
|
|
391
390
|
const messageHandler = (event) => {
|
|
392
|
-
console.log("messageHandler", event);
|
|
393
391
|
const validOrigins = [window.location.origin, "https://create-x-backend-dev.fly.dev"];
|
|
394
392
|
const isValidOrigin = validOrigins.some(
|
|
395
393
|
(origin) => event.origin === origin || event.origin.includes("localhost") || event.origin.includes("127.0.0.1") || event.origin.includes("fly.dev")
|
|
@@ -1558,7 +1556,7 @@ var LoginForm = ({
|
|
|
1558
1556
|
] });
|
|
1559
1557
|
};
|
|
1560
1558
|
|
|
1561
|
-
// src/components/auth/
|
|
1559
|
+
// src/components/auth/HowoneProvider.tsx
|
|
1562
1560
|
var import_react5 = require("react");
|
|
1563
1561
|
init_auth();
|
|
1564
1562
|
|
|
@@ -1628,9 +1626,9 @@ function GlobalToastContainer() {
|
|
|
1628
1626
|
);
|
|
1629
1627
|
}
|
|
1630
1628
|
|
|
1631
|
-
// src/components/auth/
|
|
1629
|
+
// src/components/auth/HowoneProvider.tsx
|
|
1632
1630
|
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
1633
|
-
var
|
|
1631
|
+
var HowoneContext = (0, import_react5.createContext)(null);
|
|
1634
1632
|
var HowoneProvider = ({
|
|
1635
1633
|
children,
|
|
1636
1634
|
showFloatingButton = true,
|
|
@@ -1640,6 +1638,24 @@ var HowoneProvider = ({
|
|
|
1640
1638
|
}) => {
|
|
1641
1639
|
const [user, setUser] = (0, import_react5.useState)(() => parseUserFromToken(getToken()));
|
|
1642
1640
|
const [token, setTokenState] = (0, import_react5.useState)(() => getToken());
|
|
1641
|
+
(0, import_react5.useEffect)(() => {
|
|
1642
|
+
try {
|
|
1643
|
+
const params = new URLSearchParams(window.location.search);
|
|
1644
|
+
const urlToken = params.get("access_token") || params.get("token");
|
|
1645
|
+
if (urlToken) {
|
|
1646
|
+
setToken(urlToken);
|
|
1647
|
+
setTokenState(urlToken);
|
|
1648
|
+
setUser(parseUserFromToken(urlToken));
|
|
1649
|
+
params.delete("access_token");
|
|
1650
|
+
params.delete("token");
|
|
1651
|
+
const newSearch = params.toString();
|
|
1652
|
+
const newUrl = window.location.pathname + (newSearch ? "?" + newSearch : "") + window.location.hash;
|
|
1653
|
+
window.history.replaceState({}, "", newUrl);
|
|
1654
|
+
}
|
|
1655
|
+
} catch (e) {
|
|
1656
|
+
console.error("[HowoneProvider] Failed to capture token from URL:", e);
|
|
1657
|
+
}
|
|
1658
|
+
}, []);
|
|
1643
1659
|
const logout = () => {
|
|
1644
1660
|
try {
|
|
1645
1661
|
setToken(null);
|
|
@@ -1661,7 +1677,7 @@ var HowoneProvider = ({
|
|
|
1661
1677
|
storageKey: themeStorageKey,
|
|
1662
1678
|
forceDefault: forceDefaultTheme,
|
|
1663
1679
|
children: [
|
|
1664
|
-
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
1680
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(HowoneContext.Provider, { value, children: [
|
|
1665
1681
|
children,
|
|
1666
1682
|
showFloatingButton && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(FloatingButton, { onClick: () => window.open("https://howone.ai", "_blank") })
|
|
1667
1683
|
] }),
|
|
@@ -1670,8 +1686,8 @@ var HowoneProvider = ({
|
|
|
1670
1686
|
}
|
|
1671
1687
|
);
|
|
1672
1688
|
};
|
|
1673
|
-
function
|
|
1674
|
-
const ctx = (0, import_react5.useContext)(
|
|
1689
|
+
function useHowoneContext() {
|
|
1690
|
+
const ctx = (0, import_react5.useContext)(HowoneContext);
|
|
1675
1691
|
if (!ctx) {
|
|
1676
1692
|
const t = getToken();
|
|
1677
1693
|
return {
|
|
@@ -1688,7 +1704,6 @@ function useAuthContext() {
|
|
|
1688
1704
|
}
|
|
1689
1705
|
return ctx;
|
|
1690
1706
|
}
|
|
1691
|
-
var AuthProvider = HowoneProvider;
|
|
1692
1707
|
|
|
1693
1708
|
// src/components/index.ts
|
|
1694
1709
|
init_auth();
|
|
@@ -1986,7 +2001,6 @@ var ToastContent = ({ type, title, message, component, closeToast }) => {
|
|
|
1986
2001
|
const handleClose = (0, import_react8.useCallback)(() => {
|
|
1987
2002
|
closeToast?.();
|
|
1988
2003
|
}, [closeToast]);
|
|
1989
|
-
console.log(iconConfig, "????????");
|
|
1990
2004
|
if (component) {
|
|
1991
2005
|
return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: `flex items-start gap-3 min-h-[80px] w-full backdrop-blur-md
|
|
1992
2006
|
rounded-xl p-4 shadow-2xl relative overflow-hidden ${iconConfig.bgGradient}`, children: [
|
|
@@ -2031,15 +2045,31 @@ var ToastContent = ({ type, title, message, component, closeToast }) => {
|
|
|
2031
2045
|
}
|
|
2032
2046
|
) }) }),
|
|
2033
2047
|
/* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "flex flex-col gap-1 flex-1 relative z-10", children: [
|
|
2034
|
-
title && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
2035
|
-
|
|
2048
|
+
title && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
2049
|
+
"div",
|
|
2050
|
+
{
|
|
2051
|
+
className: "font-semibold leading-tight text-white/95 drop-shadow-sm",
|
|
2052
|
+
style: { fontSize: "16px" },
|
|
2053
|
+
children: title
|
|
2054
|
+
}
|
|
2055
|
+
),
|
|
2056
|
+
message && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
2057
|
+
"div",
|
|
2058
|
+
{
|
|
2059
|
+
className: "text-white/75 drop-shadow-sm",
|
|
2060
|
+
style: {
|
|
2061
|
+
fontSize: "13px"
|
|
2062
|
+
},
|
|
2063
|
+
children: message
|
|
2064
|
+
}
|
|
2065
|
+
)
|
|
2036
2066
|
] }),
|
|
2037
2067
|
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "relative z-10", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(CloseButton, { closeToast: handleClose }) })
|
|
2038
2068
|
] });
|
|
2039
2069
|
};
|
|
2040
2070
|
var defaultToastOptions = {
|
|
2041
2071
|
position: "bottom-right",
|
|
2042
|
-
autoClose:
|
|
2072
|
+
autoClose: 3e5,
|
|
2043
2073
|
hideProgressBar: true,
|
|
2044
2074
|
closeOnClick: false,
|
|
2045
2075
|
pauseOnHover: true,
|
|
@@ -2172,13 +2202,12 @@ var ERROR_HANDLER_SCRIPT = `(function () {
|
|
|
2172
2202
|
const file = fileElement ? fileElement.textContent : "";
|
|
2173
2203
|
const frames = Array.from(frameElements)
|
|
2174
2204
|
.map((el) => el.textContent)
|
|
2175
|
-
.join("
|
|
2176
|
-
");
|
|
2205
|
+
.join("\\n");
|
|
2177
2206
|
const stack = stackElement ? stackElement.textContent : "";
|
|
2178
2207
|
|
|
2179
2208
|
let line, column;
|
|
2180
2209
|
const fileStr = file || "";
|
|
2181
|
-
const lineColMatch = fileStr.match(/(?:line|at|:)(?:.*?)(?::| )(d+)(?::| )(d+)/i);
|
|
2210
|
+
const lineColMatch = fileStr.match(/(?:line|at|:)(?:.*?)(?::| )(\\d+)(?::| )(\\d+)/i);
|
|
2182
2211
|
if (lineColMatch) {
|
|
2183
2212
|
line = parseInt(lineColMatch[1], 10);
|
|
2184
2213
|
column = parseInt(lineColMatch[2], 10);
|
|
@@ -2327,7 +2356,7 @@ var ERROR_HANDLER_SCRIPT = `(function () {
|
|
|
2327
2356
|
return originalFetch.apply(this, args)
|
|
2328
2357
|
.then(response => {
|
|
2329
2358
|
if (!response.ok) {
|
|
2330
|
-
const networkError = new Error(
|
|
2359
|
+
const networkError = new Error('HTTP ' + response.status + ': ' + response.statusText);
|
|
2331
2360
|
handleFetchError(networkError, url, response);
|
|
2332
2361
|
}
|
|
2333
2362
|
return response;
|
|
@@ -2375,7 +2404,7 @@ var ERROR_HANDLER_SCRIPT = `(function () {
|
|
|
2375
2404
|
xhr.onreadystatechange = function() {
|
|
2376
2405
|
if (xhr.readyState === 4) {
|
|
2377
2406
|
if (xhr.status >= 400) {
|
|
2378
|
-
const networkError = new Error(
|
|
2407
|
+
const networkError = new Error('HTTP ' + xhr.status + ': ' + xhr.statusText);
|
|
2379
2408
|
handleXHRError(networkError, xhr, false);
|
|
2380
2409
|
}
|
|
2381
2410
|
}
|
|
@@ -2387,7 +2416,7 @@ var ERROR_HANDLER_SCRIPT = `(function () {
|
|
|
2387
2416
|
|
|
2388
2417
|
const originalOnError = xhr.onerror;
|
|
2389
2418
|
xhr.onerror = function() {
|
|
2390
|
-
const networkError = new Error(
|
|
2419
|
+
const networkError = new Error('Network error for ' + xhr.__intercepted_method__ + ' ' + xhr.__intercepted_url__);
|
|
2391
2420
|
handleXHRError(networkError, xhr, true);
|
|
2392
2421
|
|
|
2393
2422
|
if (originalOnError) {
|
|
@@ -2450,7 +2479,6 @@ init_config();
|
|
|
2450
2479
|
0 && (module.exports = {
|
|
2451
2480
|
AUTH_ROOT,
|
|
2452
2481
|
AUTH_TOKEN_KEY,
|
|
2453
|
-
AuthProvider,
|
|
2454
2482
|
ClayxToast,
|
|
2455
2483
|
DefaultErrorFallback,
|
|
2456
2484
|
ErrorBoundary,
|
|
@@ -2487,8 +2515,8 @@ init_config();
|
|
|
2487
2515
|
unifiedAuth,
|
|
2488
2516
|
unifiedOAuth,
|
|
2489
2517
|
useAuth,
|
|
2490
|
-
useAuthContext,
|
|
2491
2518
|
useDebounce,
|
|
2519
|
+
useHowoneContext,
|
|
2492
2520
|
useIsMobile,
|
|
2493
2521
|
useTheme,
|
|
2494
2522
|
workflowRequest
|