@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 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 AuthContextValue = {
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 useAuthContext(): AuthContextValue;
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, AuthProvider, type AuthProviderProps, 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, useAuthContext, useDebounce, useIsMobile, useTheme, workflowRequest };
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 AuthContextValue = {
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 useAuthContext(): AuthContextValue;
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, AuthProvider, type AuthProviderProps, 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, useAuthContext, useDebounce, useIsMobile, useTheme, workflowRequest };
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/AuthProvider.tsx
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/AuthProvider.tsx
1629
+ // src/components/auth/HowoneProvider.tsx
1632
1630
  var import_jsx_runtime5 = require("react/jsx-runtime");
1633
- var AuthContext = (0, import_react5.createContext)(null);
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)(AuthContext.Provider, { value, children: [
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 useAuthContext() {
1674
- const ctx = (0, import_react5.useContext)(AuthContext);
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)("div", { className: "text-[16px] font-semibold leading-tight text-white/95 drop-shadow-sm", children: title }),
2035
- message && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "text-[13px] font-normal leading-relaxed text-white/75 drop-shadow-sm", children: message })
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: 3e3,
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(\`HTTP \${response.status}: \${response.statusText}\`);
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(\`HTTP \${xhr.status}: \${xhr.statusText}\`);
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(\`Network error for \${xhr.__intercepted_method__} \${xhr.__intercepted_url__}\`);
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