openxiangda 1.0.87 → 1.0.89

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.
@@ -846,18 +846,39 @@ var normalizeDynamicOrder = (value) => {
846
846
  }
847
847
  return `${value.id}:${value.isAsc === "n" ? "-" : "+"}`;
848
848
  };
849
+ var hasOwn = (value, key) => Object.prototype.hasOwnProperty.call(value, key);
850
+ var normalizeEnvelopeCode = (value) => {
851
+ if (value === void 0 || value === null || value === "") {
852
+ return 200;
853
+ }
854
+ const normalized = Number(value);
855
+ return Number.isFinite(normalized) ? normalized : String(value);
856
+ };
857
+ var isSuccessCode = (value) => {
858
+ if (value === void 0 || value === null || value === "") {
859
+ return true;
860
+ }
861
+ const normalized = Number(value);
862
+ return Number.isFinite(normalized) ? normalized === 0 || normalized >= 200 && normalized < 300 : false;
863
+ };
864
+ var getEnvelopeCode = (rawResponse) => {
865
+ if (isRecord(rawResponse) && hasOwn(rawResponse, "code")) {
866
+ return rawResponse.code;
867
+ }
868
+ const nestedData = rawResponse?.data;
869
+ if (isRecord(nestedData) && hasOwn(nestedData, "code")) {
870
+ return nestedData.code;
871
+ }
872
+ return void 0;
873
+ };
849
874
  var normalizeJsonResponse = (rawResponse) => {
850
- const topLevelCode = Number(rawResponse?.code);
851
- const nestedCode = Number(
852
- rawResponse?.data?.code
853
- );
854
- const code = Number.isFinite(topLevelCode) ? topLevelCode : Number.isFinite(nestedCode) ? nestedCode : 200;
875
+ const code = normalizeEnvelopeCode(getEnvelopeCode(rawResponse));
855
876
  const topLevelResult = isRecord(rawResponse) && "result" in rawResponse ? rawResponse.result : void 0;
856
877
  const nestedResult = isRecord(rawResponse?.data) && "result" in (rawResponse.data || {}) ? rawResponse.data?.result : void 0;
857
878
  const topLevelData = isRecord(rawResponse) && "data" in rawResponse ? rawResponse.data : void 0;
858
879
  const result = topLevelResult !== void 0 ? topLevelResult : nestedResult !== void 0 ? nestedResult : topLevelData !== void 0 ? topLevelData : isRecord(rawResponse) ? rawResponse : null;
859
880
  const nestedSuccess = typeof rawResponse?.data?.success === "boolean" ? rawResponse.data?.success : void 0;
860
- const success = typeof rawResponse?.success === "boolean" ? Boolean(rawResponse.success) : typeof nestedSuccess === "boolean" ? Boolean(nestedSuccess) : code >= 200 && code < 300;
881
+ const success = rawResponse?.success === false || nestedSuccess === false ? false : isSuccessCode(code);
861
882
  return {
862
883
  code,
863
884
  success,
@@ -902,6 +923,9 @@ var normalizeBinaryResponse = (rawResponse) => {
902
923
  };
903
924
  };
904
925
  var toSdkError = (input, payload) => {
926
+ if (input instanceof Error && input.response) {
927
+ return input;
928
+ }
905
929
  const normalizedResponse = isRecord(input) ? normalizeJsonResponse(input) : void 0;
906
930
  const nextError = input instanceof Error ? input : new Error(
907
931
  normalizedResponse?.message || `\u8BF7\u6C42\u5931\u8D25: ${String(payload.method).toUpperCase()} ${payload.path}`
@@ -2560,7 +2584,8 @@ var createAuthClient = ({
2560
2584
  });
2561
2585
  const payload = await readPayload(response);
2562
2586
  const code = getRecordValue(payload, "code");
2563
- if (!response.ok || typeof code === "number" && code >= 400) {
2587
+ const success = getRecordValue(payload, "success");
2588
+ if (!response.ok || success === false || !isSuccessCode2(code)) {
2564
2589
  throw new AuthClientError(
2565
2590
  String(getRecordValue(payload, "message") || `Auth request failed: ${response.status}`),
2566
2591
  { status: response.status, code, payload }
@@ -2613,6 +2638,11 @@ var getRecordValue = (value, key) => {
2613
2638
  if (!value || typeof value !== "object") return void 0;
2614
2639
  return value[key];
2615
2640
  };
2641
+ var isSuccessCode2 = (code) => {
2642
+ if (code === void 0 || code === null || code === "") return true;
2643
+ const normalized = Number(code);
2644
+ return Number.isFinite(normalized) ? normalized === 0 || normalized >= 200 && normalized < 300 : false;
2645
+ };
2616
2646
  var resolveLoginUrl = (appType, {
2617
2647
  callbackUrl = getCurrentHref2(),
2618
2648
  callbackParamName = "callback",
@@ -3149,12 +3179,23 @@ var OpenXiangdaProvider = ({
3149
3179
  () => appType || resolveAppTypeFromLocation(),
3150
3180
  [appType]
3151
3181
  );
3182
+ const [accessToken, setAccessTokenState] = (0, import_react8.useState)(null);
3183
+ const setAccessToken = (0, import_react8.useCallback)(
3184
+ (nextAccessToken) => {
3185
+ setAccessTokenState(nextAccessToken || null);
3186
+ },
3187
+ []
3188
+ );
3189
+ const authorizedFetch = (0, import_react8.useMemo)(
3190
+ () => createAuthorizedFetch(resolvedFetch, accessToken),
3191
+ [accessToken, resolvedFetch]
3192
+ );
3152
3193
  const [state, setState] = (0, import_react8.useState)({
3153
3194
  data: null,
3154
3195
  loading: true,
3155
3196
  error: null
3156
3197
  });
3157
- const reload = (0, import_react8.useCallback)(async () => {
3198
+ const reload = (0, import_react8.useCallback)(async (options = {}) => {
3158
3199
  if (!resolvedAppType) {
3159
3200
  setState({
3160
3201
  data: null,
@@ -3167,8 +3208,9 @@ var OpenXiangdaProvider = ({
3167
3208
  return;
3168
3209
  }
3169
3210
  setState((prev) => ({ ...prev, loading: true, error: null }));
3211
+ const requestFetch = options.accessToken !== void 0 ? createAuthorizedFetch(resolvedFetch, options.accessToken || null) : authorizedFetch;
3170
3212
  try {
3171
- const response = await resolvedFetch(
3213
+ const response = await requestFetch(
3172
3214
  buildServiceUrl2(
3173
3215
  servicePrefix,
3174
3216
  `/openxiangda-api/v1/apps/${encodeURIComponent(
@@ -3181,7 +3223,7 @@ var OpenXiangdaProvider = ({
3181
3223
  }
3182
3224
  );
3183
3225
  const payload = await readJsonPayload(response);
3184
- if (!response.ok || payload?.code >= 400) {
3226
+ if (isRuntimeEnvelopeFailure(response, payload)) {
3185
3227
  throw createRuntimeHttpError(
3186
3228
  response,
3187
3229
  payload,
@@ -3200,7 +3242,7 @@ var OpenXiangdaProvider = ({
3200
3242
  error: normalizeRuntimeError(error)
3201
3243
  });
3202
3244
  }
3203
- }, [resolvedAppType, resolvedFetch, servicePrefix]);
3245
+ }, [authorizedFetch, resolvedAppType, resolvedFetch, servicePrefix]);
3204
3246
  (0, import_react8.useEffect)(() => {
3205
3247
  void reload();
3206
3248
  }, [reload]);
@@ -3209,10 +3251,11 @@ var OpenXiangdaProvider = ({
3209
3251
  ...state,
3210
3252
  appType: resolvedAppType,
3211
3253
  servicePrefix,
3212
- fetchImpl: resolvedFetch,
3213
- reload
3254
+ fetchImpl: authorizedFetch,
3255
+ reload,
3256
+ setAccessToken
3214
3257
  }),
3215
- [reload, resolvedAppType, resolvedFetch, servicePrefix, state]
3258
+ [authorizedFetch, reload, resolvedAppType, servicePrefix, state]
3216
3259
  );
3217
3260
  return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(OpenXiangdaRuntimeContext.Provider, { value, children });
3218
3261
  };
@@ -3315,7 +3358,7 @@ var useCanAccessRoute = (input) => {
3315
3358
  payload
3316
3359
  };
3317
3360
  if (!disposed) {
3318
- const shouldTreatAsError = !response.ok || typeof code === "number" && code >= 500;
3361
+ const shouldTreatAsError = !response.ok || isServerErrorCode(code);
3319
3362
  setState({
3320
3363
  data,
3321
3364
  loading: false,
@@ -3447,7 +3490,7 @@ var useRuntimeAuth = () => {
3447
3490
  }
3448
3491
  );
3449
3492
  const payload = await readJsonPayload(response);
3450
- if (!response.ok || payload?.code >= 400) {
3493
+ if (isRuntimeEnvelopeFailure(response, payload)) {
3451
3494
  throw createRuntimeHttpError(
3452
3495
  response,
3453
3496
  payload,
@@ -3479,6 +3522,19 @@ var buildServiceUrl2 = (servicePrefix, path) => {
3479
3522
  const suffix = path.startsWith("/") ? path : `/${path}`;
3480
3523
  return `${prefix}${suffix}`;
3481
3524
  };
3525
+ var createAuthorizedFetch = (baseFetch, accessToken) => {
3526
+ if (!accessToken) return baseFetch;
3527
+ return ((input, init = {}) => {
3528
+ const headers = new Headers(init.headers || {});
3529
+ if (!headers.has("authorization")) {
3530
+ headers.set("authorization", `Bearer ${accessToken}`);
3531
+ }
3532
+ return baseFetch(input, {
3533
+ ...init,
3534
+ headers
3535
+ });
3536
+ });
3537
+ };
3482
3538
  var readJsonPayload = async (response) => {
3483
3539
  try {
3484
3540
  return await response.json();
@@ -3524,6 +3580,15 @@ var classifyRuntimeError = (status, code) => {
3524
3580
  const normalizedCode = typeof code === "string" ? Number(code) : code;
3525
3581
  if (status === 401 || normalizedCode === 401) return "unauthenticated";
3526
3582
  if (status === 403 || normalizedCode === 403) return "forbidden";
3583
+ if (typeof code === "string") {
3584
+ const normalizedText = code.toUpperCase();
3585
+ if (normalizedText.includes("DENIED") || normalizedText.includes("FORBIDDEN")) {
3586
+ return "forbidden";
3587
+ }
3588
+ if (normalizedText.includes("UNAUTH") || normalizedText.includes("LOGIN")) {
3589
+ return "unauthenticated";
3590
+ }
3591
+ }
3527
3592
  if (!status && !normalizedCode) return "network";
3528
3593
  return "unknown";
3529
3594
  };
@@ -3579,6 +3644,20 @@ var getRecordValue2 = (value, key) => {
3579
3644
  if (!value || typeof value !== "object") return void 0;
3580
3645
  return value[key];
3581
3646
  };
3647
+ var isSuccessCode3 = (code) => {
3648
+ if (code === void 0 || code === null || code === "") return true;
3649
+ const normalized = Number(code);
3650
+ return Number.isFinite(normalized) ? normalized === 0 || normalized >= 200 && normalized < 300 : false;
3651
+ };
3652
+ var isRuntimeEnvelopeFailure = (response, payload) => {
3653
+ const code = getRecordValue2(payload, "code");
3654
+ const success = getRecordValue2(payload, "success");
3655
+ return !response.ok || success === false || !isSuccessCode3(code);
3656
+ };
3657
+ var isServerErrorCode = (code) => {
3658
+ const normalized = Number(code);
3659
+ return Number.isFinite(normalized) && normalized >= 500;
3660
+ };
3582
3661
  var getRecordString = (value, key) => {
3583
3662
  const result = getRecordValue2(value, key);
3584
3663
  return typeof result === "string" ? result : void 0;
@@ -3642,7 +3721,8 @@ var createPublicAccessClient = ({
3642
3721
  );
3643
3722
  const payload = await readPayload2(response);
3644
3723
  const code = getRecordValue3(payload, "code");
3645
- if (!response.ok || typeof code === "number" && code >= 400) {
3724
+ const success = getRecordValue3(payload, "success");
3725
+ if (!response.ok || success === false || !isSuccessCode4(code)) {
3646
3726
  throw new PublicAccessClientError(
3647
3727
  String(
3648
3728
  getRecordValue3(payload, "message") || `Public access session failed: ${response.status}`
@@ -3680,6 +3760,11 @@ var getRecordValue3 = (value, key) => {
3680
3760
  if (!value || typeof value !== "object") return void 0;
3681
3761
  return value[key];
3682
3762
  };
3763
+ var isSuccessCode4 = (code) => {
3764
+ if (code === void 0 || code === null || code === "") return true;
3765
+ const normalized = Number(code);
3766
+ return Number.isFinite(normalized) ? normalized === 0 || normalized >= 200 && normalized < 300 : false;
3767
+ };
3683
3768
  var getCurrentPathname = () => typeof window === "undefined" ? void 0 : window.location.pathname;
3684
3769
  var getCurrentDomain = () => typeof window === "undefined" ? void 0 : window.location.host;
3685
3770
  var getCurrentUserAgent = () => typeof navigator === "undefined" ? void 0 : navigator.userAgent;
@@ -3710,7 +3795,8 @@ var usePublicAccess = (options = {}) => {
3710
3795
  appType: runtimeAppType,
3711
3796
  servicePrefix: runtimeServicePrefix,
3712
3797
  fetchImpl: runtimeFetchImpl,
3713
- reload: reloadRuntime
3798
+ reload: reloadRuntime,
3799
+ setAccessToken
3714
3800
  } = runtime;
3715
3801
  const {
3716
3802
  appType = runtimeAppType,
@@ -3744,7 +3830,8 @@ var usePublicAccess = (options = {}) => {
3744
3830
  path: input.path || stableSessionInput.path || readPathFromLocation()
3745
3831
  });
3746
3832
  setSession(data);
3747
- await reloadRuntime();
3833
+ setAccessToken(data.accessToken);
3834
+ await reloadRuntime({ accessToken: data.accessToken });
3748
3835
  setLoading(false);
3749
3836
  return data;
3750
3837
  } catch (caught) {
@@ -3757,7 +3844,7 @@ var usePublicAccess = (options = {}) => {
3757
3844
  throw nextError;
3758
3845
  }
3759
3846
  },
3760
- [client, reloadRuntime, stableSessionInput]
3847
+ [client, reloadRuntime, setAccessToken, stableSessionInput]
3761
3848
  );
3762
3849
  (0, import_react9.useEffect)(() => {
3763
3850
  if (!autoStart) return;