openxiangda 1.0.88 → 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.
- package/README.md +2 -0
- package/openxiangda-skills/SKILL.md +2 -0
- package/openxiangda-skills/references/architecture-design.md +1 -0
- package/openxiangda-skills/references/openxiangda-api.md +2 -0
- package/openxiangda-skills/references/pages/page-sdk.md +2 -0
- package/openxiangda-skills/references/resource-manifest-cheatsheet.md +2 -0
- package/package.json +1 -1
- package/packages/sdk/dist/components/index.cjs +13 -2
- package/packages/sdk/dist/components/index.cjs.map +1 -1
- package/packages/sdk/dist/components/index.mjs +13 -2
- package/packages/sdk/dist/components/index.mjs.map +1 -1
- package/packages/sdk/dist/runtime/index.cjs +102 -21
- package/packages/sdk/dist/runtime/index.cjs.map +1 -1
- package/packages/sdk/dist/runtime/index.mjs +102 -21
- package/packages/sdk/dist/runtime/index.mjs.map +1 -1
- package/packages/sdk/dist/runtime/react.cjs +70 -11
- package/packages/sdk/dist/runtime/react.cjs.map +1 -1
- package/packages/sdk/dist/runtime/react.d.mts +1 -1
- package/packages/sdk/dist/runtime/react.d.ts +1 -1
- package/packages/sdk/dist/runtime/react.mjs +70 -11
- package/packages/sdk/dist/runtime/react.mjs.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/runtime/react/index.ts","../../src/runtime/react/createReactPage.tsx","../../../../node_modules/dayjs/esm/constant.js","../../../../node_modules/dayjs/esm/locale/en.js","../../../../node_modules/dayjs/esm/utils.js","../../../../node_modules/dayjs/esm/index.js","../../../../node_modules/dayjs/esm/locale/zh-cn.js","../../src/runtime/react/provider.tsx","../../src/runtime/react/store.ts","../../src/runtime/core/client.ts","../../src/styles/antd-theme.ts","../../src/runtime/react/hooks/useCurrentUser.ts","../../src/runtime/react/hooks/usePageContext.ts","../../src/runtime/react/hooks/useDataSource.ts","../../src/runtime/react/hooks/usePageSdk.ts","../../src/runtime/react/hooks/useFormViewPermissions.ts","../../src/runtime/react/hooks/useMessage.ts","../../src/runtime/react/hooks/useModal.ts","../../src/runtime/react/hooks/useNavigation.ts","../../src/runtime/react/hooks/usePageProps.ts","../../src/runtime/react/hooks/usePageRoute.ts","../../src/runtime/react/openxiangdaProvider.tsx","../../src/runtime/core/fetch.ts","../../src/runtime/react/auth.tsx","../../src/runtime/core/auth.ts","../../src/runtime/react/publicAccess.tsx","../../src/runtime/core/publicAccess.ts"],"sourcesContent":["export { createReactPage } from \"./createReactPage\"\nexport { PageProvider } from \"./provider\"\nexport { useCurrentUser } from \"./hooks/useCurrentUser\"\nexport { useDataSource } from \"./hooks/useDataSource\"\nexport { useFormViewPermissions } from \"./hooks/useFormViewPermissions\"\nexport { useMessage } from \"./hooks/useMessage\"\nexport { useModal } from \"./hooks/useModal\"\nexport { useNavigation } from \"./hooks/useNavigation\"\nexport { usePageContext } from \"./hooks/usePageContext\"\nexport { usePageProps } from \"./hooks/usePageProps\"\nexport { usePageRoute } from \"./hooks/usePageRoute\"\nexport { usePageSdk } from \"./hooks/usePageSdk\"\nexport {\n OpenXiangdaProvider,\n PermissionBoundary,\n LoginPage,\n useAppMenus,\n useAuth,\n useCanAccessRoute,\n useLoginMethods,\n useOpenXiangda,\n usePermission,\n useRuntimeAuth,\n useRuntimeBootstrap,\n} from \"./openxiangdaProvider\"\nexport type {\n OpenXiangdaProviderProps,\n LoginPageProps,\n PermissionBoundaryFallback,\n PermissionBoundaryFallbackState,\n PermissionBoundaryProps,\n RouteAccessResult,\n RuntimeBootstrap,\n RuntimeErrorSnapshot,\n RuntimeErrorType,\n RuntimeMenuItem,\n RuntimePagePermissions,\n RuntimeRedirectLoginOptions,\n RuntimeRequestError,\n RuntimeRequestState,\n RuntimeResolveLoginOptions,\n RuntimeLogoutOptions,\n UseCanAccessRouteInput,\n UseAuthOptions,\n UseLoginMethodsState,\n} from \"./openxiangdaProvider\"\nexport { PublicAccessGate, usePublicAccess } from \"./publicAccess\"\nexport type {\n PublicAccessGateProps,\n UsePublicAccessOptions,\n UsePublicAccessState,\n} from \"./publicAccess\"\nexport * from \"../core\"\n","import { StyleProvider } from \"@ant-design/cssinjs\";\nimport { App as AntdApp, ConfigProvider, message } from \"antd\";\nimport zhCN from \"antd/locale/zh_CN.js\";\nimport dayjs from \"dayjs\";\nimport \"dayjs/locale/zh-cn.js\";\nimport React from \"react\";\nimport { createRoot } from \"react-dom/client\";\n\nimport { PageProvider } from \"./provider\";\nimport { antdTheme, legacyAntdTheme } from \"../../styles/antd-theme\";\n\nimport type { PageContext } from \"../core/types\";\n\ndayjs.locale(\"zh-cn\");\n\ntype RootLike = {\n render: (node: React.ReactNode) => void;\n unmount: () => void;\n};\n\nconst NAMESPACE_ROOT_CLASS = \"sy-app-workspace\";\nconst RUNTIME_PORTAL_ATTR = \"data-sy-runtime-portal\";\nconst PORTAL_CONTAINER_STACK_GLOBAL = \"__OPENXIANGDA_PORTAL_CONTAINER_STACK__\";\nconst PORTAL_CONTAINER_RESOLVER_GLOBAL = \"__OPENXIANGDA_GET_PORTAL_CONTAINER__\";\nconst MESSAGE_PROXY_GLOBAL = \"__OPENXIANGDA_ANTD_MESSAGE_PROXY__\";\nconst MESSAGE_METHODS = [\n \"open\",\n \"success\",\n \"info\",\n \"warning\",\n \"error\",\n \"loading\",\n \"destroy\",\n] as const;\n\ntype RuntimePortalHandle = {\n container: HTMLElement | null;\n release: () => void;\n};\n\ntype RuntimeCssIsolation = \"none\" | \"namespace\" | \"shadow\";\n\ntype MessageMethod = (typeof MESSAGE_METHODS)[number];\n\ntype AntdMessageProxyState = {\n apiStack: Array<Record<string, unknown>>;\n installed: boolean;\n originalMethods: Partial<Record<MessageMethod, (...args: unknown[]) => unknown>>;\n};\n\nconst createRuntimeRoot = (el: HTMLElement): RootLike => {\n return createRoot(el);\n};\n\nconst normalizeCssIsolation = (value: unknown): RuntimeCssIsolation => {\n if (value === \"namespace\" || value === \"shadow\") return value;\n return \"none\";\n};\n\nconst usesLegacyCssIsolation = (cssIsolation: RuntimeCssIsolation) =>\n cssIsolation === \"namespace\" || cssIsolation === \"shadow\";\n\nconst getRuntimeCssIsolation = (context: PageContext): RuntimeCssIsolation =>\n normalizeCssIsolation(context.page?.capabilities?.cssIsolation);\n\nconst getAntdRuntimeOptions = (cssIsolation: RuntimeCssIsolation) => {\n const legacy = usesLegacyCssIsolation(cssIsolation);\n return {\n prefixCls: legacy ? \"sy-ant\" : \"ant\",\n iconPrefixCls: legacy ? \"sy-anticon\" : \"anticon\",\n messagePrefixCls: legacy ? \"sy-ant-message\" : \"ant-message\",\n theme: legacy ? legacyAntdTheme : antdTheme,\n };\n};\n\nconst isShadowRoot = (rootNode: Node | null | undefined): rootNode is ShadowRoot =>\n typeof ShadowRoot !== \"undefined\" && rootNode instanceof ShadowRoot;\n\nconst getStyleContainer = (el: HTMLElement): HTMLElement | ShadowRoot => {\n const rootNode = el.getRootNode?.();\n if (isShadowRoot(rootNode)) {\n return rootNode;\n }\n return document.head;\n};\n\nconst getRuntimeRoot = (el: HTMLElement, triggerNode?: HTMLElement) => {\n const rootNode = el.getRootNode?.();\n if (isShadowRoot(rootNode)) return el;\n const triggerRoot = triggerNode?.closest?.<HTMLElement>(\n `.${NAMESPACE_ROOT_CLASS}`,\n );\n return (\n triggerRoot ||\n el.closest<HTMLElement>(`.${NAMESPACE_ROOT_CLASS}`) ||\n el.querySelector<HTMLElement>(`.${NAMESPACE_ROOT_CLASS}`) ||\n el\n );\n};\n\nconst getRuntimeOverlayContainer = (\n el: HTMLElement,\n portalContainer: HTMLElement | null,\n): {\n getPopupContainer: (triggerNode?: HTMLElement) => HTMLElement | ShadowRoot;\n getTargetContainer: () => HTMLElement | ShadowRoot;\n} => {\n const getOverlayRoot = (triggerNode?: HTMLElement) => {\n if (portalContainer?.isConnected) return portalContainer;\n return getRuntimeRoot(el, triggerNode);\n };\n\n return {\n getPopupContainer: (triggerNode?: HTMLElement) => {\n return getOverlayRoot(triggerNode);\n },\n getTargetContainer: () => getRuntimeRoot(el),\n };\n};\n\nconst createAntdConfig = (\n overlayContainer: ReturnType<typeof getRuntimeOverlayContainer>,\n cssIsolation: RuntimeCssIsolation,\n) => {\n const antdOptions = getAntdRuntimeOptions(cssIsolation);\n return {\n locale: zhCN,\n prefixCls: antdOptions.prefixCls,\n iconPrefixCls: antdOptions.iconPrefixCls,\n theme: antdOptions.theme,\n ...(usesLegacyCssIsolation(cssIsolation)\n ? {\n getPopupContainer: overlayContainer.getPopupContainer,\n getTargetContainer: overlayContainer.getTargetContainer,\n }\n : {}),\n };\n};\n\nconst createPortalContainer = (el: HTMLElement) => {\n const rootNode = el.getRootNode?.();\n const parent = isShadowRoot(rootNode)\n ? rootNode\n : el.ownerDocument?.body || document.body;\n const portalContainer = el.ownerDocument.createElement(\"div\");\n portalContainer.setAttribute(RUNTIME_PORTAL_ATTR, \"\");\n portalContainer.classList.add(NAMESPACE_ROOT_CLASS);\n parent.appendChild(portalContainer);\n return portalContainer;\n};\n\nconst getAntdMessageProxyState = (): AntdMessageProxyState => {\n const globalScope = globalThis as typeof globalThis & {\n [MESSAGE_PROXY_GLOBAL]?: AntdMessageProxyState;\n };\n if (!globalScope[MESSAGE_PROXY_GLOBAL]) {\n globalScope[MESSAGE_PROXY_GLOBAL] = {\n apiStack: [],\n installed: false,\n originalMethods: {},\n };\n }\n return globalScope[MESSAGE_PROXY_GLOBAL];\n};\n\nconst installAntdMessageProxy = () => {\n const state = getAntdMessageProxyState();\n if (state.installed) return state;\n MESSAGE_METHODS.forEach((method) => {\n const originalMethod = (message as unknown as Record<string, unknown>)[method];\n if (typeof originalMethod !== \"function\") return;\n state.originalMethods[method] = originalMethod.bind(message) as (\n ...args: unknown[]\n ) => unknown;\n (message as unknown as Record<string, unknown>)[method] = (\n ...args: unknown[]\n ) => {\n const api = state.apiStack.at(-1);\n const apiMethod = api?.[method];\n if (typeof apiMethod === \"function\") {\n return apiMethod(...args);\n }\n return state.originalMethods[method]?.(...args);\n };\n });\n state.installed = true;\n return state;\n};\n\nconst registerAntdMessageApi = (api: Record<string, unknown>) => {\n const state = installAntdMessageProxy();\n state.apiStack.push(api);\n return () => {\n const position = state.apiStack.lastIndexOf(api);\n if (position >= 0) {\n state.apiStack.splice(position, 1);\n }\n };\n};\n\nconst installRuntimePortalContainer = (\n el: HTMLElement,\n cssIsolation: RuntimeCssIsolation,\n): RuntimePortalHandle => {\n const globalScope = globalThis as typeof globalThis & {\n [PORTAL_CONTAINER_STACK_GLOBAL]?: HTMLElement[];\n [PORTAL_CONTAINER_RESOLVER_GLOBAL]?: () => HTMLElement;\n };\n const portalContainer = usesLegacyCssIsolation(cssIsolation)\n ? createPortalContainer(el)\n : null;\n const stack = Array.isArray(globalScope[PORTAL_CONTAINER_STACK_GLOBAL])\n ? globalScope[PORTAL_CONTAINER_STACK_GLOBAL]\n : [];\n const stackTarget = portalContainer ?? el.ownerDocument?.body ?? document.body;\n stack.push(stackTarget);\n globalScope[PORTAL_CONTAINER_STACK_GLOBAL] = stack;\n globalScope[PORTAL_CONTAINER_RESOLVER_GLOBAL] = () => {\n for (let index = stack.length - 1; index >= 0; index -= 1) {\n const candidate = stack[index];\n if (candidate?.isConnected) {\n return candidate;\n }\n }\n return (\n document.querySelector<HTMLElement>(`[${RUNTIME_PORTAL_ATTR}]`) ||\n document.querySelector<HTMLElement>(`.${NAMESPACE_ROOT_CLASS}`) ||\n document.body\n );\n };\n\n return {\n container: portalContainer,\n release: () => {\n const position = stack.lastIndexOf(stackTarget);\n if (position >= 0) {\n stack.splice(position, 1);\n }\n portalContainer?.remove();\n },\n };\n};\n\nconst installAntdStaticHolder = (\n el: HTMLElement,\n portalContainer: HTMLElement | null,\n cssIsolation: RuntimeCssIsolation,\n) => {\n installAntdMessageProxy();\n const antdOptions = getAntdRuntimeOptions(cssIsolation);\n const getMessageContainer = () => {\n if (portalContainer?.isConnected) return portalContainer;\n return usesLegacyCssIsolation(cssIsolation) ? getRuntimeRoot(el) : document.body;\n };\n\n ConfigProvider.config({\n prefixCls: antdOptions.prefixCls,\n iconPrefixCls: antdOptions.iconPrefixCls,\n theme: antdOptions.theme,\n holderRender: (children) => {\n if (!el.isConnected) {\n return (\n <ConfigProvider\n locale={zhCN}\n prefixCls={antdOptions.prefixCls}\n iconPrefixCls={antdOptions.iconPrefixCls}\n theme={antdOptions.theme}\n >\n {children}\n </ConfigProvider>\n );\n }\n const overlayContainer = getRuntimeOverlayContainer(el, portalContainer);\n return (\n <StyleProvider hashPriority=\"high\" container={getStyleContainer(el)}>\n <ConfigProvider {...createAntdConfig(overlayContainer, cssIsolation)}>\n {children}\n </ConfigProvider>\n </StyleProvider>\n );\n },\n });\n message.config({\n prefixCls: antdOptions.messagePrefixCls,\n getContainer: getMessageContainer,\n });\n};\n\nconst RuntimeMessageBridge = ({ children }: { children: React.ReactNode }) => {\n const appContext = AntdApp.useApp();\n React.useLayoutEffect(() => {\n return registerAntdMessageApi(\n appContext.message as unknown as Record<string, unknown>,\n );\n }, [appContext.message]);\n return <>{children}</>;\n};\n\nexport const createReactPage = (\n AppComponent: React.ComponentType,\n): {\n mount: (el: HTMLElement, context: PageContext) => void;\n update: (el: HTMLElement, context: PageContext) => void;\n unmount: () => void;\n} => {\n let root: RootLike | null = null;\n let currentContainer: HTMLElement | null = null;\n let releasePortalContainer: (() => void) | null = null;\n let portalContainer: HTMLElement | null = null;\n let currentCssIsolation: RuntimeCssIsolation | null = null;\n\n const render = (el: HTMLElement, context: PageContext) => {\n const cssIsolation = getRuntimeCssIsolation(context);\n if (usesLegacyCssIsolation(cssIsolation)) {\n el.classList.add(NAMESPACE_ROOT_CLASS);\n } else {\n el.classList.remove(NAMESPACE_ROOT_CLASS);\n }\n if (\n !root ||\n currentContainer !== el ||\n currentCssIsolation !== cssIsolation ||\n (usesLegacyCssIsolation(cssIsolation) && !portalContainer?.isConnected)\n ) {\n root?.unmount();\n releasePortalContainer?.();\n root = createRuntimeRoot(el);\n currentContainer = el;\n currentCssIsolation = cssIsolation;\n const portalHandle = installRuntimePortalContainer(el, cssIsolation);\n portalContainer = portalHandle.container;\n releasePortalContainer = portalHandle.release;\n }\n const overlayContainer = getRuntimeOverlayContainer(el, portalContainer);\n installAntdStaticHolder(el, portalContainer, cssIsolation);\n const antdConfig = createAntdConfig(overlayContainer, cssIsolation);\n\n root.render(\n <StyleProvider hashPriority=\"high\" container={getStyleContainer(el)}>\n <ConfigProvider {...antdConfig}>\n <AntdApp>\n <RuntimeMessageBridge>\n <PageProvider context={context}>\n <AppComponent />\n </PageProvider>\n </RuntimeMessageBridge>\n </AntdApp>\n </ConfigProvider>\n </StyleProvider>,\n );\n };\n\n return {\n mount: (el, context) => {\n render(el, context);\n },\n update: (el, context) => {\n render(el, context);\n },\n unmount: () => {\n root?.unmount();\n releasePortalContainer?.();\n root = null;\n currentContainer = null;\n releasePortalContainer = null;\n portalContainer = null;\n currentCssIsolation = null;\n },\n };\n};\n","export var SECONDS_A_MINUTE = 60;\nexport var SECONDS_A_HOUR = SECONDS_A_MINUTE * 60;\nexport var SECONDS_A_DAY = SECONDS_A_HOUR * 24;\nexport var SECONDS_A_WEEK = SECONDS_A_DAY * 7;\nexport var MILLISECONDS_A_SECOND = 1e3;\nexport var MILLISECONDS_A_MINUTE = SECONDS_A_MINUTE * MILLISECONDS_A_SECOND;\nexport var MILLISECONDS_A_HOUR = SECONDS_A_HOUR * MILLISECONDS_A_SECOND;\nexport var MILLISECONDS_A_DAY = SECONDS_A_DAY * MILLISECONDS_A_SECOND;\nexport var MILLISECONDS_A_WEEK = SECONDS_A_WEEK * MILLISECONDS_A_SECOND; // English locales\n\nexport var MS = 'millisecond';\nexport var S = 'second';\nexport var MIN = 'minute';\nexport var H = 'hour';\nexport var D = 'day';\nexport var W = 'week';\nexport var M = 'month';\nexport var Q = 'quarter';\nexport var Y = 'year';\nexport var DATE = 'date';\nexport var FORMAT_DEFAULT = 'YYYY-MM-DDTHH:mm:ssZ';\nexport var INVALID_DATE_STRING = 'Invalid Date'; // regex\n\nexport var REGEX_PARSE = /^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/;\nexport var REGEX_FORMAT = /\\[([^\\]]+)]|YYYY|YY|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g;","// English [en]\n// We don't need weekdaysShort, weekdaysMin, monthsShort in en.js locale\nexport default {\n name: 'en',\n weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n ordinal: function ordinal(n) {\n var s = ['th', 'st', 'nd', 'rd'];\n var v = n % 100;\n return \"[\" + n + (s[(v - 20) % 10] || s[v] || s[0]) + \"]\";\n }\n};","import * as C from './constant';\n\nvar padStart = function padStart(string, length, pad) {\n var s = String(string);\n if (!s || s.length >= length) return string;\n return \"\" + Array(length + 1 - s.length).join(pad) + string;\n};\n\nvar padZoneStr = function padZoneStr(instance) {\n var negMinutes = -instance.utcOffset();\n var minutes = Math.abs(negMinutes);\n var hourOffset = Math.floor(minutes / 60);\n var minuteOffset = minutes % 60;\n return \"\" + (negMinutes <= 0 ? '+' : '-') + padStart(hourOffset, 2, '0') + \":\" + padStart(minuteOffset, 2, '0');\n};\n\nvar monthDiff = function monthDiff(a, b) {\n // function from moment.js in order to keep the same result\n if (a.date() < b.date()) return -monthDiff(b, a);\n var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month());\n var anchor = a.clone().add(wholeMonthDiff, C.M);\n var c = b - anchor < 0;\n var anchor2 = a.clone().add(wholeMonthDiff + (c ? -1 : 1), C.M);\n return +(-(wholeMonthDiff + (b - anchor) / (c ? anchor - anchor2 : anchor2 - anchor)) || 0);\n};\n\nvar absFloor = function absFloor(n) {\n return n < 0 ? Math.ceil(n) || 0 : Math.floor(n);\n};\n\nvar prettyUnit = function prettyUnit(u) {\n var special = {\n M: C.M,\n y: C.Y,\n w: C.W,\n d: C.D,\n D: C.DATE,\n h: C.H,\n m: C.MIN,\n s: C.S,\n ms: C.MS,\n Q: C.Q\n };\n return special[u] || String(u || '').toLowerCase().replace(/s$/, '');\n};\n\nvar isUndefined = function isUndefined(s) {\n return s === undefined;\n};\n\nexport default {\n s: padStart,\n z: padZoneStr,\n m: monthDiff,\n a: absFloor,\n p: prettyUnit,\n u: isUndefined\n};","import * as C from './constant';\nimport en from './locale/en';\nimport U from './utils';\nvar L = 'en'; // global locale\n\nvar Ls = {}; // global loaded locale\n\nLs[L] = en;\nvar IS_DAYJS = '$isDayjsObject'; // eslint-disable-next-line no-use-before-define\n\nvar isDayjs = function isDayjs(d) {\n return d instanceof Dayjs || !!(d && d[IS_DAYJS]);\n};\n\nvar parseLocale = function parseLocale(preset, object, isLocal) {\n var l;\n if (!preset) return L;\n\n if (typeof preset === 'string') {\n var presetLower = preset.toLowerCase();\n\n if (Ls[presetLower]) {\n l = presetLower;\n }\n\n if (object) {\n Ls[presetLower] = object;\n l = presetLower;\n }\n\n var presetSplit = preset.split('-');\n\n if (!l && presetSplit.length > 1) {\n return parseLocale(presetSplit[0]);\n }\n } else {\n var name = preset.name;\n Ls[name] = preset;\n l = name;\n }\n\n if (!isLocal && l) L = l;\n return l || !isLocal && L;\n};\n\nvar dayjs = function dayjs(date, c) {\n if (isDayjs(date)) {\n return date.clone();\n } // eslint-disable-next-line no-nested-ternary\n\n\n var cfg = typeof c === 'object' ? c : {};\n cfg.date = date;\n cfg.args = arguments; // eslint-disable-line prefer-rest-params\n\n return new Dayjs(cfg); // eslint-disable-line no-use-before-define\n};\n\nvar wrapper = function wrapper(date, instance) {\n return dayjs(date, {\n locale: instance.$L,\n utc: instance.$u,\n x: instance.$x,\n $offset: instance.$offset // todo: refactor; do not use this.$offset in you code\n\n });\n};\n\nvar Utils = U; // for plugin use\n\nUtils.l = parseLocale;\nUtils.i = isDayjs;\nUtils.w = wrapper;\n\nvar parseDate = function parseDate(cfg) {\n var date = cfg.date,\n utc = cfg.utc;\n if (date === null) return new Date(NaN); // null is invalid\n\n if (Utils.u(date)) return new Date(); // today\n\n if (date instanceof Date) return new Date(date);\n\n if (typeof date === 'string' && !/Z$/i.test(date)) {\n var d = date.match(C.REGEX_PARSE);\n\n if (d) {\n var m = d[2] - 1 || 0;\n var ms = (d[7] || '0').substring(0, 3);\n\n if (utc) {\n return new Date(Date.UTC(d[1], m, d[3] || 1, d[4] || 0, d[5] || 0, d[6] || 0, ms));\n }\n\n return new Date(d[1], m, d[3] || 1, d[4] || 0, d[5] || 0, d[6] || 0, ms);\n }\n }\n\n return new Date(date); // everything else\n};\n\nvar Dayjs = /*#__PURE__*/function () {\n function Dayjs(cfg) {\n this.$L = parseLocale(cfg.locale, null, true);\n this.parse(cfg); // for plugin\n\n this.$x = this.$x || cfg.x || {};\n this[IS_DAYJS] = true;\n }\n\n var _proto = Dayjs.prototype;\n\n _proto.parse = function parse(cfg) {\n this.$d = parseDate(cfg);\n this.init();\n };\n\n _proto.init = function init() {\n var $d = this.$d;\n this.$y = $d.getFullYear();\n this.$M = $d.getMonth();\n this.$D = $d.getDate();\n this.$W = $d.getDay();\n this.$H = $d.getHours();\n this.$m = $d.getMinutes();\n this.$s = $d.getSeconds();\n this.$ms = $d.getMilliseconds();\n } // eslint-disable-next-line class-methods-use-this\n ;\n\n _proto.$utils = function $utils() {\n return Utils;\n };\n\n _proto.isValid = function isValid() {\n return !(this.$d.toString() === C.INVALID_DATE_STRING);\n };\n\n _proto.isSame = function isSame(that, units) {\n var other = dayjs(that);\n return this.startOf(units) <= other && other <= this.endOf(units);\n };\n\n _proto.isAfter = function isAfter(that, units) {\n return dayjs(that) < this.startOf(units);\n };\n\n _proto.isBefore = function isBefore(that, units) {\n return this.endOf(units) < dayjs(that);\n };\n\n _proto.$g = function $g(input, get, set) {\n if (Utils.u(input)) return this[get];\n return this.set(set, input);\n };\n\n _proto.unix = function unix() {\n return Math.floor(this.valueOf() / 1000);\n };\n\n _proto.valueOf = function valueOf() {\n // timezone(hour) * 60 * 60 * 1000 => ms\n return this.$d.getTime();\n };\n\n _proto.startOf = function startOf(units, _startOf) {\n var _this = this;\n\n // startOf -> endOf\n var isStartOf = !Utils.u(_startOf) ? _startOf : true;\n var unit = Utils.p(units);\n\n var instanceFactory = function instanceFactory(d, m) {\n var ins = Utils.w(_this.$u ? Date.UTC(_this.$y, m, d) : new Date(_this.$y, m, d), _this);\n return isStartOf ? ins : ins.endOf(C.D);\n };\n\n var instanceFactorySet = function instanceFactorySet(method, slice) {\n var argumentStart = [0, 0, 0, 0];\n var argumentEnd = [23, 59, 59, 999];\n return Utils.w(_this.toDate()[method].apply( // eslint-disable-line prefer-spread\n _this.toDate('s'), (isStartOf ? argumentStart : argumentEnd).slice(slice)), _this);\n };\n\n var $W = this.$W,\n $M = this.$M,\n $D = this.$D;\n var utcPad = \"set\" + (this.$u ? 'UTC' : '');\n\n switch (unit) {\n case C.Y:\n return isStartOf ? instanceFactory(1, 0) : instanceFactory(31, 11);\n\n case C.M:\n return isStartOf ? instanceFactory(1, $M) : instanceFactory(0, $M + 1);\n\n case C.W:\n {\n var weekStart = this.$locale().weekStart || 0;\n var gap = ($W < weekStart ? $W + 7 : $W) - weekStart;\n return instanceFactory(isStartOf ? $D - gap : $D + (6 - gap), $M);\n }\n\n case C.D:\n case C.DATE:\n return instanceFactorySet(utcPad + \"Hours\", 0);\n\n case C.H:\n return instanceFactorySet(utcPad + \"Minutes\", 1);\n\n case C.MIN:\n return instanceFactorySet(utcPad + \"Seconds\", 2);\n\n case C.S:\n return instanceFactorySet(utcPad + \"Milliseconds\", 3);\n\n default:\n return this.clone();\n }\n };\n\n _proto.endOf = function endOf(arg) {\n return this.startOf(arg, false);\n };\n\n _proto.$set = function $set(units, _int) {\n var _C$D$C$DATE$C$M$C$Y$C;\n\n // private set\n var unit = Utils.p(units);\n var utcPad = \"set\" + (this.$u ? 'UTC' : '');\n var name = (_C$D$C$DATE$C$M$C$Y$C = {}, _C$D$C$DATE$C$M$C$Y$C[C.D] = utcPad + \"Date\", _C$D$C$DATE$C$M$C$Y$C[C.DATE] = utcPad + \"Date\", _C$D$C$DATE$C$M$C$Y$C[C.M] = utcPad + \"Month\", _C$D$C$DATE$C$M$C$Y$C[C.Y] = utcPad + \"FullYear\", _C$D$C$DATE$C$M$C$Y$C[C.H] = utcPad + \"Hours\", _C$D$C$DATE$C$M$C$Y$C[C.MIN] = utcPad + \"Minutes\", _C$D$C$DATE$C$M$C$Y$C[C.S] = utcPad + \"Seconds\", _C$D$C$DATE$C$M$C$Y$C[C.MS] = utcPad + \"Milliseconds\", _C$D$C$DATE$C$M$C$Y$C)[unit];\n var arg = unit === C.D ? this.$D + (_int - this.$W) : _int;\n\n if (unit === C.M || unit === C.Y) {\n // clone is for badMutable plugin\n var date = this.clone().set(C.DATE, 1);\n date.$d[name](arg);\n date.init();\n this.$d = date.set(C.DATE, Math.min(this.$D, date.daysInMonth())).$d;\n } else if (name) this.$d[name](arg);\n\n this.init();\n return this;\n };\n\n _proto.set = function set(string, _int2) {\n return this.clone().$set(string, _int2);\n };\n\n _proto.get = function get(unit) {\n return this[Utils.p(unit)]();\n };\n\n _proto.add = function add(number, units) {\n var _this2 = this,\n _C$MIN$C$H$C$S$unit;\n\n number = Number(number); // eslint-disable-line no-param-reassign\n\n var unit = Utils.p(units);\n\n var instanceFactorySet = function instanceFactorySet(n) {\n var d = dayjs(_this2);\n return Utils.w(d.date(d.date() + Math.round(n * number)), _this2);\n };\n\n if (unit === C.M) {\n return this.set(C.M, this.$M + number);\n }\n\n if (unit === C.Y) {\n return this.set(C.Y, this.$y + number);\n }\n\n if (unit === C.D) {\n return instanceFactorySet(1);\n }\n\n if (unit === C.W) {\n return instanceFactorySet(7);\n }\n\n var step = (_C$MIN$C$H$C$S$unit = {}, _C$MIN$C$H$C$S$unit[C.MIN] = C.MILLISECONDS_A_MINUTE, _C$MIN$C$H$C$S$unit[C.H] = C.MILLISECONDS_A_HOUR, _C$MIN$C$H$C$S$unit[C.S] = C.MILLISECONDS_A_SECOND, _C$MIN$C$H$C$S$unit)[unit] || 1; // ms\n\n var nextTimeStamp = this.$d.getTime() + number * step;\n return Utils.w(nextTimeStamp, this);\n };\n\n _proto.subtract = function subtract(number, string) {\n return this.add(number * -1, string);\n };\n\n _proto.format = function format(formatStr) {\n var _this3 = this;\n\n var locale = this.$locale();\n if (!this.isValid()) return locale.invalidDate || C.INVALID_DATE_STRING;\n var str = formatStr || C.FORMAT_DEFAULT;\n var zoneStr = Utils.z(this);\n var $H = this.$H,\n $m = this.$m,\n $M = this.$M;\n var weekdays = locale.weekdays,\n months = locale.months,\n meridiem = locale.meridiem;\n\n var getShort = function getShort(arr, index, full, length) {\n return arr && (arr[index] || arr(_this3, str)) || full[index].slice(0, length);\n };\n\n var get$H = function get$H(num) {\n return Utils.s($H % 12 || 12, num, '0');\n };\n\n var meridiemFunc = meridiem || function (hour, minute, isLowercase) {\n var m = hour < 12 ? 'AM' : 'PM';\n return isLowercase ? m.toLowerCase() : m;\n };\n\n var matches = function matches(match) {\n switch (match) {\n case 'YY':\n return String(_this3.$y).slice(-2);\n\n case 'YYYY':\n return Utils.s(_this3.$y, 4, '0');\n\n case 'M':\n return $M + 1;\n\n case 'MM':\n return Utils.s($M + 1, 2, '0');\n\n case 'MMM':\n return getShort(locale.monthsShort, $M, months, 3);\n\n case 'MMMM':\n return getShort(months, $M);\n\n case 'D':\n return _this3.$D;\n\n case 'DD':\n return Utils.s(_this3.$D, 2, '0');\n\n case 'd':\n return String(_this3.$W);\n\n case 'dd':\n return getShort(locale.weekdaysMin, _this3.$W, weekdays, 2);\n\n case 'ddd':\n return getShort(locale.weekdaysShort, _this3.$W, weekdays, 3);\n\n case 'dddd':\n return weekdays[_this3.$W];\n\n case 'H':\n return String($H);\n\n case 'HH':\n return Utils.s($H, 2, '0');\n\n case 'h':\n return get$H(1);\n\n case 'hh':\n return get$H(2);\n\n case 'a':\n return meridiemFunc($H, $m, true);\n\n case 'A':\n return meridiemFunc($H, $m, false);\n\n case 'm':\n return String($m);\n\n case 'mm':\n return Utils.s($m, 2, '0');\n\n case 's':\n return String(_this3.$s);\n\n case 'ss':\n return Utils.s(_this3.$s, 2, '0');\n\n case 'SSS':\n return Utils.s(_this3.$ms, 3, '0');\n\n case 'Z':\n return zoneStr;\n // 'ZZ' logic below\n\n default:\n break;\n }\n\n return null;\n };\n\n return str.replace(C.REGEX_FORMAT, function (match, $1) {\n return $1 || matches(match) || zoneStr.replace(':', '');\n }); // 'ZZ'\n };\n\n _proto.utcOffset = function utcOffset() {\n // Because a bug at FF24, we're rounding the timezone offset around 15 minutes\n // https://github.com/moment/moment/pull/1871\n return -Math.round(this.$d.getTimezoneOffset() / 15) * 15;\n };\n\n _proto.diff = function diff(input, units, _float) {\n var _this4 = this;\n\n var unit = Utils.p(units);\n var that = dayjs(input);\n var zoneDelta = (that.utcOffset() - this.utcOffset()) * C.MILLISECONDS_A_MINUTE;\n var diff = this - that;\n\n var getMonth = function getMonth() {\n return Utils.m(_this4, that);\n };\n\n var result;\n\n switch (unit) {\n case C.Y:\n result = getMonth() / 12;\n break;\n\n case C.M:\n result = getMonth();\n break;\n\n case C.Q:\n result = getMonth() / 3;\n break;\n\n case C.W:\n result = (diff - zoneDelta) / C.MILLISECONDS_A_WEEK;\n break;\n\n case C.D:\n result = (diff - zoneDelta) / C.MILLISECONDS_A_DAY;\n break;\n\n case C.H:\n result = diff / C.MILLISECONDS_A_HOUR;\n break;\n\n case C.MIN:\n result = diff / C.MILLISECONDS_A_MINUTE;\n break;\n\n case C.S:\n result = diff / C.MILLISECONDS_A_SECOND;\n break;\n\n default:\n result = diff; // milliseconds\n\n break;\n }\n\n return _float ? result : Utils.a(result);\n };\n\n _proto.daysInMonth = function daysInMonth() {\n return this.endOf(C.M).$D;\n };\n\n _proto.$locale = function $locale() {\n // get locale object\n return Ls[this.$L];\n };\n\n _proto.locale = function locale(preset, object) {\n if (!preset) return this.$L;\n var that = this.clone();\n var nextLocaleName = parseLocale(preset, object, true);\n if (nextLocaleName) that.$L = nextLocaleName;\n return that;\n };\n\n _proto.clone = function clone() {\n return Utils.w(this.$d, this);\n };\n\n _proto.toDate = function toDate() {\n return new Date(this.valueOf());\n };\n\n _proto.toJSON = function toJSON() {\n return this.isValid() ? this.toISOString() : null;\n };\n\n _proto.toISOString = function toISOString() {\n // ie 8 return\n // new Dayjs(this.valueOf() + this.$d.getTimezoneOffset() * 60000)\n // .format('YYYY-MM-DDTHH:mm:ss.SSS[Z]')\n return this.$d.toISOString();\n };\n\n _proto.toString = function toString() {\n return this.$d.toUTCString();\n };\n\n return Dayjs;\n}();\n\nvar proto = Dayjs.prototype;\ndayjs.prototype = proto;\n[['$ms', C.MS], ['$s', C.S], ['$m', C.MIN], ['$H', C.H], ['$W', C.D], ['$M', C.M], ['$y', C.Y], ['$D', C.DATE]].forEach(function (g) {\n proto[g[1]] = function (input) {\n return this.$g(input, g[0], g[1]);\n };\n});\n\ndayjs.extend = function (plugin, option) {\n if (!plugin.$i) {\n // install plugin only once\n plugin(option, Dayjs, dayjs);\n plugin.$i = true;\n }\n\n return dayjs;\n};\n\ndayjs.locale = parseLocale;\ndayjs.isDayjs = isDayjs;\n\ndayjs.unix = function (timestamp) {\n return dayjs(timestamp * 1e3);\n};\n\ndayjs.en = Ls[L];\ndayjs.Ls = Ls;\ndayjs.p = {};\nexport default dayjs;","// Chinese (China) [zh-cn]\nimport dayjs from '../index';\nvar locale = {\n name: 'zh-cn',\n weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n weekdaysShort: '周日_周一_周二_周三_周四_周五_周六'.split('_'),\n weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n ordinal: function ordinal(number, period) {\n switch (period) {\n case 'W':\n return number + \"\\u5468\";\n\n default:\n return number + \"\\u65E5\";\n }\n },\n weekStart: 1,\n yearStart: 4,\n formats: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'YYYY/MM/DD',\n LL: 'YYYY年M月D日',\n LLL: 'YYYY年M月D日Ah点mm分',\n LLLL: 'YYYY年M月D日ddddAh点mm分',\n l: 'YYYY/M/D',\n ll: 'YYYY年M月D日',\n lll: 'YYYY年M月D日 HH:mm',\n llll: 'YYYY年M月D日dddd HH:mm'\n },\n relativeTime: {\n future: '%s内',\n past: '%s前',\n s: '几秒',\n m: '1 分钟',\n mm: '%d 分钟',\n h: '1 小时',\n hh: '%d 小时',\n d: '1 天',\n dd: '%d 天',\n M: '1 个月',\n MM: '%d 个月',\n y: '1 年',\n yy: '%d 年'\n },\n meridiem: function meridiem(hour, minute) {\n var hm = hour * 100 + minute;\n\n if (hm < 600) {\n return '凌晨';\n } else if (hm < 900) {\n return '早上';\n } else if (hm < 1100) {\n return '上午';\n } else if (hm < 1300) {\n return '中午';\n } else if (hm < 1800) {\n return '下午';\n }\n\n return '晚上';\n }\n};\ndayjs.locale(locale, null, true);\nexport default locale;","import React, { useMemo } from \"react\"\n\nimport { ReactPageContext } from \"./store\"\nimport { createPageSdk } from \"../core/client\"\n\nimport type { PageSdkStore } from \"./store\"\nimport type { PageContext } from \"../core/types\"\n\nexport interface PageProviderProps {\n context: PageContext\n children: React.ReactNode\n}\n\nexport const PageProvider: React.FC<PageProviderProps> = ({\n context,\n children,\n}) => {\n const value = useMemo<PageSdkStore>(\n () => ({\n context,\n sdk: createPageSdk(context),\n }),\n [context],\n )\n\n return (\n <ReactPageContext.Provider value={value}>\n {children}\n </ReactPageContext.Provider>\n )\n}\n","import { createContext, useContext } from \"react\"\n\nimport type { PageContext, PageSdk } from \"../core/types\"\n\nexport interface PageSdkStore {\n context: PageContext\n sdk: PageSdk\n}\n\nexport const ReactPageContext = createContext<PageSdkStore | null>(null)\n\nexport const usePageSdkStore = () => {\n const store = useContext(ReactPageContext)\n if (!store) {\n throw new Error(\"usePageSdkStore 必须在 PageProvider 内使用\")\n }\n return store\n}\n","import type {\n ApiPermissionListParams,\n AuthLogoutRedirectOptions,\n ApproveTaskParams,\n AssignPermissionsParams,\n AssignRolesParams,\n BatchAddUsersToRoleParams,\n BatchSendNotificationByTypeParams,\n ConnectorCallParams,\n ConnectorInvokeParams,\n ConnectorInvokeResult,\n CreateApiPermissionParams,\n CreateFormPermissionGroupDto,\n CreatePagePermissionGroupDto,\n CreateRoleParams,\n CreateUiPermissionParams,\n CurrentUserDepartmentParents,\n DataManagementConfigParams,\n DataViewQueryParams,\n DataViewQueryResult,\n DataViewStatsParams,\n FormAdvancedSearchParams,\n FormChangeRecordParams,\n FormCreateParams,\n FormExportParams,\n FormGetDetailParams,\n FormImportParams,\n FormRemoveParams,\n FormSearchParams,\n FormUpdateParams,\n FunctionInvokeParams,\n FunctionInvokeResult,\n GetParentDepartmentsOptions,\n GetProcessInstanceParams,\n GetUserRolesParams,\n ImportExportRecordDownloadParams,\n ImportExportRecordQuery,\n PageApiResponse,\n PageBinaryResponse,\n PageContext,\n PageDataSourceDescriptor,\n PageDepartmentRecord,\n PageHttpMethod,\n PageListResult,\n PageOffsetListResult,\n PagePermissionGroup,\n PageRequestOptions,\n PageSdk,\n PageSdkError,\n PageTransportDownloadPayload,\n PageTransportRequestPayload,\n PreviewNotificationTemplateParams,\n FormPermissionGroup,\n RoleListParams,\n RoleUsersParams,\n SaveDataManagementConfigParams,\n SearchExpression,\n SearchGroup,\n SearchRule,\n SearchSortItem,\n SubFormRule,\n SwitchAppRoleParams,\n SwitchPlatformRoleParams,\n TerminateProcessInstanceParams,\n TriggerCallbackTaskParams,\n UiPermissionListParams,\n UpdateApiPermissionParams,\n UpdateFormPermissionGroupDto,\n UpdatePagePermissionGroupDto,\n UpdateRoleParams,\n UpdateUiPermissionParams,\n UpdateUserParams,\n QueryFormPermissionGroupDto,\n QueryPagePermissionGroupDto,\n UserListParams,\n UserMenuPermissionsResponse,\n ValidateUserParams,\n CreateUserParams,\n SendNotificationByTypeParams,\n SendNotificationResult,\n ViewFieldPermissionValue,\n ViewPermissionSummary,\n} from \"./types\"\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value)\n\nconst isSearchRuleLike = (value: unknown): value is SearchRule | SubFormRule =>\n isRecord(value) &&\n typeof value.key === \"string\" &&\n (value.componentName === undefined || typeof value.componentName === \"string\")\n\nconst isBlobLike = (value: unknown): value is Blob =>\n typeof Blob !== \"undefined\" && value instanceof Blob\n\nconst normalizeMethod = (value: PageHttpMethod | string): PageHttpMethod => {\n const method = String(value || \"get\").toLowerCase()\n if (\n method === \"get\" ||\n method === \"post\" ||\n method === \"put\" ||\n method === \"delete\" ||\n method === \"patch\"\n ) {\n return method\n }\n return \"get\"\n}\n\nconst resolveAppType = (\n context: PageContext,\n explicitAppType?: string,\n): string => {\n const appType = String(explicitAppType || context.app.appType || \"\").trim()\n if (!appType) {\n throw new Error(\"appType 不能为空\")\n }\n return appType\n}\n\nconst buildAppPath = (\n context: PageContext,\n explicitAppType: string | undefined,\n suffix: string,\n) => `/${resolveAppType(context, explicitAppType)}${suffix}`\n\nconst buildOpenXiangdaAppPath = (\n context: PageContext,\n explicitAppType: string | undefined,\n suffix: string,\n) =>\n `/openxiangda-api/v1/apps/${encodePathSegment(\n resolveAppType(context, explicitAppType),\n )}${suffix}`\n\nconst encodePathSegment = (value: string) => encodeURIComponent(String(value))\n\nconst getHeaderValue = (\n headers: Record<string, unknown> | undefined,\n name: string,\n): string | undefined => {\n if (!headers) {\n return undefined\n }\n const target = name.toLowerCase()\n const entry = Object.entries(headers).find(\n ([key]) => key.toLowerCase() === target,\n )\n return entry ? String(entry[1]) : undefined\n}\n\nconst parseContentDispositionFileName = (\n contentDisposition?: string,\n): string | undefined => {\n if (!contentDisposition) {\n return undefined\n }\n\n const utf8Match = contentDisposition.match(/filename\\*=UTF-8''([^;]+)/i)\n if (utf8Match?.[1]) {\n try {\n return decodeURIComponent(utf8Match[1])\n } catch {\n return utf8Match[1]\n }\n }\n\n const quotedMatch = contentDisposition.match(/filename=\"([^\"]+)\"/i)\n if (quotedMatch?.[1]) {\n return quotedMatch[1]\n }\n\n const plainMatch = contentDisposition.match(/filename=([^;]+)/i)\n if (plainMatch?.[1]) {\n return plainMatch[1].trim()\n }\n\n return undefined\n}\n\nconst parseConnectorCallName = (name: string) => {\n const value = String(name || \"\").trim()\n const separatorIndex = value.indexOf(\".\")\n if (separatorIndex <= 0 || separatorIndex === value.length - 1) {\n throw new Error(\"连接器调用名必须是 connector.api 格式\")\n }\n\n return {\n connector: value.slice(0, separatorIndex),\n api: value.slice(separatorIndex + 1),\n }\n}\n\nconst serializeQuery = (query?: Record<string, unknown>) => {\n if (!query) {\n return undefined\n }\n\n const params = new URLSearchParams()\n\n const appendValue = (key: string, value: unknown) => {\n if (value === undefined || value === null || value === \"\") {\n return\n }\n if (Array.isArray(value)) {\n value.forEach((item) => appendValue(key, item))\n return\n }\n if (value instanceof Date) {\n params.append(key, value.toISOString())\n return\n }\n params.append(key, String(value))\n }\n\n Object.entries(query).forEach(([key, value]) => {\n appendValue(key, value)\n })\n\n const serialized = params.toString()\n return serialized || undefined\n}\n\nconst toLegacyRules = (value: Record<string, unknown>) =>\n Object.entries(value).flatMap(([key, itemValue]) => {\n if (itemValue === undefined) {\n return []\n }\n return [\n {\n key,\n operator: Array.isArray(itemValue) ? \"IN\" : \"EQ\",\n value: itemValue,\n },\n ]\n })\n\nconst toSearchGroup = (value: unknown): SearchGroup | undefined => {\n if (value === undefined || value === null || value === \"\") {\n return undefined\n }\n\n if (typeof value === \"string\") {\n try {\n return toSearchGroup(JSON.parse(value))\n } catch {\n return undefined\n }\n }\n\n if (Array.isArray(value)) {\n const rules: Array<SearchRule | SubFormRule> = []\n const conditions: SearchGroup[] = []\n\n value.forEach((item) => {\n const group = toSearchGroup(item)\n if (group) {\n if (group.rules?.length) {\n rules.push(...group.rules)\n }\n if (group.conditions?.length) {\n conditions.push(...group.conditions)\n }\n return\n }\n\n if (isSearchRuleLike(item)) {\n rules.push(item)\n return\n }\n\n if (isRecord(item)) {\n rules.push(...(toLegacyRules(item) as SearchRule[]))\n }\n })\n\n if (rules.length === 0 && conditions.length === 0) {\n return undefined\n }\n\n return {\n logic: \"AND\",\n ...(rules.length > 0 ? { rules } : {}),\n ...(conditions.length > 0 ? { conditions } : {}),\n }\n }\n\n if (isRecord(value)) {\n if (isSearchRuleLike(value)) {\n return {\n logic: \"AND\",\n rules: [value],\n }\n }\n\n if (\"rules\" in value || \"conditions\" in value || \"logic\" in value) {\n const nextGroup: SearchGroup = {\n logic:\n value.logic === \"OR\" || value.logic === \"AND\" ? value.logic : \"AND\",\n }\n\n if (Array.isArray(value.rules)) {\n nextGroup.rules = value.rules.filter(isSearchRuleLike)\n }\n\n if (Array.isArray(value.conditions)) {\n nextGroup.conditions = value.conditions\n .map((item) => toSearchGroup(item))\n .filter((item): item is SearchGroup => Boolean(item))\n }\n\n if (!nextGroup.rules?.length && !nextGroup.conditions?.length) {\n return undefined\n }\n\n return nextGroup\n }\n\n const rules = toLegacyRules(value)\n if (rules.length === 0) {\n return undefined\n }\n return {\n logic: \"AND\",\n rules,\n }\n }\n\n return undefined\n}\n\nconst mergeSearchExpressions = (base: unknown, extra: unknown) => {\n const baseGroup = toSearchGroup(base)\n const extraGroup = toSearchGroup(extra)\n\n if (!baseGroup) {\n return extraGroup\n }\n\n if (!extraGroup) {\n return baseGroup\n }\n\n return {\n logic: \"AND\",\n conditions: [baseGroup, extraGroup],\n } satisfies SearchGroup\n}\n\nconst serializeSearchExpression = (value?: SearchExpression | string) => {\n if (value === undefined || value === null || value === \"\") {\n return undefined\n }\n if (typeof value === \"string\") {\n return value\n }\n const group = toSearchGroup(value)\n return group ? JSON.stringify(group) : undefined\n}\n\nconst normalizeAdvancedOrder = (value?: SearchSortItem | SearchSortItem[]) => {\n if (!value) {\n return undefined\n }\n const nextValue = Array.isArray(value) ? value : [value]\n return JSON.stringify(nextValue)\n}\n\nconst normalizeDynamicOrder = (value?: string | SearchSortItem) => {\n if (!value) {\n return undefined\n }\n if (typeof value === \"string\") {\n return value\n }\n return `${value.id}:${value.isAsc === \"n\" ? \"-\" : \"+\"}`\n}\n\nconst normalizeJsonResponse = <TResult = unknown, TRaw = TResult>(\n rawResponse: unknown,\n): PageApiResponse<TResult, TRaw> => {\n const topLevelCode = Number((rawResponse as { code?: number })?.code)\n const nestedCode = Number(\n (rawResponse as { data?: { code?: number } })?.data?.code,\n )\n const code = Number.isFinite(topLevelCode)\n ? topLevelCode\n : Number.isFinite(nestedCode)\n ? nestedCode\n : 200\n\n const topLevelResult =\n isRecord(rawResponse) && \"result\" in rawResponse\n ? (rawResponse.result as TResult)\n : undefined\n const nestedResult =\n isRecord((rawResponse as { data?: unknown })?.data) &&\n \"result\" in ((rawResponse as { data?: Record<string, unknown> }).data || {})\n ? ((rawResponse as { data?: Record<string, unknown> }).data\n ?.result as TResult)\n : undefined\n const topLevelData =\n isRecord(rawResponse) && \"data\" in rawResponse\n ? (rawResponse.data as TRaw)\n : undefined\n\n const result =\n topLevelResult !== undefined\n ? topLevelResult\n : nestedResult !== undefined\n ? nestedResult\n : topLevelData !== undefined\n ? (topLevelData as unknown as TResult)\n : isRecord(rawResponse)\n ? (rawResponse as TResult)\n : null\n\n const nestedSuccess =\n typeof (rawResponse as { data?: { success?: boolean } })?.data?.success ===\n \"boolean\"\n ? (rawResponse as { data?: { success?: boolean } }).data?.success\n : undefined\n\n const success =\n typeof (rawResponse as { success?: boolean })?.success === \"boolean\"\n ? Boolean((rawResponse as { success?: boolean }).success)\n : typeof nestedSuccess === \"boolean\"\n ? Boolean(nestedSuccess)\n : code >= 200 && code < 300\n\n return {\n code,\n success,\n message:\n typeof (rawResponse as { message?: string })?.message === \"string\"\n ? (rawResponse as { message?: string }).message\n : typeof (rawResponse as { data?: { message?: string } })?.data\n ?.message === \"string\"\n ? (rawResponse as { data?: { message?: string } }).data?.message\n : undefined,\n result,\n data:\n topLevelData !== undefined\n ? topLevelData\n : topLevelResult !== undefined\n ? (topLevelResult as unknown as TRaw)\n : undefined,\n raw: rawResponse,\n }\n}\n\nconst normalizeBinaryResponse = (rawResponse: unknown): PageBinaryResponse => {\n if (isRecord(rawResponse) && isBlobLike(rawResponse.blob)) {\n return rawResponse as unknown as PageBinaryResponse\n }\n\n if (isBlobLike(rawResponse)) {\n return {\n blob: rawResponse,\n raw: rawResponse,\n }\n }\n\n const responseData = (rawResponse as { data?: unknown })?.data\n const responseHeaders = isRecord(\n (rawResponse as { headers?: unknown })?.headers,\n )\n ? ((rawResponse as { headers?: Record<string, unknown> }).headers as Record<\n string,\n unknown\n >)\n : undefined\n\n if (!isBlobLike(responseData)) {\n throw new Error(\"transport.download 未返回 Blob 数据\")\n }\n\n const contentDisposition = getHeaderValue(\n responseHeaders,\n \"content-disposition\",\n )\n\n return {\n blob: responseData,\n fileName: parseContentDispositionFileName(contentDisposition),\n contentType:\n getHeaderValue(responseHeaders, \"content-type\") || responseData.type,\n headers: responseHeaders\n ? Object.fromEntries(\n Object.entries(responseHeaders).map(([key, value]) => [\n key,\n value === undefined ? undefined : String(value),\n ]),\n )\n : undefined,\n raw: rawResponse,\n }\n}\n\nconst toSdkError = (\n input: unknown,\n payload: PageTransportRequestPayload | PageTransportDownloadPayload,\n): PageSdkError => {\n const normalizedResponse = isRecord(input)\n ? normalizeJsonResponse(input)\n : undefined\n\n const nextError =\n input instanceof Error\n ? input\n : new Error(\n normalizedResponse?.message ||\n `请求失败: ${String(payload.method).toUpperCase()} ${payload.path}`,\n )\n\n const sdkError = nextError as PageSdkError\n sdkError.method = String(payload.method).toUpperCase()\n sdkError.path = payload.path\n sdkError.response = normalizedResponse\n sdkError.raw = input\n return sdkError\n}\n\nconst ensureSuccess = <TResult = unknown, TRaw = TResult>(\n response: PageApiResponse<TResult, TRaw>,\n payload: PageTransportRequestPayload,\n) => {\n if (!response.success) {\n throw toSdkError(response, payload)\n }\n return response\n}\n\nconst resolveFormInstanceId = (params: {\n formInstId?: string\n formInstanceId?: string\n}) => {\n const formInstanceId = String(\n params.formInstId || params.formInstanceId || \"\",\n ).trim()\n if (!formInstanceId) {\n throw new Error(\"formInstanceId 不能为空\")\n }\n return formInstanceId\n}\n\nconst withDefaultAppType = <\n T extends {\n appType?: string\n scope?: string\n },\n>(\n context: PageContext,\n params: T | undefined,\n) => {\n if (!params) {\n return params\n }\n\n if (params.appType) {\n return params\n }\n\n if (params.scope === \"app\") {\n return {\n ...params,\n appType: context.app.appType,\n }\n }\n\n return params\n}\n\nconst AUTH_LOGIN_URL_ENV_KEYS = [\n \"loginUrl\",\n \"authLoginUrl\",\n \"bathAuthUrl\",\n \"REACT_APP_VITE_BATH_AUTH_URL\",\n \"VITE_BATH_AUTH_URL\",\n \"BATH_AUTH_URL\",\n]\n\nconst DEFAULT_PLATFORM_LOGIN_URL = \"/platform/login\"\n\nconst normalizeOptionalString = (value: unknown) => {\n const text = typeof value === \"string\" ? value.trim() : \"\"\n return text || undefined\n}\n\nconst getCurrentHref = () => {\n if (typeof window === \"undefined\") {\n return \"\"\n }\n return window.location?.href || \"\"\n}\n\nconst resolveAuthLoginUrl = (\n context: PageContext,\n options: AuthLogoutRedirectOptions,\n) => {\n const explicitLoginUrl = normalizeOptionalString(options.loginUrl)\n if (explicitLoginUrl) {\n return explicitLoginUrl\n }\n\n for (const key of AUTH_LOGIN_URL_ENV_KEYS) {\n const loginUrl = normalizeOptionalString(context.env?.[key])\n if (loginUrl) {\n return loginUrl\n }\n }\n\n return undefined\n}\n\nconst buildAuthRedirectUrl = (\n loginUrl: string,\n callbackUrl: string | undefined,\n callbackParamName: string | undefined,\n) => {\n const paramName = normalizeOptionalString(callbackParamName) || \"callback\"\n const normalizedCallbackUrl = normalizeOptionalString(callbackUrl)\n\n if (!normalizedCallbackUrl) {\n return loginUrl\n }\n\n const baseHref = getCurrentHref() || \"http://localhost/\"\n const isAbsoluteUrl = /^[a-z][a-z\\d+.-]*:/i.test(loginUrl)\n const isProtocolRelativeUrl = loginUrl.startsWith(\"//\")\n const isRootRelativeUrl = loginUrl.startsWith(\"/\")\n\n try {\n const url = new URL(loginUrl, baseHref)\n url.searchParams.set(paramName, normalizedCallbackUrl)\n\n if (isAbsoluteUrl || isProtocolRelativeUrl) {\n return url.toString()\n }\n\n const path = `${url.pathname}${url.search}${url.hash}`\n return isRootRelativeUrl ? path : path.replace(/^\\//, \"\")\n } catch {\n const hashIndex = loginUrl.indexOf(\"#\")\n const pathAndQuery =\n hashIndex >= 0 ? loginUrl.slice(0, hashIndex) : loginUrl\n const hash = hashIndex >= 0 ? loginUrl.slice(hashIndex) : \"\"\n const separator = pathAndQuery.includes(\"?\") ? \"&\" : \"?\"\n\n return `${pathAndQuery}${separator}${encodeURIComponent(\n paramName,\n )}=${encodeURIComponent(normalizedCallbackUrl)}${hash}`\n }\n}\n\nconst performRedirect = (\n url: string,\n options: AuthLogoutRedirectOptions,\n) => {\n if (options.redirect) {\n options.redirect(url)\n return\n }\n\n if (typeof window === \"undefined\" || !window.location) {\n return\n }\n\n if (options.replace && typeof window.location.replace === \"function\") {\n window.location.replace(url)\n return\n }\n\n window.location.href = url\n}\n\nconst reloadCurrentPage = () => {\n if (\n typeof window === \"undefined\" ||\n !window.location ||\n typeof window.location.reload !== \"function\"\n ) {\n return\n }\n\n window.location.reload()\n}\n\nconst redirectAfterLogout = (\n context: PageContext,\n options: AuthLogoutRedirectOptions,\n) => {\n const loginUrl = resolveAuthLoginUrl(context, options)\n const callbackUrl = normalizeOptionalString(options.callbackUrl) || getCurrentHref()\n\n if (loginUrl) {\n performRedirect(\n buildAuthRedirectUrl(loginUrl, callbackUrl, options.callbackParamName),\n options,\n )\n return\n }\n\n if (options.fallback === \"none\") {\n return\n }\n\n if (options.fallback === \"reload\") {\n reloadCurrentPage()\n return\n }\n\n const redirectLoginUrl = DEFAULT_PLATFORM_LOGIN_URL\n performRedirect(\n buildAuthRedirectUrl(redirectLoginUrl, callbackUrl, options.callbackParamName),\n options,\n )\n}\n\nexport const createPageSdk = (context: PageContext): PageSdk => {\n const request = async <TResult = unknown, TRaw = TResult>(\n options: PageRequestOptions,\n ) => {\n const payload: PageTransportRequestPayload = {\n path: options.path,\n method: normalizeMethod(options.method),\n query: serializeQuery(options.query),\n body: options.body,\n headers: options.headers,\n }\n\n try {\n const rawResponse = await context.bridge.invoke<unknown>(\n \"transport.request\",\n payload,\n )\n return ensureSuccess(\n normalizeJsonResponse<TResult, TRaw>(rawResponse),\n payload,\n )\n } catch (error) {\n throw toSdkError(error, payload)\n }\n }\n\n const download = async (options: PageRequestOptions) => {\n const payload: PageTransportDownloadPayload = {\n path: options.path,\n method: normalizeMethod(options.method),\n query: serializeQuery(options.query),\n body: options.body,\n headers: options.headers,\n }\n\n try {\n const rawResponse = await context.bridge.invoke<unknown>(\n \"transport.download\",\n payload,\n )\n return normalizeBinaryResponse(rawResponse)\n } catch (error) {\n throw toSdkError(error, payload)\n }\n }\n\n const logout = <T = boolean>() =>\n request<T>({\n path: \"/api/auth/logout\",\n method: \"post\",\n })\n\n const auth = {\n logout,\n logoutAndRedirect: async <T = boolean>(\n options: AuthLogoutRedirectOptions = {},\n ) => {\n try {\n const response = await logout<T>()\n redirectAfterLogout(context, options)\n return response\n } catch (error) {\n if (options.continueOnLogoutError === false) {\n throw error\n }\n redirectAfterLogout(context, options)\n return null\n }\n },\n }\n\n const connector = {\n invoke: <TResult = unknown, TBody = unknown>(\n params: ConnectorInvokeParams<TBody>,\n ) =>\n request<ConnectorInvokeResult<TResult>>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/connectors/actions/invoke\",\n ),\n method: \"post\",\n body: {\n connector: params.connector,\n api: params.api,\n pathParams: params.pathParams,\n query: params.query,\n body: params.body,\n headers: params.headers,\n requestBodyType: params.requestBodyType,\n responseType: params.responseType,\n },\n }),\n call: <TResult = unknown, TBody = unknown>(\n name: string,\n params: ConnectorCallParams<TBody> = {},\n ) => {\n const target = parseConnectorCallName(name)\n return connector.invoke<TResult, TBody>({\n ...params,\n connector: target.connector,\n api: target.api,\n })\n },\n download: <TBody = unknown>(\n params: ConnectorInvokeParams<TBody>,\n ): Promise<PageBinaryResponse> =>\n download({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/connectors/actions/download\",\n ),\n method: \"post\",\n body: {\n connector: params.connector,\n api: params.api,\n pathParams: params.pathParams,\n query: params.query,\n body: params.body,\n headers: params.headers,\n requestBodyType: params.requestBodyType,\n responseType: \"binary\",\n },\n }),\n }\n\n const form = {\n getDetail: <T = unknown>(params: FormGetDetailParams) =>\n request<T>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/getFormDataById.json\",\n ),\n method: \"get\",\n query: {\n formUuid: params.formUuid,\n formInstId: resolveFormInstanceId(params),\n },\n }),\n create: <T = unknown, TRaw = unknown>(params: FormCreateParams) =>\n request<T, TRaw>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/saveFormData.json\",\n ),\n method: \"post\",\n body: {\n formUuid: params.formUuid,\n formDataJson: JSON.stringify(params.data || {}),\n },\n }),\n update: <T = unknown, TRaw = unknown>(params: FormUpdateParams) =>\n request<T, TRaw>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/updateFormData.json\",\n ),\n method: \"post\",\n body: {\n formUuid: params.formUuid,\n formInstId: resolveFormInstanceId(params),\n updateFormDataJson:\n params.updateFormDataJson || JSON.stringify(params.data || {}),\n },\n }),\n remove: <T = unknown, TRaw = unknown>(params: FormRemoveParams) =>\n request<T, TRaw>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/deleteFormData.json\",\n ),\n method: \"post\",\n body: {\n formUuid: params.formUuid,\n formInstId: resolveFormInstanceId(params),\n },\n }),\n getChangeRecords: <T = unknown>(params: FormChangeRecordParams) =>\n request<T>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/getFormDataChangeRecords.json\",\n ),\n method: \"get\",\n query: {\n formUuid: params.formUuid,\n formInstId: resolveFormInstanceId(params),\n page: params.page,\n pageSize: params.pageSize,\n },\n }),\n search: <T = unknown>(params: FormSearchParams) =>\n request<PageListResult<T>>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/searchFormDatas.json\",\n ),\n method: \"get\",\n query: {\n formUuid: params.formUuid,\n searchFieldJson: serializeSearchExpression(params.search),\n currentPage: params.currentPage,\n pageSize: params.pageSize,\n originatorId: params.originatorId,\n createFrom: params.createFrom,\n createTo: params.createTo,\n modifiedFrom: params.modifiedFrom,\n modifiedTo: params.modifiedTo,\n dynamicOrder: normalizeDynamicOrder(params.dynamicOrder),\n instanceStatus: params.instanceStatus,\n },\n }),\n searchIds: <T = string>(params: FormSearchParams) =>\n request<PageListResult<T>>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/searchFormDataIds.json\",\n ),\n method: \"get\",\n query: {\n formUuid: params.formUuid,\n searchFieldJson: serializeSearchExpression(params.search),\n currentPage: params.currentPage,\n pageSize: params.pageSize,\n originatorId: params.originatorId,\n createFrom: params.createFrom,\n createTo: params.createTo,\n modifiedFrom: params.modifiedFrom,\n modifiedTo: params.modifiedTo,\n dynamicOrder: normalizeDynamicOrder(params.dynamicOrder),\n instanceStatus: params.instanceStatus,\n },\n }),\n advancedSearch: <T = unknown>(params: FormAdvancedSearchParams) =>\n request<PageListResult<T>>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/advancedSearch.json\",\n ),\n method: \"get\",\n query: {\n formUuid: params.formUuid,\n filters: serializeSearchExpression(params.filters),\n conditionType: params.conditionType,\n searchKeyWord: params.searchKeyWord,\n currentPage: params.currentPage,\n pageSize: params.pageSize,\n order: normalizeAdvancedOrder(params.order),\n instanceStatus: params.instanceStatus,\n },\n }),\n advancedExport: (params: FormExportParams) =>\n download({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/advancedExport.xlsx\",\n ),\n method: \"get\",\n query: {\n formUuid: params.formUuid,\n filters: serializeSearchExpression(params.filters),\n conditionType: params.conditionType,\n searchKeyWord: params.searchKeyWord,\n currentPage: params.currentPage,\n pageSize: params.pageSize,\n order: normalizeAdvancedOrder(params.order),\n instanceStatus: params.instanceStatus,\n exportAll: params.exportAll,\n embedImages: params.embedImages,\n exportFields: params.exportFields?.join(\",\"),\n },\n }),\n downloadImportTemplate: (params: DataManagementConfigParams) =>\n download({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/advancedExportTemplate.xlsx\",\n ),\n method: \"get\",\n query: {\n formUuid: params.formUuid,\n },\n }),\n importPreview: <T = unknown>(params: FormImportParams) =>\n request<T>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/importPreview.xlsx\",\n ),\n method: \"post\",\n body: {\n formUuid: params.formUuid,\n fileBase64: params.fileBase64,\n fileName: params.fileName,\n },\n }),\n importExcel: <T = unknown>(params: FormImportParams) =>\n request<T>({\n path: buildAppPath(context, params.appType, \"/v1/form/import.xlsx\"),\n method: \"post\",\n body: {\n formUuid: params.formUuid,\n fileBase64: params.fileBase64,\n fileName: params.fileName,\n },\n }),\n getImportRecords: <T = unknown>(params: ImportExportRecordQuery) =>\n request<T>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/importRecords.json\",\n ),\n method: \"get\",\n query: {\n formUuid: params.formUuid,\n currentPage: params.currentPage,\n pageSize: params.pageSize,\n },\n }),\n getExportRecords: <T = unknown>(params: ImportExportRecordQuery) =>\n request<T>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/exportRecords.json\",\n ),\n method: \"get\",\n query: {\n formUuid: params.formUuid,\n currentPage: params.currentPage,\n pageSize: params.pageSize,\n },\n }),\n downloadImportSource: (params: ImportExportRecordDownloadParams) =>\n download({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/importRecord/downloadSource.xlsx\",\n ),\n method: \"get\",\n query: {\n recordId: params.recordId,\n },\n }),\n downloadImportFailed: (params: ImportExportRecordDownloadParams) =>\n download({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/importRecord/downloadFailed.xlsx\",\n ),\n method: \"get\",\n query: {\n recordId: params.recordId,\n },\n }),\n downloadExportRecord: (params: ImportExportRecordDownloadParams) =>\n download({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/exportRecord/download.xlsx\",\n ),\n method: \"get\",\n query: {\n recordId: params.recordId,\n },\n }),\n getDataManagementConfig: <T = unknown>(\n params: DataManagementConfigParams,\n ) =>\n request<T>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/dataManagement/config/get.json\",\n ),\n method: \"get\",\n query: {\n formUuid: params.formUuid,\n },\n }),\n saveDataManagementConfig: <T = unknown>(\n params: SaveDataManagementConfigParams,\n ) =>\n request<T>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/dataManagement/config/save.json\",\n ),\n method: \"post\",\n body: {\n formUuid: params.formUuid,\n config: params.config,\n },\n }),\n }\n\n const user = {\n create: <T = unknown>(params: CreateUserParams) =>\n request<T>({\n path: \"/user/create\",\n method: \"post\",\n body: params,\n }),\n update: <T = unknown>(params: UpdateUserParams) =>\n request<T>({\n path: \"/user/update\",\n method: \"put\",\n body: params,\n }),\n remove: <T = boolean>(id: string) =>\n request<T>({\n path: `/user/${encodePathSegment(id)}`,\n method: \"delete\",\n }),\n get: <T = unknown>(id = \"current\") =>\n request<T>({\n path: `/user/${encodePathSegment(id)}`,\n method: \"get\",\n }),\n getCurrent: <T = unknown>() =>\n request<T>({\n path: \"/user/current\",\n method: \"get\",\n }),\n getByUsername: <T = unknown>(username: string) =>\n request<T>({\n path: `/user/username/${encodePathSegment(username)}`,\n method: \"get\",\n }),\n list: <T = unknown>(params?: UserListParams) =>\n request<T>({\n path: \"/user/list\",\n method: \"get\",\n query: {\n ids: params?.ids,\n departmentIds: params?.departmentIds,\n name: params?.name,\n username: params?.username,\n phone: params?.phone,\n email: params?.email,\n page: params?.page,\n pageSize: params?.pageSize,\n },\n }),\n search: <T = unknown>(keyword?: string) =>\n request<T>({\n path: \"/user/search\",\n method: \"get\",\n query: {\n keyword,\n },\n }),\n listAll: <T = unknown>() =>\n request<T>({\n path: \"/user/all\",\n method: \"get\",\n }),\n listByDepartment: <T = unknown>(departmentId: string) =>\n request<T>({\n path: `/user/department/${encodePathSegment(departmentId)}`,\n method: \"get\",\n }),\n validate: <T = unknown>(params: ValidateUserParams) =>\n request<T>({\n path: \"/user/validate\",\n method: \"post\",\n body: params,\n }),\n }\n\n const getParentDepartments = <T = PageDepartmentRecord[]>(\n departmentId: string,\n options: GetParentDepartmentsOptions = {},\n ) =>\n request<T>({\n path: `/department/${encodePathSegment(departmentId)}/parentDepartments`,\n method: \"get\",\n query: {\n includeSelf: options.includeSelf ?? true,\n },\n })\n\n const department = {\n getParentDepartments,\n getCurrentUserParentDepartments: async (\n options: GetParentDepartmentsOptions = {},\n ): Promise<CurrentUserDepartmentParents[]> => {\n const departments = (context.user.departments || []).filter(\n (item) => typeof item.id === \"string\" && item.id.trim(),\n )\n\n return Promise.all(\n departments.map(async (item) => {\n const response = await getParentDepartments(item.id || \"\", {\n includeSelf: options.includeSelf,\n })\n return {\n department: item,\n parents: response.result || [],\n }\n }),\n )\n },\n }\n\n const role = {\n create: <T = unknown>(params: CreateRoleParams) =>\n request<T>({\n path: \"/role/\",\n method: \"post\",\n body: params,\n }),\n update: <T = unknown>(id: string, params: UpdateRoleParams) =>\n request<T>({\n path: `/role/${encodePathSegment(id)}`,\n method: \"put\",\n body: params,\n }),\n remove: <T = boolean>(id: string) =>\n request<T>({\n path: `/role/${encodePathSegment(id)}`,\n method: \"delete\",\n }),\n get: <T = unknown>(id: string) =>\n request<T>({\n path: `/role/${encodePathSegment(id)}`,\n method: \"get\",\n }),\n list: <T = unknown>(params?: RoleListParams) =>\n request<T>({\n path: \"/role/\",\n method: \"get\",\n query: withDefaultAppType(context, params) as\n | Record<string, unknown>\n | undefined,\n }),\n listUsers: <T = unknown>(roleId: string, params?: RoleUsersParams) =>\n request<T>({\n path: `/role/${encodePathSegment(roleId)}/users`,\n method: \"get\",\n query: params as Record<string, unknown> | undefined,\n }),\n assignRoles: <T = unknown>(params: AssignRolesParams) =>\n request<T>({\n path: \"/role/assign\",\n method: \"post\",\n body: params,\n }),\n addUserRole: <T = boolean>(params: { userId: string; roleId: string }) =>\n request<T>({\n path: \"/role/add\",\n method: \"post\",\n body: params,\n }),\n removeUserRole: <T = boolean>(params: { userId: string; roleId: string }) =>\n request<T>({\n path: \"/role/remove\",\n method: \"post\",\n body: params,\n }),\n batchAddUsers: <T = unknown>(params: BatchAddUsersToRoleParams) =>\n request<T>({\n path: \"/role/batch-add-users\",\n method: \"post\",\n body: params,\n }),\n getMyRoles: <T = unknown>(params?: GetUserRolesParams) =>\n request<T>({\n path: \"/role/my/roles\",\n method: \"get\",\n query: withDefaultAppType(context, params) as\n | Record<string, unknown>\n | undefined,\n }),\n getCurrentRole: <T = unknown>(params?: GetUserRolesParams) =>\n request<T>({\n path: \"/role/my/current\",\n method: \"get\",\n query: withDefaultAppType(context, params) as\n | Record<string, unknown>\n | undefined,\n }),\n switchPlatformRole: <T = boolean>(params: SwitchPlatformRoleParams) =>\n request<T>({\n path: \"/role/switch/platform\",\n method: \"post\",\n body: params,\n }),\n switchAppRole: <T = boolean>(params: SwitchAppRoleParams) =>\n request<T>({\n path: \"/role/switch/app\",\n method: \"post\",\n body: {\n ...params,\n appType: resolveAppType(context, params.appType),\n },\n }),\n }\n\n const permission = {\n formGroup: {\n create: <T = FormPermissionGroup>(params: CreateFormPermissionGroupDto) =>\n request<T>({\n path: \"/permission/form-group/\",\n method: \"post\",\n body: {\n ...params,\n appType: resolveAppType(context, params.appType),\n },\n }),\n update: <T = FormPermissionGroup>(\n id: string,\n params: UpdateFormPermissionGroupDto,\n ) =>\n request<T>({\n path: `/permission/form-group/${encodePathSegment(id)}`,\n method: \"put\",\n body: {\n ...params,\n ...(params.appType\n ? { appType: resolveAppType(context, params.appType) }\n : {}),\n },\n }),\n remove: <T = boolean>(id: string) =>\n request<T>({\n path: `/permission/form-group/${encodePathSegment(id)}`,\n method: \"delete\",\n }),\n get: <T = FormPermissionGroup | null>(id: string) =>\n request<T>({\n path: `/permission/form-group/${encodePathSegment(id)}`,\n method: \"get\",\n }),\n list: <T = PageOffsetListResult<FormPermissionGroup>>(\n params?: QueryFormPermissionGroupDto,\n ) =>\n request<T>({\n path: \"/permission/form-group/\",\n method: \"get\",\n query: {\n ...params,\n appType: resolveAppType(context, params?.appType),\n },\n }),\n getViewFieldPermissions: <\n T = Record<string, ViewFieldPermissionValue>,\n >(params: {\n appType?: string\n formUuid: string\n }) =>\n request<T>({\n path: \"/permission/form-group/field-permissions\",\n method: \"get\",\n query: {\n appType: resolveAppType(context, params.appType),\n formUuid: params.formUuid,\n },\n }),\n getViewPermissionSummary: <T = ViewPermissionSummary>(params: {\n appType?: string\n formUuid: string\n }) =>\n request<T>({\n path: \"/permission/form-group/view-permissions\",\n method: \"get\",\n query: {\n appType: resolveAppType(context, params.appType),\n formUuid: params.formUuid,\n },\n }),\n },\n pageGroup: {\n create: <T = PagePermissionGroup>(params: CreatePagePermissionGroupDto) =>\n request<T>({\n path: \"/permission/page-group/\",\n method: \"post\",\n body: {\n ...params,\n appType: resolveAppType(context, params.appType),\n },\n }),\n update: <T = PagePermissionGroup>(\n id: string,\n params: UpdatePagePermissionGroupDto,\n ) =>\n request<T>({\n path: `/permission/page-group/${encodePathSegment(id)}`,\n method: \"put\",\n body: {\n ...params,\n ...(params.appType\n ? { appType: resolveAppType(context, params.appType) }\n : {}),\n },\n }),\n remove: <T = boolean>(id: string) =>\n request<T>({\n path: `/permission/page-group/${encodePathSegment(id)}`,\n method: \"delete\",\n }),\n get: <T = PagePermissionGroup | null>(id: string) =>\n request<T>({\n path: `/permission/page-group/${encodePathSegment(id)}`,\n method: \"get\",\n }),\n list: <T = PageOffsetListResult<PagePermissionGroup>>(\n params?: QueryPagePermissionGroupDto,\n ) =>\n request<T>({\n path: \"/permission/page-group/\",\n method: \"get\",\n query: {\n ...params,\n appType: resolveAppType(context, params?.appType),\n },\n }),\n getUserMenuPermissions: <T = UserMenuPermissionsResponse>(\n appType?: string,\n ) =>\n request<T>({\n path: \"/permission/page-group/user-menu-permissions\",\n method: \"get\",\n query: {\n appType: resolveAppType(context, appType),\n },\n }),\n },\n api: {\n create: <T = unknown>(params: CreateApiPermissionParams) =>\n request<T>({\n path: \"/permission/api\",\n method: \"post\",\n body: params,\n }),\n update: <T = unknown>(id: string, params: UpdateApiPermissionParams) =>\n request<T>({\n path: `/permission/api/${encodePathSegment(id)}`,\n method: \"put\",\n body: params,\n }),\n remove: <T = boolean>(id: string) =>\n request<T>({\n path: `/permission/api/${encodePathSegment(id)}`,\n method: \"delete\",\n }),\n list: <T = unknown>(params?: ApiPermissionListParams) =>\n request<T>({\n path: \"/permission/api\",\n method: \"get\",\n query: withDefaultAppType(context, params) as\n | Record<string, unknown>\n | undefined,\n }),\n assign: <T = boolean>(params: AssignPermissionsParams) =>\n request<T>({\n path: \"/permission/api/assign\",\n method: \"post\",\n body: params,\n }),\n getByRole: <T = unknown>(roleId: string) =>\n request<T>({\n path: `/permission/api/role/${encodePathSegment(roleId)}`,\n method: \"get\",\n }),\n getRolesByPermission: <T = unknown>(permissionId: string) =>\n request<T>({\n path: `/permission/api/${encodePathSegment(permissionId)}/roles`,\n method: \"get\",\n }),\n },\n ui: {\n create: <T = unknown>(params: CreateUiPermissionParams) =>\n request<T>({\n path: \"/permission/api/ui\",\n method: \"post\",\n body: params,\n }),\n update: <T = unknown>(id: string, params: UpdateUiPermissionParams) =>\n request<T>({\n path: `/permission/api/ui/${encodePathSegment(id)}`,\n method: \"put\",\n body: params,\n }),\n remove: <T = boolean>(id: string) =>\n request<T>({\n path: `/permission/api/ui/${encodePathSegment(id)}`,\n method: \"delete\",\n }),\n list: <T = unknown>(params?: UiPermissionListParams) =>\n request<T>({\n path: \"/permission/api/ui\",\n method: \"get\",\n query: withDefaultAppType(context, params) as\n | Record<string, unknown>\n | undefined,\n }),\n assign: <T = boolean>(params: AssignPermissionsParams) =>\n request<T>({\n path: \"/permission/api/ui/assign\",\n method: \"post\",\n body: params,\n }),\n getMyPlatform: <T = unknown>() =>\n request<T>({\n path: \"/permission/api/ui/me/platform\",\n method: \"get\",\n }),\n getMyApp: <T = unknown>(appType?: string) =>\n request<T>({\n path: \"/permission/api/ui/me/app\",\n method: \"get\",\n query: {\n appType: resolveAppType(context, appType),\n },\n }),\n },\n }\n\n const process = {\n getInstance: <T = unknown>(params: GetProcessInstanceParams) =>\n request<T>({\n path: buildAppPath(context, params.appType, \"/v1/process/instance\"),\n method: \"get\",\n query: {\n instanceId: params.instanceId,\n },\n }),\n terminateInstance: <T = unknown>(params: TerminateProcessInstanceParams) =>\n request<T>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/process/terminateInstance.json\",\n ),\n method: \"post\",\n body: {\n processInstanceId: params.processInstanceId,\n reason: params.reason,\n },\n }),\n approveTask: <T = unknown>(params: ApproveTaskParams) =>\n request<T>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/process/approveTask.json\",\n ),\n method: \"post\",\n body: {\n ...params,\n appType: resolveAppType(context, params.appType),\n },\n }),\n triggerCallbackTask: <T = unknown>(params: TriggerCallbackTaskParams) =>\n request<T>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/process/triggerCallback.json\",\n ),\n method: \"post\",\n body: {\n taskId: params.taskId,\n payload: params.payload,\n },\n }),\n }\n\n const dataView = {\n query: <T = unknown>(code: string, params: DataViewQueryParams = {}) => {\n const dataViewCode = String(code || \"\").trim()\n if (!dataViewCode) {\n throw new Error(\"数据视图 code 不能为空\")\n }\n return request<DataViewQueryResult<T>>({\n path: buildAppPath(\n context,\n params.appType,\n `/v1/data-views/${encodePathSegment(dataViewCode)}/query.json`,\n ),\n method: \"post\",\n body: {\n fields: params.fields,\n filters: serializeSearchExpression(params.filters),\n conditionType: params.conditionType,\n searchKeyWord: params.searchKeyWord,\n currentPage: params.currentPage,\n pageSize: params.pageSize,\n order: Array.isArray(params.order)\n ? params.order\n : params.order\n ? [params.order]\n : undefined,\n },\n })\n },\n stats: <T = unknown>(code: string, params: DataViewStatsParams = {}) => {\n const dataViewCode = String(code || \"\").trim()\n if (!dataViewCode) {\n throw new Error(\"数据视图 code 不能为空\")\n }\n return request<DataViewQueryResult<T>>({\n path: buildAppPath(\n context,\n params.appType,\n `/v1/data-views/${encodePathSegment(dataViewCode)}/stats.json`,\n ),\n method: \"post\",\n body: {\n fields: params.fields,\n filters: serializeSearchExpression(params.filters),\n having: serializeSearchExpression(params.having),\n conditionType: params.conditionType,\n searchKeyWord: params.searchKeyWord,\n currentPage: params.currentPage,\n pageSize: params.pageSize,\n order: Array.isArray(params.order)\n ? params.order\n : params.order\n ? [params.order]\n : undefined,\n },\n })\n },\n }\n\n const appFunction = {\n invoke: <TResult = unknown, TInput = unknown>(\n code: string,\n params: FunctionInvokeParams<TInput> = {},\n ) => {\n const functionCode = String(code || \"\").trim()\n if (!functionCode) {\n throw new Error(\"应用函数 code 不能为空\")\n }\n return request<FunctionInvokeResult<TResult>>({\n path: buildAppPath(\n context,\n params.appType,\n `/v1/functions/${encodePathSegment(functionCode)}/invoke.json`,\n ),\n method: \"post\",\n body: {\n input: params.input,\n },\n })\n },\n }\n\n const notification = {\n sendByType: <T = SendNotificationResult>(\n params: SendNotificationByTypeParams,\n ) =>\n request<T>({\n path: buildOpenXiangdaAppPath(\n context,\n params.appType,\n \"/notifications/send-by-type\",\n ),\n method: \"post\",\n body: {\n ...params,\n appType: resolveAppType(context, params.appType),\n },\n }),\n batchSendByType: <T = SendNotificationResult>(\n params: BatchSendNotificationByTypeParams,\n ) =>\n request<T>({\n path: buildOpenXiangdaAppPath(\n context,\n params.appType,\n \"/notifications/batch-send-by-type\",\n ),\n method: \"post\",\n body: {\n ...params,\n appType: resolveAppType(context, params.appType),\n },\n }),\n findConfig: <T = unknown>(\n notificationType: string,\n params: { appType?: string; formUuid?: string } = {},\n ) =>\n request<T>({\n path: buildOpenXiangdaAppPath(\n context,\n params.appType,\n `/notifications/type-configs/${encodePathSegment(notificationType)}`,\n ),\n method: \"get\",\n query: params.formUuid ? { formUuid: params.formUuid } : undefined,\n }),\n previewTemplate: <T = unknown>(params: PreviewNotificationTemplateParams) =>\n request<T>({\n path: buildOpenXiangdaAppPath(\n context,\n params.appType,\n \"/notifications/templates/preview\",\n ),\n method: \"post\",\n body: {\n ...params,\n appType: resolveAppType(context, params.appType),\n },\n }),\n }\n\n const sdk: PageSdk = {\n context,\n request,\n download,\n transport: {\n request,\n download,\n },\n auth,\n connector,\n form,\n user,\n department,\n role,\n permission,\n process,\n notification,\n dataView,\n function: appFunction,\n dataSource: {\n run: async <TResult = unknown, TRaw = TResult>(\n name: string,\n params: Record<string, unknown> = {},\n ): Promise<PageApiResponse<TResult, TRaw>> => {\n const descriptor = (context.page.dataSources || []).find(\n (item) => item.key === name,\n ) as PageDataSourceDescriptor | undefined\n\n if (!descriptor) {\n throw new Error(`未找到数据源: ${String(name || \"\")}`)\n }\n\n const runtimeParams = params\n const resolvedFormUuid = String(\n runtimeParams.formUuid || descriptor.formUuid || \"\",\n ).trim()\n\n switch (descriptor.type) {\n case \"dataView.query\":\n case \"dataView.stats\": {\n const dataViewCode = String(\n runtimeParams.code ||\n runtimeParams.dataViewCode ||\n descriptor.code ||\n descriptor.dataViewCode ||\n descriptor.viewCode ||\n descriptor.key ||\n \"\",\n ).trim()\n const queryParams = {\n ...(descriptor.params && typeof descriptor.params === \"object\"\n ? (descriptor.params as Record<string, unknown>)\n : {}),\n ...runtimeParams,\n fields: runtimeParams.fields || descriptor.fields,\n filters: mergeSearchExpressions(\n descriptor.defaultFilter,\n runtimeParams.filters as SearchExpression | string | undefined,\n ),\n having: mergeSearchExpressions(\n descriptor.defaultHaving || descriptor.having,\n runtimeParams.having as SearchExpression | string | undefined,\n ),\n } as unknown as DataViewStatsParams\n delete (queryParams as Record<string, unknown>).code\n delete (queryParams as Record<string, unknown>).dataViewCode\n delete (queryParams as Record<string, unknown>).viewCode\n if (descriptor.type === \"dataView.stats\") {\n return dataView.stats<TResult>(\n dataViewCode,\n queryParams,\n ) as unknown as Promise<PageApiResponse<TResult, TRaw>>\n }\n delete (queryParams as Record<string, unknown>).having\n return dataView.query<TResult>(\n dataViewCode,\n queryParams,\n ) as unknown as Promise<PageApiResponse<TResult, TRaw>>\n }\n case \"form.list\":\n return form.advancedSearch<TResult>({\n ...(runtimeParams as unknown as Omit<\n FormAdvancedSearchParams,\n \"formUuid\"\n >),\n formUuid: resolvedFormUuid,\n filters: mergeSearchExpressions(\n descriptor.defaultFilter,\n runtimeParams.filters as SearchExpression | string | undefined,\n ),\n }) as unknown as Promise<PageApiResponse<TResult, TRaw>>\n case \"form.detail\":\n return form.getDetail<TResult>({\n ...(runtimeParams as unknown as Omit<\n FormGetDetailParams,\n \"formUuid\"\n >),\n formUuid: resolvedFormUuid,\n }) as unknown as Promise<PageApiResponse<TResult, TRaw>>\n case \"form.create\":\n return form.create<TResult>({\n ...(runtimeParams as unknown as Omit<\n FormCreateParams,\n \"formUuid\"\n >),\n formUuid: resolvedFormUuid,\n }) as unknown as Promise<PageApiResponse<TResult, TRaw>>\n case \"form.update\":\n return form.update<TResult>({\n ...(runtimeParams as unknown as Omit<\n FormUpdateParams,\n \"formUuid\"\n >),\n formUuid: resolvedFormUuid,\n }) as unknown as Promise<PageApiResponse<TResult, TRaw>>\n case \"form.delete\":\n return form.remove<TResult>({\n ...(runtimeParams as unknown as Omit<\n FormRemoveParams,\n \"formUuid\"\n >),\n formUuid: resolvedFormUuid,\n }) as unknown as Promise<PageApiResponse<TResult, TRaw>>\n default:\n throw new Error(`暂不支持的数据源类型: ${String(descriptor.type)}`)\n }\n },\n },\n navigation: context.navigation,\n ui: context.ui,\n }\n\n return sdk\n}\n","import type { ThemeConfig } from 'antd';\n\nconst baseTheme = {\n hashed: false,\n token: {\n colorPrimary: '#1677ff',\n colorInfo: '#1677ff',\n colorSuccess: '#52c41a',\n colorWarning: '#faad14',\n colorError: '#ff4d4f',\n colorText: 'rgba(0,0,0,0.88)',\n colorTextSecondary: 'rgba(0,0,0,0.65)',\n colorTextTertiary: 'rgba(0,0,0,0.45)',\n colorTextDisabled: 'rgba(0,0,0,0.25)',\n colorBgContainer: '#ffffff',\n colorBgLayout: '#f5f5f5',\n colorBgElevated: '#ffffff',\n colorBorder: '#d9d9d9',\n colorBorderSecondary: '#f0f0f0',\n borderRadius: 6,\n borderRadiusSM: 4,\n borderRadiusLG: 8,\n fontSize: 14,\n controlHeight: 32,\n },\n components: {\n Form: { itemMarginBottom: 16 },\n Card: { paddingLG: 24 },\n },\n} satisfies ThemeConfig;\n\nexport const antdTheme: ThemeConfig = {\n ...baseTheme,\n cssVar: { prefix: 'ant' },\n};\n\nexport const legacyAntdTheme: ThemeConfig = {\n ...baseTheme,\n cssVar: { prefix: 'sy-ant' },\n};\n\nexport default antdTheme;\n","import { useMemo } from \"react\"\n\nimport { usePageContext } from \"./usePageContext\"\n\nimport type { PageUserInfo, PageUserType } from \"../../core/types\"\n\nexport interface CurrentUserState {\n user: PageUserInfo & { userType: PageUserType; isGuest: boolean }\n isGuest: boolean\n isInternalUser: boolean\n displayName: string\n primaryDepartment: NonNullable<PageUserInfo[\"departments\"]>[number] | null\n affiliatedDepartment: PageUserInfo[\"affiliatedDepartment\"] | null\n}\n\nexport const useCurrentUser = (): CurrentUserState => {\n const { user } = usePageContext()\n\n return useMemo(() => {\n const userType: PageUserType =\n user.userType === \"guest\" || user.isGuest ? \"guest\" : \"normal\"\n const isGuest = userType === \"guest\"\n\n return {\n user: {\n ...user,\n isGuest,\n userType,\n },\n isGuest,\n isInternalUser: !isGuest,\n displayName: user.name || user.username || user.id,\n primaryDepartment: user.departments?.[0] || null,\n affiliatedDepartment: user.affiliatedDepartment || null,\n }\n }, [user])\n}\n","import { usePageSdkStore } from \"../store\"\n\nimport type { PageContext } from \"../../core/types\"\n\nexport const usePageContext = (): PageContext => {\n return usePageSdkStore().context\n}\n","import { useCallback, useEffect, useRef, useState } from \"react\"\n\nimport { usePageSdk } from \"./usePageSdk\"\n\nimport type { PageApiResponse } from \"../../core/types\"\nimport type { Dispatch, SetStateAction } from \"react\"\n\nconst createParamsSignature = (value: unknown): string => {\n try {\n return JSON.stringify(value || {})\n } catch {\n return \"\"\n }\n}\n\nexport interface UseDataSourceOptions<\n TResult = unknown,\n TData = TResult,\n TParams extends Record<string, unknown> = Record<string, unknown>,\n> {\n params?: TParams\n immediate?: boolean\n transform?: (result: TResult, response: PageApiResponse<TResult>) => TData\n}\n\nexport interface UseDataSourceResult<\n TResult = unknown,\n TData = TResult,\n TParams extends Record<string, unknown> = Record<string, unknown>,\n> {\n response: PageApiResponse<TResult> | null\n result: TResult | null\n data: TData | null\n loading: boolean\n error: Error | null\n refresh: (params?: TParams) => Promise<PageApiResponse<TResult> | null>\n run: (params?: TParams) => Promise<PageApiResponse<TResult> | null>\n setResponse: Dispatch<SetStateAction<PageApiResponse<TResult> | null>>\n setResult: Dispatch<SetStateAction<TResult | null>>\n setData: Dispatch<SetStateAction<TData | null>>\n}\n\nexport const useDataSource = <\n TResult = unknown,\n TData = TResult,\n TParams extends Record<string, unknown> = Record<string, unknown>,\n>(\n name: string,\n options: UseDataSourceOptions<TResult, TData, TParams> = {},\n): UseDataSourceResult<TResult, TData, TParams> => {\n const sdk = usePageSdk()\n const { params, immediate = true, transform } = options\n const paramsRef = useRef(params)\n const transformRef = useRef(transform)\n const paramsSignature = createParamsSignature(params)\n const [response, setResponse] = useState<PageApiResponse<TResult> | null>(\n null,\n )\n const [result, setResult] = useState<TResult | null>(null)\n const [data, setData] = useState<TData | null>(null)\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n\n paramsRef.current = params\n transformRef.current = transform\n\n const run = useCallback(\n async (overrideParams?: TParams) => {\n setLoading(true)\n setError(null)\n try {\n const response = await sdk.dataSource.run<TResult>(\n name,\n overrideParams || paramsRef.current || {},\n )\n setResponse(response)\n setResult(response.result as TResult | null)\n const activeTransform = transformRef.current\n const nextData = activeTransform\n ? activeTransform(response.result as TResult, response)\n : ((response.result ?? null) as unknown as TData | null)\n setData(nextData)\n return response\n } catch (runtimeError) {\n const nextError =\n runtimeError instanceof Error\n ? runtimeError\n : new Error(String(runtimeError))\n setError(nextError)\n setResponse(null)\n setResult(null)\n return null\n } finally {\n setLoading(false)\n }\n },\n [name, sdk.dataSource],\n )\n\n useEffect(() => {\n if (!immediate) {\n return\n }\n void run()\n }, [immediate, paramsSignature, run])\n\n return {\n response,\n result,\n data,\n loading,\n error,\n refresh: run,\n run,\n setResponse,\n setResult,\n setData,\n }\n}\n","import { usePageSdkStore } from \"../store\"\n\nimport type { PageSdk } from \"../../core/types\"\n\nexport const usePageSdk = (): PageSdk => {\n return usePageSdkStore().sdk\n}\n","import { useCallback, useEffect, useMemo, useState } from \"react\"\n\nimport { usePageSdk } from \"./usePageSdk\"\n\nimport type {\n PageApiResponse,\n ViewFieldPermissionValue,\n ViewOperationPermission,\n ViewPermissionSummary,\n} from \"../../core/types\"\n\nexport interface UseFormViewPermissionsOptions {\n appType?: string\n immediate?: boolean\n}\n\nexport interface UseFormViewPermissionsState {\n summary: ViewPermissionSummary\n response: PageApiResponse<ViewPermissionSummary> | null\n loading: boolean\n error: Error | null\n refresh: () => Promise<PageApiResponse<ViewPermissionSummary> | null>\n can: (operation: ViewOperationPermission) => boolean\n getFieldPermission: (fieldName: string) => ViewFieldPermissionValue | null\n}\n\nconst EMPTY_SUMMARY: ViewPermissionSummary = {\n fieldPermissions: {},\n operations: [],\n}\n\nconst toError = (error: unknown): Error => {\n if (error instanceof Error) {\n return error\n }\n if (\n typeof error === \"object\" &&\n error !== null &&\n \"message\" in error &&\n typeof error.message === \"string\"\n ) {\n return new Error(error.message)\n }\n return new Error(String(error || \"获取查看态权限失败\"))\n}\n\nexport const useFormViewPermissions = (\n formUuid: string,\n options: UseFormViewPermissionsOptions = {},\n): UseFormViewPermissionsState => {\n const sdk = usePageSdk()\n const [summary, setSummary] = useState<ViewPermissionSummary>(EMPTY_SUMMARY)\n const [response, setResponse] =\n useState<PageApiResponse<ViewPermissionSummary> | null>(null)\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n const immediate = options.immediate ?? true\n\n const refresh = useCallback(async () => {\n const normalizedFormUuid = String(formUuid || \"\").trim()\n if (!normalizedFormUuid) {\n setSummary(EMPTY_SUMMARY)\n setResponse(null)\n return null\n }\n\n setLoading(true)\n setError(null)\n\n try {\n const nextResponse =\n await sdk.permission.formGroup.getViewPermissionSummary({\n appType: options.appType,\n formUuid: normalizedFormUuid,\n })\n const nextSummary = nextResponse.result || EMPTY_SUMMARY\n setResponse(nextResponse)\n setSummary({\n fieldPermissions: nextSummary.fieldPermissions || {},\n operations: nextSummary.operations || [],\n })\n return nextResponse\n } catch (requestError) {\n const nextError = toError(requestError)\n setError(nextError)\n setResponse(null)\n setSummary(EMPTY_SUMMARY)\n return null\n } finally {\n setLoading(false)\n }\n }, [formUuid, options.appType, sdk])\n\n useEffect(() => {\n if (!immediate) {\n return\n }\n void refresh()\n }, [immediate, refresh])\n\n const operationSet = useMemo(\n () => new Set(summary.operations),\n [summary.operations],\n )\n\n const can = useCallback(\n (operation: ViewOperationPermission) => operationSet.has(operation),\n [operationSet],\n )\n\n const getFieldPermission = useCallback(\n (fieldName: string) => summary.fieldPermissions[fieldName] || null,\n [summary.fieldPermissions],\n )\n\n return {\n summary,\n response,\n loading,\n error,\n refresh,\n can,\n getFieldPermission,\n }\n}\n","import { usePageContext } from \"./usePageContext\"\n\nimport type { PageMessageApi } from \"../../core/types\"\n\nexport const useMessage = (): PageMessageApi => {\n return usePageContext().ui.message\n}\n","import { usePageContext } from \"./usePageContext\"\n\nimport type { PageModalApi } from \"../../core/types\"\n\nexport const useModal = (): PageModalApi => {\n return usePageContext().ui.modal\n}\n","import { usePageContext } from \"./usePageContext\"\n\nimport type { PageNavigationApi } from \"../../core/types\"\n\nexport const useNavigation = (): PageNavigationApi => {\n return usePageContext().navigation\n}\n","import { usePageContext } from \"./usePageContext\"\n\nexport const usePageProps = <T extends object = Record<string, unknown>>() => {\n return usePageContext().page.props as T\n}\n","import { usePageContext } from \"./usePageContext\"\n\nimport type { PageRouteInfo } from \"../../core/types\"\n\nexport const usePageRoute = (): PageRouteInfo => {\n return usePageContext().route\n}\n","import React, {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from \"react\"\nimport { createBoundFetch } from \"../core/fetch\"\n\nexport type RuntimeErrorType =\n | \"unauthenticated\"\n | \"forbidden\"\n | \"network\"\n | \"unknown\"\n\nexport type RuntimeRequestError = Error & {\n type?: RuntimeErrorType\n status?: number\n code?: number | string\n payload?: unknown\n}\n\nexport interface RuntimeErrorSnapshot {\n type: RuntimeErrorType\n status?: number\n code?: number | string\n message: string\n payload?: unknown\n}\n\nexport class RuntimeHttpError extends Error {\n type: RuntimeErrorType\n status?: number\n code?: number | string\n payload?: unknown\n\n constructor(snapshot: RuntimeErrorSnapshot) {\n super(snapshot.message)\n this.name = \"RuntimeHttpError\"\n this.type = snapshot.type\n this.status = snapshot.status\n this.code = snapshot.code\n this.payload = snapshot.payload\n }\n}\n\nexport interface RuntimeMenuItem {\n id: string\n name: string\n resourceCode?: string | null\n routeCode?: string | null\n path?: string | null\n type?: string\n formUuid?: string | null\n pageId?: string | null\n parentId?: string | null\n sortOrder?: number\n isHidden?: boolean\n icon?: string | null\n children?: RuntimeMenuItem[]\n [key: string]: unknown\n}\n\nexport interface RuntimePagePermissions {\n appType: string\n hasFullAccess: boolean\n roleCodes: string[]\n roleSource?: string\n menuFormUuids: string[]\n menuCodes: string[]\n routeCodes: string[]\n pathPatterns: string[]\n}\n\nexport interface RuntimeBootstrap {\n appType: string\n app?: Record<string, unknown> | null\n user?: Record<string, unknown> | null\n runtime?: {\n mode?: \"legacy\" | \"react-spa\" | string\n settings?: Record<string, unknown>\n activeReleaseId?: string | null\n activeBuildId?: string | null\n indexUrl?: string | null\n assetBaseUrl?: string | null\n }\n permissions?: RuntimePagePermissions\n menus?: RuntimeMenuItem[]\n servicePrefix?: string\n}\n\nexport interface RouteAccessResult {\n appType: string\n canAccess: boolean\n routeCode?: string\n menuCode?: string\n path?: string\n status?: number\n code?: number | string\n message?: string\n errorType?: RuntimeErrorType\n payload?: unknown\n permissions?: RuntimePagePermissions\n}\n\nexport interface RuntimeRequestState<T> {\n data: T | null\n loading: boolean\n error: RuntimeRequestError | null\n}\n\nexport interface RuntimeReloadOptions {\n accessToken?: string | null\n}\n\nexport interface OpenXiangdaProviderProps {\n appType?: string\n servicePrefix?: string\n fetchImpl?: typeof fetch\n children: React.ReactNode\n}\n\ninterface OpenXiangdaRuntimeStore extends RuntimeRequestState<RuntimeBootstrap> {\n appType: string\n servicePrefix: string\n fetchImpl: typeof fetch\n reload: (options?: RuntimeReloadOptions) => Promise<void>\n setAccessToken: (accessToken?: string | null) => void\n}\n\nconst OpenXiangdaRuntimeContext =\n createContext<OpenXiangdaRuntimeStore | null>(null)\n\nexport const OpenXiangdaProvider: React.FC<OpenXiangdaProviderProps> = ({\n appType,\n servicePrefix = \"/service\",\n fetchImpl,\n children,\n}) => {\n const resolvedFetch = useMemo(() => createBoundFetch(fetchImpl), [fetchImpl])\n const resolvedAppType = useMemo(\n () => appType || resolveAppTypeFromLocation(),\n [appType],\n )\n const [accessToken, setAccessTokenState] = useState<string | null>(null)\n const setAccessToken = useCallback(\n (nextAccessToken?: string | null) => {\n setAccessTokenState(nextAccessToken || null)\n },\n [],\n )\n const authorizedFetch = useMemo(\n () => createAuthorizedFetch(resolvedFetch, accessToken),\n [accessToken, resolvedFetch],\n )\n const [state, setState] = useState<RuntimeRequestState<RuntimeBootstrap>>({\n data: null,\n loading: true,\n error: null,\n })\n\n const reload = useCallback(async (options: RuntimeReloadOptions = {}) => {\n if (!resolvedAppType) {\n setState({\n data: null,\n loading: false,\n error: createRuntimeError({\n message: \"appType 不能为空\",\n type: \"unknown\",\n }),\n })\n return\n }\n setState(prev => ({ ...prev, loading: true, error: null }))\n const requestFetch =\n options.accessToken !== undefined\n ? createAuthorizedFetch(resolvedFetch, options.accessToken || null)\n : authorizedFetch\n try {\n const response = await requestFetch(\n buildServiceUrl(\n servicePrefix,\n `/openxiangda-api/v1/apps/${encodeURIComponent(\n resolvedAppType,\n )}/runtime/bootstrap`,\n ),\n {\n credentials: \"include\",\n headers: { accept: \"application/json\" },\n },\n )\n const payload = await readJsonPayload(response)\n if (!response.ok || payload?.code >= 400) {\n throw createRuntimeHttpError(\n response,\n payload,\n payload?.message || `Runtime bootstrap failed: ${response.status}`,\n )\n }\n setState({\n data: payload?.data || null,\n loading: false,\n error: null,\n })\n } catch (error) {\n setState({\n data: null,\n loading: false,\n error: normalizeRuntimeError(error),\n })\n }\n }, [authorizedFetch, resolvedAppType, resolvedFetch, servicePrefix])\n\n useEffect(() => {\n void reload()\n }, [reload])\n\n const value = useMemo<OpenXiangdaRuntimeStore>(\n () => ({\n ...state,\n appType: resolvedAppType,\n servicePrefix,\n fetchImpl: authorizedFetch,\n reload,\n setAccessToken,\n }),\n [authorizedFetch, reload, resolvedAppType, servicePrefix, state],\n )\n\n return (\n <OpenXiangdaRuntimeContext.Provider value={value}>\n {children}\n </OpenXiangdaRuntimeContext.Provider>\n )\n}\n\nexport const useOpenXiangda = () => {\n const context = useContext(OpenXiangdaRuntimeContext)\n if (!context) {\n throw new Error(\"useOpenXiangda must be used inside OpenXiangdaProvider\")\n }\n return context\n}\n\nexport const useRuntimeBootstrap = () => useOpenXiangda()\n\nexport const useAppMenus = () => {\n const runtime = useOpenXiangda()\n return {\n ...runtime,\n data: runtime.data?.menus || [],\n }\n}\n\nexport const usePermission = () => {\n const runtime = useOpenXiangda()\n return {\n ...runtime,\n data: runtime.data?.permissions || null,\n }\n}\n\nexport interface UseCanAccessRouteInput {\n routeCode?: string\n menuCode?: string\n path?: string\n}\n\nexport const useCanAccessRoute = (input: UseCanAccessRouteInput) => {\n const runtime = useOpenXiangda()\n const [state, setState] = useState<RuntimeRequestState<RouteAccessResult>>({\n data: null,\n loading: true,\n error: null,\n })\n\n useEffect(() => {\n let disposed = false\n const check = async () => {\n const permissions = runtime.data?.permissions\n if (!runtime.appType || runtime.loading) {\n setState(prev => ({ ...prev, loading: runtime.loading }))\n return\n }\n if (runtime.error && !runtime.data) {\n const snapshot = toRuntimeErrorSnapshot(runtime.error)\n setState({\n data: {\n appType: runtime.appType,\n canAccess: false,\n status: snapshot.status,\n code: snapshot.code,\n message: snapshot.message,\n errorType: snapshot.type,\n payload: snapshot.payload,\n },\n loading: false,\n error: runtime.error,\n })\n return\n }\n if (permissions?.hasFullAccess) {\n setState({\n data: { appType: runtime.appType, canAccess: true, permissions },\n loading: false,\n error: null,\n })\n return\n }\n setState(prev => ({ ...prev, loading: true, error: null }))\n try {\n const response = await runtime.fetchImpl(\n buildServiceUrl(\n runtime.servicePrefix,\n `/openxiangda-api/v1/apps/${encodeURIComponent(\n runtime.appType,\n )}/runtime/routes/check`,\n ),\n {\n method: \"POST\",\n credentials: \"include\",\n headers: {\n accept: \"application/json\",\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(input),\n },\n )\n const payload = await readJsonPayload(response)\n const code = payload?.code ?? response.status\n const canAccess = Boolean(payload?.data?.canAccess)\n const errorType = canAccess\n ? undefined\n : classifyRuntimeError(response.status, code)\n const data: RouteAccessResult = {\n ...(payload?.data || {\n appType: runtime.appType,\n canAccess: false,\n }),\n appType: payload?.data?.appType || runtime.appType,\n canAccess,\n status: response.status,\n code,\n message: payload?.message,\n errorType,\n payload,\n }\n if (!disposed) {\n const shouldTreatAsError =\n !response.ok || (typeof code === \"number\" && code >= 500)\n setState({\n data,\n loading: false,\n error: shouldTreatAsError\n ? createRuntimeHttpError(\n response,\n payload,\n payload?.message || `Route check failed: ${response.status}`,\n )\n : null,\n })\n }\n } catch (error) {\n if (!disposed) {\n setState({\n data: null,\n loading: false,\n error: normalizeRuntimeError(error),\n })\n }\n }\n }\n void check()\n return () => {\n disposed = true\n }\n }, [\n input.menuCode,\n input.path,\n input.routeCode,\n runtime.appType,\n runtime.data?.permissions,\n runtime.fetchImpl,\n runtime.loading,\n runtime.servicePrefix,\n ])\n\n return {\n ...state,\n canAccess: Boolean(state.data?.canAccess),\n }\n}\n\nexport interface PermissionBoundaryProps extends UseCanAccessRouteInput {\n children: React.ReactNode\n fallback?: React.ReactNode | PermissionBoundaryFallback\n loadingFallback?: React.ReactNode | PermissionBoundaryFallback\n}\n\nexport interface PermissionBoundaryFallbackState {\n access: ReturnType<typeof useCanAccessRoute>\n runtime: ReturnType<typeof useOpenXiangda>\n error: RuntimeRequestError | null\n errorType: RuntimeErrorType\n status?: number\n code?: number | string\n message: string\n}\n\nexport type PermissionBoundaryFallback = (\n state: PermissionBoundaryFallbackState,\n) => React.ReactNode\n\nexport const PermissionBoundary: React.FC<PermissionBoundaryProps> = ({\n children,\n fallback = null,\n loadingFallback = null,\n routeCode,\n menuCode,\n path,\n}) => {\n const runtime = useOpenXiangda()\n const access = useCanAccessRoute({ routeCode, menuCode, path })\n const fallbackState = createPermissionFallbackState(access, runtime)\n if (access.loading) {\n return <>{renderBoundaryFallback(loadingFallback, fallbackState)}</>\n }\n if (!access.canAccess) {\n return <>{renderBoundaryFallback(fallback, fallbackState)}</>\n }\n return <>{children}</>\n}\n\nexport interface RuntimeResolveLoginOptions {\n redirectUri?: string\n loginUrl?: string\n domain?: string\n}\n\nexport interface RuntimeRedirectLoginOptions extends RuntimeResolveLoginOptions {\n replace?: boolean\n}\n\nexport interface RuntimeLogoutOptions extends RuntimeRedirectLoginOptions {\n continueOnError?: boolean\n}\n\nexport const useRuntimeAuth = () => {\n const runtime = useOpenXiangda()\n\n const resolveLoginUrl = useCallback(\n async (options: RuntimeResolveLoginOptions = {}) => {\n const redirectUri = options.redirectUri || getCurrentHref()\n const domain = options.domain || getCurrentHostname()\n const appTenantId = getRecordString(runtime.data?.app, \"tenantId\")\n\n try {\n const statusUrl = withQuery(\n buildServiceUrl(runtime.servicePrefix, \"/api/sso/status\"),\n { domain },\n )\n const statusResponse = await runtime.fetchImpl(statusUrl, {\n credentials: \"include\",\n headers: { accept: \"application/json\" },\n })\n const statusPayload = await readJsonPayload(statusResponse)\n const sso = statusPayload?.data || {}\n const enabled = Boolean(sso.enabled)\n const shouldUseSso = Boolean(\n enabled && (sso.forceLogin ?? sso.autoRedirect ?? true),\n )\n if (shouldUseSso) {\n const loginUrlResponse = await runtime.fetchImpl(\n withQuery(buildServiceUrl(runtime.servicePrefix, \"/api/sso/login-url\"), {\n domain,\n redirectUri,\n ...(sso.tenantId || appTenantId\n ? { tenantId: String(sso.tenantId || appTenantId) }\n : {}),\n ...(sso.protocol ? { protocol: String(sso.protocol) } : {}),\n }),\n {\n credentials: \"include\",\n headers: { accept: \"application/json\" },\n },\n )\n const loginUrlPayload = await readJsonPayload(loginUrlResponse)\n const loginUrl =\n loginUrlPayload?.data?.loginUrl ||\n loginUrlPayload?.data?.url ||\n loginUrlPayload?.loginUrl ||\n loginUrlPayload?.url\n if (loginUrl) return String(loginUrl)\n }\n } catch {\n // Login resolution must always have a local fallback so logged-out\n // users are not stranded behind a permission state.\n }\n\n const configuredLoginUrl =\n options.loginUrl ||\n getRuntimeEnv(\"OPENXIANGDA_LOGIN_URL\") ||\n getRuntimeEnv(\"VITE_OPENXIANGDA_LOGIN_URL\") ||\n getRuntimeEnv(\"APP_LOGIN_URL\") ||\n getRuntimeEnv(\"VITE_APP_LOGIN_URL\") ||\n getRuntimeEnv(\"VITE_BATH_AUTH_URL\") ||\n getRuntimeEnv(\"BATH_AUTH_URL\")\n if (configuredLoginUrl) {\n return attachCallback(configuredLoginUrl, redirectUri)\n }\n return attachCallback(\"/platform/login\", redirectUri)\n },\n [runtime.data?.app, runtime.fetchImpl, runtime.servicePrefix],\n )\n\n const redirectToLogin = useCallback(\n async (options: RuntimeRedirectLoginOptions = {}) => {\n const loginUrl = await resolveLoginUrl(options)\n if (typeof window !== \"undefined\") {\n if (options.replace === false) {\n window.location.assign(loginUrl)\n } else {\n window.location.replace(loginUrl)\n }\n }\n return loginUrl\n },\n [resolveLoginUrl],\n )\n\n const logout = useCallback(async () => {\n const response = await runtime.fetchImpl(\n buildServiceUrl(runtime.servicePrefix, \"/api/auth/logout\"),\n {\n method: \"POST\",\n credentials: \"include\",\n headers: { accept: \"application/json\" },\n },\n )\n const payload = await readJsonPayload(response)\n if (!response.ok || payload?.code >= 400) {\n throw createRuntimeHttpError(\n response,\n payload,\n payload?.message || `Logout failed: ${response.status}`,\n )\n }\n return payload\n }, [runtime.fetchImpl, runtime.servicePrefix])\n\n const logoutAndRedirect = useCallback(\n async (options: RuntimeLogoutOptions = {}) => {\n try {\n await logout()\n } catch (error) {\n if (options.continueOnError === false) throw error\n }\n return redirectToLogin(options)\n },\n [logout, redirectToLogin],\n )\n\n return {\n logout,\n logoutAndRedirect,\n redirectToLogin,\n resolveLoginUrl,\n }\n}\n\nconst buildServiceUrl = (servicePrefix: string, path: string) => {\n const prefix = servicePrefix.endsWith(\"/\")\n ? servicePrefix.slice(0, -1)\n : servicePrefix\n const suffix = path.startsWith(\"/\") ? path : `/${path}`\n return `${prefix}${suffix}`\n}\n\nconst createAuthorizedFetch = (\n baseFetch: typeof fetch,\n accessToken?: string | null,\n): typeof fetch => {\n if (!accessToken) return baseFetch\n return ((input, init = {}) => {\n const headers = new Headers(init.headers || {})\n if (!headers.has(\"authorization\")) {\n headers.set(\"authorization\", `Bearer ${accessToken}`)\n }\n return baseFetch(input, {\n ...init,\n headers,\n })\n }) as typeof fetch\n}\n\nconst readJsonPayload = async (response: Response) => {\n try {\n return await response.json()\n } catch {\n return null\n }\n}\n\nconst createRuntimeHttpError = (\n response: Response,\n payload: unknown,\n fallbackMessage: string,\n): RuntimeRequestError =>\n createRuntimeError({\n type: classifyRuntimeError(\n response.status,\n getRecordValue(payload, \"code\") as number | string | undefined,\n ),\n status: response.status,\n code: getRecordValue(payload, \"code\") as number | string | undefined,\n message:\n (getRecordValue(payload, \"message\") as string | undefined) ||\n fallbackMessage,\n payload,\n })\n\nconst createRuntimeError = (\n snapshot: RuntimeErrorSnapshot,\n): RuntimeRequestError =>\n new RuntimeHttpError({\n ...snapshot,\n type: snapshot.type || \"unknown\",\n message: snapshot.message || \"Runtime request failed\",\n })\n\nconst normalizeRuntimeError = (error: unknown): RuntimeRequestError => {\n if (error instanceof RuntimeHttpError) return error\n if (error instanceof Error) {\n const runtimeError = error as RuntimeRequestError\n runtimeError.type = runtimeError.type || classifyRuntimeError(runtimeError.status, runtimeError.code)\n return runtimeError\n }\n return createRuntimeError({\n type: \"unknown\",\n message: String(error),\n })\n}\n\nconst toRuntimeErrorSnapshot = (\n error: RuntimeRequestError,\n): RuntimeErrorSnapshot => ({\n type: error.type || classifyRuntimeError(error.status, error.code),\n status: error.status,\n code: error.code,\n message: error.message || \"Runtime request failed\",\n payload: error.payload,\n})\n\nconst classifyRuntimeError = (\n status?: number,\n code?: number | string,\n): RuntimeErrorType => {\n const normalizedCode = typeof code === \"string\" ? Number(code) : code\n if (status === 401 || normalizedCode === 401) return \"unauthenticated\"\n if (status === 403 || normalizedCode === 403) return \"forbidden\"\n if (!status && !normalizedCode) return \"network\"\n return \"unknown\"\n}\n\nconst createPermissionFallbackState = (\n access: ReturnType<typeof useCanAccessRoute>,\n runtime: ReturnType<typeof useOpenXiangda>,\n): PermissionBoundaryFallbackState => {\n const error = access.error || runtime.error\n const accessData = access.data\n const errorType =\n accessData?.errorType ||\n error?.type ||\n (!access.canAccess ? \"forbidden\" : \"unknown\")\n return {\n access,\n runtime,\n error,\n errorType,\n status: accessData?.status || error?.status,\n code: accessData?.code || error?.code,\n message:\n accessData?.message ||\n error?.message ||\n (errorType === \"unauthenticated\"\n ? \"当前账号尚未登录\"\n : \"当前账号没有访问权限\"),\n }\n}\n\nconst renderBoundaryFallback = (\n fallback: React.ReactNode | PermissionBoundaryFallback,\n state: PermissionBoundaryFallbackState,\n) => (typeof fallback === \"function\" ? fallback(state) : fallback)\n\nconst withQuery = (\n url: string,\n params: Record<string, string | number | boolean | undefined>,\n) => {\n const query = new URLSearchParams()\n Object.entries(params).forEach(([key, value]) => {\n if (value === undefined || value === \"\") return\n query.set(key, String(value))\n })\n const serialized = query.toString()\n if (!serialized) return url\n return `${url}${url.includes(\"?\") ? \"&\" : \"?\"}${serialized}`\n}\n\nconst attachCallback = (loginUrl: string, callback: string) => {\n if (!callback) return loginUrl\n try {\n const base =\n typeof window !== \"undefined\" ? window.location.origin : \"http://localhost\"\n const parsed = new URL(loginUrl, base)\n if (!parsed.searchParams.has(\"callback\") && !parsed.searchParams.has(\"redirectUri\")) {\n parsed.searchParams.set(\"callback\", callback)\n }\n if (loginUrl.startsWith(\"http://\") || loginUrl.startsWith(\"https://\")) {\n return parsed.toString()\n }\n return `${parsed.pathname}${parsed.search}${parsed.hash}`\n } catch {\n const separator = loginUrl.includes(\"?\") ? \"&\" : \"?\"\n return `${loginUrl}${separator}callback=${encodeURIComponent(callback)}`\n }\n}\n\nconst getCurrentHref = () =>\n typeof window === \"undefined\" ? \"\" : window.location.href\n\nconst getCurrentHostname = () =>\n typeof window === \"undefined\" ? \"\" : window.location.hostname\n\nconst getRuntimeEnv = (key: string) => {\n const env =\n typeof process !== \"undefined\"\n ? (process as unknown as { env?: Record<string, string | undefined> }).env\n : undefined\n return env?.[key]\n}\n\nconst getRecordValue = (value: unknown, key: string) => {\n if (!value || typeof value !== \"object\") return undefined\n return (value as Record<string, unknown>)[key]\n}\n\nconst getRecordString = (value: unknown, key: string) => {\n const result = getRecordValue(value, key)\n return typeof result === \"string\" ? result : undefined\n}\n\nconst resolveAppTypeFromLocation = () => {\n if (typeof window === \"undefined\") return \"\"\n const segments = window.location.pathname.split(\"/\").filter(Boolean)\n const viewIndex = segments[0] === \"view\" ? 1 : 0\n if (segments[viewIndex] === \"submit\") return segments[viewIndex + 1] || \"\"\n if (segments[viewIndex] === \"preview\") return segments[viewIndex + 1] || \"\"\n return segments[viewIndex] || \"\"\n}\n\nexport {\n LoginPage,\n useAuth,\n useLoginMethods,\n} from \"./auth\"\nexport type {\n LoginPageProps,\n UseAuthOptions,\n UseLoginMethodsState,\n} from \"./auth\"\nexport {\n AuthClientError,\n createAuthClient,\n} from \"../core/auth\"\nexport type {\n AppAuthClient,\n AuthMethod,\n AuthMethodType,\n AuthTokenData,\n DingTalkLoginInput,\n GuestLoginInput,\n LoginMethodsResult,\n PasswordLoginInput,\n PhoneCodeInput,\n PhoneCodeLoginInput,\n PhoneCodeRegisterInput,\n PhoneCodeSendResult,\n RefreshInput,\n ResolveLoginUrlInput,\n SsoLoginUrlInput,\n SsoLoginUrlResult,\n} from \"../core/auth\"\n","export const createBoundFetch = (fetchImpl?: typeof fetch): typeof fetch => {\n const baseFetch = fetchImpl || globalThis.fetch;\n return ((input, init) => baseFetch.call(globalThis, input, init)) as typeof fetch;\n};\n","import React, {\n type CSSProperties,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from \"react\"\nimport {\n Alert,\n Button,\n Card,\n Empty,\n Form,\n Input,\n Space,\n Tabs,\n Typography,\n} from \"antd\"\nimport {\n LoginOutlined,\n MobileOutlined,\n QrcodeOutlined,\n SafetyCertificateOutlined,\n UserOutlined,\n} from \"@ant-design/icons\"\nimport {\n type AppAuthClient,\n type AuthClientOptions,\n type AuthMethod,\n type AuthTokenData,\n createAuthClient,\n type LoginMethodsResult,\n} from \"../core/auth\"\nimport { useOpenXiangda } from \"./openxiangdaProvider\"\n\nexport interface UseAuthOptions extends Partial<AuthClientOptions> {}\n\nexport interface UseLoginMethodsState {\n data: LoginMethodsResult | null\n methods: AuthMethod[]\n loading: boolean\n error: Error | null\n reload: () => Promise<void>\n}\n\nexport interface LoginPageProps extends UseAuthOptions {\n title?: React.ReactNode\n subtitle?: React.ReactNode\n className?: string\n style?: CSSProperties\n defaultMethod?: \"password\" | \"phone_code\"\n redirectUrl?: string\n redirectOnSuccess?: boolean\n onSuccess?: (data: AuthTokenData) => void | Promise<void>\n}\n\ninterface PasswordFormValues {\n username: string\n password: string\n}\n\ninterface PhoneCodeFormValues {\n phone: string\n code: string\n}\n\nexport const useAuth = (options: UseAuthOptions = {}) => {\n const runtime = useOpenXiangda()\n const client = useMemo(\n () =>\n createAuthClient({\n appType: options.appType || runtime.appType,\n servicePrefix: options.servicePrefix || runtime.servicePrefix,\n fetchImpl: options.fetchImpl || runtime.fetchImpl,\n }),\n [\n options.appType,\n options.fetchImpl,\n options.servicePrefix,\n runtime.appType,\n runtime.fetchImpl,\n runtime.servicePrefix,\n ],\n )\n\n return useMemo(\n () => ({\n client,\n getMethods: client.getMethods,\n passwordLogin: client.passwordLogin,\n dingtalkLogin: client.dingtalkLogin,\n guestLogin: client.guestLogin,\n sendPhoneCode: client.sendPhoneCode,\n phoneCodeLogin: client.phoneCodeLogin,\n registerWithPhoneCode: client.registerWithPhoneCode,\n getSsoLoginUrl: client.getSsoLoginUrl,\n refresh: client.refresh,\n logout: client.logout,\n resolveLoginUrl: client.resolveLoginUrl,\n }),\n [client],\n )\n}\n\nexport const useLoginMethods = (\n options: UseAuthOptions = {},\n): UseLoginMethodsState => {\n const auth = useAuth(options)\n const [state, setState] = useState<{\n data: LoginMethodsResult | null\n loading: boolean\n error: Error | null\n }>({\n data: null,\n loading: true,\n error: null,\n })\n\n const reload = useCallback(async () => {\n setState(prev => ({ ...prev, loading: true, error: null }))\n try {\n const data = await auth.getMethods()\n setState({ data, loading: false, error: null })\n } catch (error) {\n setState({\n data: null,\n loading: false,\n error: normalizeError(error),\n })\n }\n }, [auth])\n\n useEffect(() => {\n let disposed = false\n const run = async () => {\n setState(prev => ({ ...prev, loading: true, error: null }))\n try {\n const data = await auth.getMethods()\n if (!disposed) setState({ data, loading: false, error: null })\n } catch (error) {\n if (!disposed) {\n setState({\n data: null,\n loading: false,\n error: normalizeError(error),\n })\n }\n }\n }\n void run()\n return () => {\n disposed = true\n }\n }, [auth])\n\n return {\n ...state,\n methods: state.data?.methods || [],\n reload,\n }\n}\n\nexport const LoginPage: React.FC<LoginPageProps> = ({\n title,\n subtitle,\n className,\n style,\n defaultMethod,\n redirectUrl,\n redirectOnSuccess = true,\n onSuccess,\n ...authOptions\n}) => {\n const runtime = useOpenXiangda()\n const auth = useAuth(authOptions)\n const methodsState = useLoginMethods(authOptions)\n const [passwordForm] = Form.useForm<PasswordFormValues>()\n const [phoneForm] = Form.useForm<PhoneCodeFormValues>()\n const [activeMethod, setActiveMethod] = useState<string>(\n defaultMethod || \"password\",\n )\n const [phonePurpose, setPhonePurpose] = useState<\"login\" | \"register\">(\n \"login\",\n )\n const [phoneChallengeId, setPhoneChallengeId] = useState(\"\")\n const [submitting, setSubmitting] = useState(false)\n const [sendingCode, setSendingCode] = useState(false)\n const [error, setError] = useState<string | null>(null)\n\n const methods = methodsState.methods.filter(method => method.enabled !== false)\n const passwordMethod = findMethod(methods, \"password\")\n const phoneMethod = findMethod(methods, \"phone_code\")\n const dingtalkMethod = findMethod(methods, \"dingtalk\")\n const ssoMethod = findMethod(methods, \"sso\")\n const guestMethod = findMethod(methods, \"guest\")\n const allowRegister = methodsState.data?.registration?.mode !== \"reject\"\n\n const tabItems = useMemo(() => {\n const items = []\n if (passwordMethod) {\n items.push({\n key: \"password\",\n label: (\n <Space size={6}>\n <UserOutlined />\n <span>{passwordMethod.label || \"账号密码\"}</span>\n </Space>\n ),\n children: (\n <PasswordLoginForm\n form={passwordForm}\n loading={submitting}\n onFinish={async values => {\n setSubmitting(true)\n setError(null)\n try {\n await handleSuccess(\n await auth.passwordLogin({\n username: values.username,\n password: values.password,\n }),\n )\n } catch (loginError) {\n setError(normalizeError(loginError).message)\n } finally {\n setSubmitting(false)\n }\n }}\n />\n ),\n })\n }\n if (phoneMethod) {\n items.push({\n key: \"phone_code\",\n label: (\n <Space size={6}>\n <MobileOutlined />\n <span>{phoneMethod.label || \"手机号\"}</span>\n </Space>\n ),\n children: (\n <PhoneCodeLoginForm\n allowRegister={allowRegister}\n form={phoneForm}\n loading={submitting}\n phonePurpose={phonePurpose}\n sendingCode={sendingCode}\n onPurposeChange={setPhonePurpose}\n onSendCode={async () => {\n const values = await phoneForm.validateFields([\"phone\"])\n setSendingCode(true)\n setError(null)\n try {\n const result = await auth.sendPhoneCode({\n phone: values.phone,\n purpose: phonePurpose,\n })\n setPhoneChallengeId(result.challengeId)\n } catch (sendError) {\n setError(normalizeError(sendError).message)\n } finally {\n setSendingCode(false)\n }\n }}\n onFinish={async values => {\n setSubmitting(true)\n setError(null)\n try {\n const data =\n phonePurpose === \"register\"\n ? await auth.registerWithPhoneCode({\n phone: values.phone,\n code: values.code,\n challengeId: phoneChallengeId,\n })\n : await auth.phoneCodeLogin({\n phone: values.phone,\n code: values.code,\n challengeId: phoneChallengeId,\n })\n await handleSuccess(data)\n } catch (loginError) {\n setError(normalizeError(loginError).message)\n } finally {\n setSubmitting(false)\n }\n }}\n />\n ),\n })\n }\n return items\n }, [\n allowRegister,\n auth,\n handleSuccess,\n passwordForm,\n passwordMethod,\n phoneChallengeId,\n phoneForm,\n phoneMethod,\n phonePurpose,\n sendingCode,\n submitting,\n ])\n\n useEffect(() => {\n const firstKey = tabItems[0]?.key\n if (firstKey && !tabItems.some(item => item.key === activeMethod)) {\n setActiveMethod(firstKey)\n }\n }, [activeMethod, tabItems])\n\n const handleDingTalkLogin = async () => {\n setSubmitting(true)\n setError(null)\n try {\n const code = await requestDingTalkCode(dingtalkMethod)\n await handleSuccess(\n await auth.dingtalkLogin({\n code,\n corpId: getString(dingtalkMethod, \"corpId\"),\n }),\n )\n } catch (loginError) {\n setError(normalizeError(loginError).message)\n } finally {\n setSubmitting(false)\n }\n }\n\n const handleSsoLogin = async () => {\n setSubmitting(true)\n setError(null)\n try {\n const redirectUri = getCurrentHref()\n const result = await auth.getSsoLoginUrl({\n protocol: getString(ssoMethod, \"protocol\") || \"cas\",\n redirectUri,\n })\n window.location.assign(result.loginUrl)\n } catch (loginError) {\n setError(normalizeError(loginError).message)\n setSubmitting(false)\n }\n }\n\n const handleGuestLogin = async () => {\n setSubmitting(true)\n setError(null)\n try {\n await handleSuccess(\n await auth.guestLogin({\n guestIdentifier: getOrCreateGuestIdentifier(auth.client),\n domain: getCurrentHostname(),\n }),\n )\n } catch (loginError) {\n setError(normalizeError(loginError).message)\n } finally {\n setSubmitting(false)\n }\n }\n\n async function handleSuccess(data: AuthTokenData) {\n await onSuccess?.(data)\n await runtime.reload()\n if (redirectOnSuccess && typeof window !== \"undefined\") {\n window.location.replace(\n redirectUrl || getCallbackUrl() || `/view/${auth.client.appType}`,\n )\n }\n }\n\n return (\n <div\n className={className}\n style={{\n minHeight: \"100vh\",\n display: \"grid\",\n placeItems: \"center\",\n padding: 24,\n background: \"#f6f8fb\",\n ...style,\n }}\n >\n <Card\n style={{\n width: \"min(100%, 420px)\",\n borderRadius: 8,\n boxShadow: \"0 16px 48px rgba(15, 23, 42, 0.10)\",\n }}\n styles={{ body: { padding: 28 } }}\n >\n <Space direction=\"vertical\" size={20} style={{ width: \"100%\" }}>\n <div>\n <Typography.Title level={3} style={{ margin: 0 }}>\n {title || \"应用登录\"}\n </Typography.Title>\n {subtitle ? (\n <Typography.Text type=\"secondary\">{subtitle}</Typography.Text>\n ) : null}\n </div>\n {methodsState.error ? (\n <Alert\n showIcon\n type=\"error\"\n message={methodsState.error.message}\n />\n ) : null}\n {error ? <Alert showIcon type=\"error\" message={error} /> : null}\n {methodsState.loading ? (\n <Button block loading>\n 加载中\n </Button>\n ) : tabItems.length > 0 ? (\n <Tabs\n activeKey={activeMethod}\n items={tabItems}\n onChange={setActiveMethod}\n />\n ) : (\n <Empty description=\"未启用登录方式\" />\n )}\n <Space direction=\"vertical\" size={10} style={{ width: \"100%\" }}>\n {dingtalkMethod ? (\n <Button\n block\n icon={<QrcodeOutlined />}\n loading={submitting}\n onClick={handleDingTalkLogin}\n >\n {dingtalkMethod.label || \"钉钉免登\"}\n </Button>\n ) : null}\n {ssoMethod ? (\n <Button\n block\n icon={<SafetyCertificateOutlined />}\n loading={submitting}\n onClick={handleSsoLogin}\n >\n {ssoMethod.label || \"SSO 登录\"}\n </Button>\n ) : null}\n {guestMethod ? (\n <Button\n block\n icon={<LoginOutlined />}\n loading={submitting}\n onClick={handleGuestLogin}\n >\n {guestMethod.label || \"访客访问\"}\n </Button>\n ) : null}\n </Space>\n </Space>\n </Card>\n </div>\n )\n}\n\nconst PasswordLoginForm: React.FC<{\n form: ReturnType<typeof Form.useForm<PasswordFormValues>>[0]\n loading: boolean\n onFinish: (values: PasswordFormValues) => void\n}> = ({ form, loading, onFinish }) => (\n <Form form={form} layout=\"vertical\" requiredMark={false} onFinish={onFinish}>\n <Form.Item\n label=\"账号\"\n name=\"username\"\n rules={[{ required: true, message: \"请输入账号\" }]}\n >\n <Input autoComplete=\"username\" />\n </Form.Item>\n <Form.Item\n label=\"密码\"\n name=\"password\"\n rules={[{ required: true, message: \"请输入密码\" }]}\n >\n <Input.Password autoComplete=\"current-password\" />\n </Form.Item>\n <Button block htmlType=\"submit\" icon={<LoginOutlined />} loading={loading} type=\"primary\">\n 登录\n </Button>\n </Form>\n)\n\nconst PhoneCodeLoginForm: React.FC<{\n allowRegister: boolean\n form: ReturnType<typeof Form.useForm<PhoneCodeFormValues>>[0]\n loading: boolean\n phonePurpose: \"login\" | \"register\"\n sendingCode: boolean\n onPurposeChange: (purpose: \"login\" | \"register\") => void\n onSendCode: () => Promise<void>\n onFinish: (values: PhoneCodeFormValues) => void\n}> = ({\n allowRegister,\n form,\n loading,\n phonePurpose,\n sendingCode,\n onPurposeChange,\n onSendCode,\n onFinish,\n}) => (\n <Form form={form} layout=\"vertical\" requiredMark={false} onFinish={onFinish}>\n {allowRegister ? (\n <Form.Item style={{ marginBottom: 12 }}>\n <Tabs\n activeKey={phonePurpose}\n items={[\n { key: \"login\", label: \"登录\" },\n { key: \"register\", label: \"注册\" },\n ]}\n onChange={key => onPurposeChange(key === \"register\" ? \"register\" : \"login\")}\n size=\"small\"\n />\n </Form.Item>\n ) : null}\n <Form.Item\n label=\"手机号\"\n name=\"phone\"\n rules={[{ required: true, message: \"请输入手机号\" }]}\n >\n <Input autoComplete=\"tel\" />\n </Form.Item>\n <Form.Item\n label=\"验证码\"\n name=\"code\"\n rules={[{ required: true, message: \"请输入验证码\" }]}\n >\n <Input\n addonAfter={\n <Button\n loading={sendingCode}\n onClick={onSendCode}\n size=\"small\"\n type=\"link\"\n >\n 发送\n </Button>\n }\n autoComplete=\"one-time-code\"\n />\n </Form.Item>\n <Button block htmlType=\"submit\" icon={<MobileOutlined />} loading={loading} type=\"primary\">\n {phonePurpose === \"register\" ? \"注册\" : \"登录\"}\n </Button>\n </Form>\n)\n\nconst findMethod = (methods: AuthMethod[], type: string) =>\n methods.find(method => method.type === type)\n\nconst normalizeError = (error: unknown): Error =>\n error instanceof Error ? error : new Error(String(error || \"请求失败\"))\n\nconst getString = (value: unknown, key: string) => {\n if (!value || typeof value !== \"object\") return undefined\n const result = (value as Record<string, unknown>)[key]\n return typeof result === \"string\" ? result : undefined\n}\n\nconst requestDingTalkCode = (method?: AuthMethod): Promise<string> => {\n const dd =\n typeof window === \"undefined\"\n ? undefined\n : (window as unknown as { dd?: any }).dd\n const corpId = getString(method, \"corpId\")\n return new Promise((resolve, reject) => {\n const requestAuthCode =\n dd?.runtime?.permission?.requestAuthCode || dd?.requestAuthCode\n if (!requestAuthCode) {\n reject(new Error(\"当前环境不支持钉钉免登\"))\n return\n }\n requestAuthCode({\n corpId,\n onSuccess: (result: { code?: string }) => {\n if (result?.code) resolve(result.code)\n else reject(new Error(\"钉钉未返回免登码\"))\n },\n onFail: (error: unknown) => reject(normalizeError(error)),\n })\n })\n}\n\nconst getOrCreateGuestIdentifier = (client: AppAuthClient) => {\n const key = `openxiangda:${client.appType}:guest_id`\n if (typeof window === \"undefined\") return createGuestIdentifier()\n const current = window.localStorage.getItem(key)\n if (current) return current\n const next = createGuestIdentifier()\n window.localStorage.setItem(key, next)\n return next\n}\n\nconst createGuestIdentifier = () =>\n `guest_${Date.now()}_${Math.random().toString(36).slice(2, 10)}`\n\nconst getCurrentHref = () =>\n typeof window === \"undefined\" ? \"\" : window.location.href\n\nconst getCurrentHostname = () =>\n typeof window === \"undefined\" ? \"\" : window.location.hostname\n\nconst getCallbackUrl = () => {\n if (typeof window === \"undefined\") return \"\"\n const query = new URLSearchParams(window.location.search)\n return query.get(\"callback\") || query.get(\"redirectUri\") || \"\"\n}\n","import { createBoundFetch } from \"./fetch\"\n\nexport type AuthMethodType =\n | \"password\"\n | \"dingtalk\"\n | \"sso\"\n | \"guest\"\n | \"phone_code\"\n | string\n\nexport interface AuthMethod {\n type: AuthMethodType\n enabled?: boolean\n label?: string\n protocol?: string\n [key: string]: unknown\n}\n\nexport interface LoginMethodsResult {\n appType: string\n configCode?: string\n methods: AuthMethod[]\n registration?: {\n mode?: string\n [key: string]: unknown\n }\n security?: {\n hideFailureReason?: boolean\n [key: string]: unknown\n }\n defaultRedirectUrl?: string\n}\n\nexport interface AuthUser {\n id: string\n username?: string\n name?: string\n phone?: string | null\n email?: string | null\n avatar?: string | null\n jobNumber?: string | null\n departments?: Array<Record<string, unknown>>\n affiliatedDepartmentId?: string | null\n affiliatedDepartment?: Record<string, unknown> | null\n [key: string]: unknown\n}\n\nexport interface AuthTokenData {\n accessToken: string\n refreshToken: string\n token?: string\n accessTokenExpiresAt?: number\n refreshTokenExpiresAt?: number\n user?: AuthUser\n guestUser?: AuthUser\n [key: string]: unknown\n}\n\nexport interface PhoneCodeSendResult {\n challengeId: string\n expiresAt?: string | Date\n ttlSeconds?: number\n message?: string\n}\n\nexport interface SsoLoginUrlResult {\n loginUrl: string\n protocol?: string\n}\n\nexport interface AuthClientOptions {\n appType: string\n servicePrefix?: string\n fetchImpl?: typeof fetch\n}\n\nexport interface PasswordLoginInput {\n username: string\n password: string\n clientFingerprint?: string\n challengeId?: string\n challengeAnswer?: string\n}\n\nexport interface DingTalkLoginInput {\n code: string\n corpId?: string\n}\n\nexport interface GuestLoginInput {\n guestIdentifier?: string\n domain?: string\n ipAddress?: string\n userAgent?: string\n formUuid?: string\n}\n\nexport interface PhoneCodeInput {\n phone: string\n purpose?: \"login\" | \"register\" | string\n}\n\nexport interface PhoneCodeLoginInput {\n phone: string\n code: string\n challengeId?: string\n}\n\nexport interface PhoneCodeRegisterInput extends PhoneCodeLoginInput {\n name?: string\n email?: string\n}\n\nexport interface SsoLoginUrlInput {\n protocol?: string\n redirectUri?: string\n}\n\nexport interface RefreshInput {\n refreshToken?: string\n}\n\nexport interface ResolveLoginUrlInput {\n callbackUrl?: string\n callbackParamName?: string\n loginUrl?: string\n}\n\nexport interface AppAuthClient {\n appType: string\n servicePrefix: string\n getMethods: () => Promise<LoginMethodsResult>\n passwordLogin: (input: PasswordLoginInput) => Promise<AuthTokenData>\n dingtalkLogin: (input: DingTalkLoginInput) => Promise<AuthTokenData>\n guestLogin: (input?: GuestLoginInput) => Promise<AuthTokenData>\n sendPhoneCode: (input: PhoneCodeInput) => Promise<PhoneCodeSendResult>\n phoneCodeLogin: (input: PhoneCodeLoginInput) => Promise<AuthTokenData>\n registerWithPhoneCode: (\n input: PhoneCodeRegisterInput,\n ) => Promise<AuthTokenData>\n getSsoLoginUrl: (input?: SsoLoginUrlInput) => Promise<SsoLoginUrlResult>\n refresh: (input?: RefreshInput) => Promise<AuthTokenData>\n logout: () => Promise<void>\n resolveLoginUrl: (input?: ResolveLoginUrlInput) => string\n}\n\nexport class AuthClientError extends Error {\n status?: number\n code?: number | string\n payload?: unknown\n\n constructor(message: string, options: { status?: number; code?: number | string; payload?: unknown } = {}) {\n super(message)\n this.name = \"AuthClientError\"\n this.status = options.status\n this.code = options.code\n this.payload = options.payload\n }\n}\n\nexport const createAuthClient = ({\n appType,\n servicePrefix = \"/service\",\n fetchImpl,\n}: AuthClientOptions): AppAuthClient => {\n const normalizedAppType = String(appType || \"\").trim()\n if (!normalizedAppType) {\n throw new Error(\"appType 不能为空\")\n }\n const boundFetch = createBoundFetch(fetchImpl)\n const request = async <T>(\n path: string,\n options: RequestInit = {},\n ): Promise<T> => {\n const response = await boundFetch(buildServiceUrl(servicePrefix, path), {\n credentials: \"include\",\n ...options,\n headers: {\n accept: \"application/json\",\n ...(options.body ? { \"content-type\": \"application/json\" } : {}),\n ...(options.headers || {}),\n },\n })\n const payload = await readPayload(response)\n const code = getRecordValue(payload, \"code\")\n if (!response.ok || (typeof code === \"number\" && code >= 400)) {\n throw new AuthClientError(\n String(getRecordValue(payload, \"message\") || `Auth request failed: ${response.status}`),\n { status: response.status, code: code as number | string | undefined, payload },\n )\n }\n return unwrapPayload<T>(payload)\n }\n\n const appAuthPath = (suffix: string) =>\n `/openxiangda-api/v1/apps/${encodeURIComponent(normalizedAppType)}/auth${suffix}`\n\n return {\n appType: normalizedAppType,\n servicePrefix,\n getMethods: () => request<LoginMethodsResult>(appAuthPath(\"/methods\")),\n passwordLogin: input =>\n request<AuthTokenData>(appAuthPath(\"/password/login\"), postJson(input)),\n dingtalkLogin: input =>\n request<AuthTokenData>(appAuthPath(\"/dingtalk/login\"), postJson(input)),\n guestLogin: input =>\n request<AuthTokenData>(appAuthPath(\"/guest/login\"), postJson(input || {})),\n sendPhoneCode: input =>\n request<PhoneCodeSendResult>(appAuthPath(\"/phone-code/send\"), postJson(input)),\n phoneCodeLogin: input =>\n request<AuthTokenData>(appAuthPath(\"/phone-code/login\"), postJson(input)),\n registerWithPhoneCode: input =>\n request<AuthTokenData>(appAuthPath(\"/phone-code/register\"), postJson(input)),\n getSsoLoginUrl: input =>\n request<SsoLoginUrlResult>(appAuthPath(\"/sso/login-url\"), postJson(input || {})),\n refresh: input =>\n request<AuthTokenData>(appAuthPath(\"/refresh\"), postJson(input || {})),\n logout: async () => {\n await request<null>(appAuthPath(\"/logout\"), { method: \"POST\" })\n },\n resolveLoginUrl: input =>\n resolveLoginUrl(normalizedAppType, input || {}),\n }\n}\n\nconst postJson = (body: unknown): RequestInit => ({\n method: \"POST\",\n body: JSON.stringify(body || {}),\n})\n\nconst buildServiceUrl = (servicePrefix: string, path: string) => {\n const prefix = servicePrefix.endsWith(\"/\")\n ? servicePrefix.slice(0, -1)\n : servicePrefix\n const suffix = path.startsWith(\"/\") ? path : `/${path}`\n return `${prefix}${suffix}`\n}\n\nconst readPayload = async (response: Response) => {\n try {\n return await response.json()\n } catch {\n return null\n }\n}\n\nconst unwrapPayload = <T>(payload: unknown): T => {\n if (!payload || typeof payload !== \"object\") return payload as T\n const record = payload as Record<string, unknown>\n if (\"data\" in record) return record.data as T\n return payload as T\n}\n\nconst getRecordValue = (value: unknown, key: string) => {\n if (!value || typeof value !== \"object\") return undefined\n return (value as Record<string, unknown>)[key]\n}\n\nconst resolveLoginUrl = (\n appType: string,\n {\n callbackUrl = getCurrentHref(),\n callbackParamName = \"callback\",\n loginUrl,\n }: ResolveLoginUrlInput,\n) => {\n const target = loginUrl || `/view/${encodeURIComponent(appType)}/login`\n if (!callbackUrl) return target\n try {\n const base =\n typeof window !== \"undefined\" ? window.location.origin : \"http://localhost\"\n const url = new URL(target, base)\n if (!url.searchParams.has(callbackParamName)) {\n url.searchParams.set(callbackParamName, callbackUrl)\n }\n if (target.startsWith(\"http://\") || target.startsWith(\"https://\")) {\n return url.toString()\n }\n return `${url.pathname}${url.search}${url.hash}`\n } catch {\n const separator = target.includes(\"?\") ? \"&\" : \"?\"\n return `${target}${separator}${callbackParamName}=${encodeURIComponent(callbackUrl)}`\n }\n}\n\nconst getCurrentHref = () =>\n typeof window === \"undefined\" ? \"\" : window.location.href\n","import React, { useCallback, useEffect, useMemo, useState } from \"react\"\nimport {\n createPublicAccessClient,\n PublicAccessClientError,\n type PublicAccessClaim,\n type PublicAccessSessionData,\n type PublicAccessSessionInput,\n} from \"../core/publicAccess\"\nimport { useOpenXiangda } from \"./openxiangdaProvider\"\n\nexport interface UsePublicAccessOptions extends PublicAccessSessionInput {\n appType?: string\n servicePrefix?: string\n fetchImpl?: typeof fetch\n autoStart?: boolean\n}\n\nexport interface UsePublicAccessState {\n loading: boolean\n error: PublicAccessClientError | null\n session: PublicAccessSessionData | null\n publicAccess: PublicAccessClaim | null\n startSession: (\n input?: PublicAccessSessionInput,\n ) => Promise<PublicAccessSessionData>\n}\n\nexport const usePublicAccess = (\n options: UsePublicAccessOptions = {},\n): UsePublicAccessState => {\n const runtime = useOpenXiangda()\n const {\n appType: runtimeAppType,\n servicePrefix: runtimeServicePrefix,\n fetchImpl: runtimeFetchImpl,\n reload: reloadRuntime,\n setAccessToken,\n } = runtime\n const {\n appType = runtimeAppType,\n servicePrefix = runtimeServicePrefix,\n fetchImpl = runtimeFetchImpl,\n autoStart = true,\n ...sessionInput\n } = options\n const [session, setSession] = useState<PublicAccessSessionData | null>(null)\n const [error, setError] = useState<PublicAccessClientError | null>(null)\n const [loading, setLoading] = useState(Boolean(autoStart))\n const sessionInputKey = JSON.stringify(sessionInput)\n const stableSessionInput = useMemo(() => sessionInput, [sessionInputKey])\n\n const client = useMemo(\n () =>\n createPublicAccessClient({\n appType,\n servicePrefix,\n fetchImpl,\n }),\n [appType, fetchImpl, servicePrefix],\n )\n\n const startSession = useCallback(\n async (input: PublicAccessSessionInput = {}) => {\n setLoading(true)\n setError(null)\n try {\n const data = await client.startSession({\n ...stableSessionInput,\n ...input,\n ticket:\n input.ticket || stableSessionInput.ticket || readTicketFromLocation(),\n path: input.path || stableSessionInput.path || readPathFromLocation(),\n })\n setSession(data)\n setAccessToken(data.accessToken)\n await reloadRuntime({ accessToken: data.accessToken })\n setLoading(false)\n return data\n } catch (caught) {\n const nextError =\n caught instanceof PublicAccessClientError\n ? caught\n : new PublicAccessClientError(\n caught instanceof Error ? caught.message : \"公开访问会话创建失败\",\n { payload: caught },\n )\n setError(nextError)\n setLoading(false)\n throw nextError\n }\n },\n [client, reloadRuntime, setAccessToken, stableSessionInput],\n )\n\n useEffect(() => {\n if (!autoStart) return\n void startSession().catch(() => undefined)\n }, [autoStart, startSession])\n\n return {\n loading,\n error,\n session,\n publicAccess: session?.publicAccess || null,\n startSession,\n }\n}\n\nexport interface PublicAccessGateProps extends UsePublicAccessOptions {\n children: React.ReactNode\n fallback?: React.ReactNode\n errorFallback?: React.ReactNode | ((error: PublicAccessClientError) => React.ReactNode)\n}\n\nexport const PublicAccessGate: React.FC<PublicAccessGateProps> = ({\n children,\n fallback = null,\n errorFallback = null,\n ...options\n}) => {\n const state = usePublicAccess(options)\n if (state.loading) return <>{fallback}</>\n if (state.error) {\n return (\n <>\n {typeof errorFallback === \"function\"\n ? errorFallback(state.error)\n : errorFallback}\n </>\n )\n }\n return <>{children}</>\n}\n\nconst readTicketFromLocation = () => {\n if (typeof window === \"undefined\") return undefined\n return new URLSearchParams(window.location.search).get(\"ticket\") || undefined\n}\n\nconst readPathFromLocation = () =>\n typeof window === \"undefined\" ? undefined : window.location.pathname\n","import { createBoundFetch } from \"./fetch\"\nimport type { AuthTokenData } from \"./auth\"\n\nexport interface PublicAccessClaim {\n type: \"openxiangda_public\"\n appType: string\n policyCode: string\n routeCode?: string\n pathPattern?: string\n mode: \"guest\" | \"ticket\"\n externalRoleCodes: string[]\n grants: {\n forms?: string[]\n dataViews?: string[]\n functions?: string[]\n connectors?: string[]\n }\n issuedAt: string\n expiresAt?: string | null\n ticketId?: string | null\n}\n\nexport interface PublicAccessSessionInput {\n policyCode?: string\n routeCode?: string\n path?: string\n ticket?: string\n guestIdentifier?: string\n domain?: string\n ipAddress?: string\n userAgent?: string\n}\n\nexport interface PublicAccessSessionData extends AuthTokenData {\n publicAccess?: PublicAccessClaim | null\n raw?: unknown\n}\n\nexport interface PublicAccessClientOptions {\n appType: string\n servicePrefix?: string\n fetchImpl?: typeof fetch\n}\n\nexport interface PublicAccessClient {\n appType: string\n servicePrefix: string\n startSession: (\n input?: PublicAccessSessionInput,\n ) => Promise<PublicAccessSessionData>\n}\n\nexport class PublicAccessClientError extends Error {\n status?: number\n code?: number | string\n payload?: unknown\n\n constructor(\n message: string,\n options: { status?: number; code?: number | string; payload?: unknown } = {},\n ) {\n super(message)\n this.name = \"PublicAccessClientError\"\n this.status = options.status\n this.code = options.code\n this.payload = options.payload\n }\n}\n\nexport const createPublicAccessClient = ({\n appType,\n servicePrefix = \"/service\",\n fetchImpl,\n}: PublicAccessClientOptions): PublicAccessClient => {\n const normalizedAppType = String(appType || \"\").trim()\n if (!normalizedAppType) {\n throw new Error(\"appType 不能为空\")\n }\n const boundFetch = createBoundFetch(fetchImpl)\n const request = async (\n input: PublicAccessSessionInput = {},\n ): Promise<PublicAccessSessionData> => {\n const body: PublicAccessSessionInput = {\n ...input,\n path: input.path || getCurrentPathname(),\n domain: input.domain || getCurrentDomain(),\n userAgent: input.userAgent || getCurrentUserAgent(),\n guestIdentifier:\n input.guestIdentifier || getOrCreatePublicGuestIdentifier(normalizedAppType),\n }\n const response = await boundFetch(\n buildServiceUrl(\n servicePrefix,\n `/openxiangda-api/v1/apps/${encodeURIComponent(\n normalizedAppType,\n )}/public/session`,\n ),\n {\n method: \"POST\",\n credentials: \"include\",\n headers: {\n accept: \"application/json\",\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(body),\n },\n )\n const payload = await readPayload(response)\n const code = getRecordValue(payload, \"code\")\n if (!response.ok || (typeof code === \"number\" && code >= 400)) {\n throw new PublicAccessClientError(\n String(\n getRecordValue(payload, \"message\") ||\n `Public access session failed: ${response.status}`,\n ),\n { status: response.status, code: code as number | string | undefined, payload },\n )\n }\n const data = getRecordValue(payload, \"data\") as AuthTokenData\n const extra = getRecordValue(payload, \"extra\") as\n | Record<string, unknown>\n | undefined\n return {\n ...data,\n publicAccess: (extra?.publicAccess as PublicAccessClaim | undefined) || null,\n raw: payload,\n }\n }\n\n return {\n appType: normalizedAppType,\n servicePrefix,\n startSession: request,\n }\n}\n\nconst buildServiceUrl = (servicePrefix: string, path: string) => {\n const prefix = servicePrefix.endsWith(\"/\")\n ? servicePrefix.slice(0, -1)\n : servicePrefix\n const suffix = path.startsWith(\"/\") ? path : `/${path}`\n return `${prefix}${suffix}`\n}\n\nconst readPayload = async (response: Response) => {\n try {\n return await response.json()\n } catch {\n return null\n }\n}\n\nconst getRecordValue = (value: unknown, key: string) => {\n if (!value || typeof value !== \"object\") return undefined\n return (value as Record<string, unknown>)[key]\n}\n\nconst getCurrentPathname = () =>\n typeof window === \"undefined\" ? undefined : window.location.pathname\n\nconst getCurrentDomain = () =>\n typeof window === \"undefined\" ? undefined : window.location.host\n\nconst getCurrentUserAgent = () =>\n typeof navigator === \"undefined\" ? undefined : navigator.userAgent\n\nconst getOrCreatePublicGuestIdentifier = (appType: string) => {\n const key = `openxiangda:public:guest:${appType}`\n try {\n if (typeof window !== \"undefined\" && window.localStorage) {\n const existing = window.localStorage.getItem(key)\n if (existing) return existing\n const next = createRandomIdentifier(appType)\n window.localStorage.setItem(key, next)\n return next\n }\n } catch {\n // ignore storage failures and fall back to an in-memory value.\n }\n return createRandomIdentifier(appType)\n}\n\nconst createRandomIdentifier = (appType: string) => {\n const random =\n typeof crypto !== \"undefined\" && \"randomUUID\" in crypto\n ? crypto.randomUUID()\n : Math.random().toString(36).slice(2)\n return `public:${appType}:${random}`\n}\n"],"mappings":"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","names":["padStart","padZoneStr","monthDiff","absFloor","prettyUnit","isUndefined","isDayjs","parseLocale","dayjs","wrapper","parseDate","Dayjs","instanceFactory","instanceFactorySet","locale","meridiem","getShort","get$H","matches","diff","getMonth","ordinal","import_react","import_client","import_react","process","import_jsx_runtime","dayjs","zhCN","AntdApp","React","import_react","import_react","response","import_react","import_react","import_react","import_antd","message","getCurrentHref","import_jsx_runtime","getCurrentHref","import_jsx_runtime","buildServiceUrl","resolveLoginUrl","getCurrentHref","getCurrentHostname","getRecordValue","import_react","message","buildServiceUrl","readPayload","getRecordValue","import_jsx_runtime"]}
|
|
1
|
+
{"version":3,"sources":["../../src/runtime/react/index.ts","../../src/runtime/react/createReactPage.tsx","../../../../node_modules/dayjs/esm/constant.js","../../../../node_modules/dayjs/esm/locale/en.js","../../../../node_modules/dayjs/esm/utils.js","../../../../node_modules/dayjs/esm/index.js","../../../../node_modules/dayjs/esm/locale/zh-cn.js","../../src/runtime/react/provider.tsx","../../src/runtime/react/store.ts","../../src/runtime/core/client.ts","../../src/styles/antd-theme.ts","../../src/runtime/react/hooks/useCurrentUser.ts","../../src/runtime/react/hooks/usePageContext.ts","../../src/runtime/react/hooks/useDataSource.ts","../../src/runtime/react/hooks/usePageSdk.ts","../../src/runtime/react/hooks/useFormViewPermissions.ts","../../src/runtime/react/hooks/useMessage.ts","../../src/runtime/react/hooks/useModal.ts","../../src/runtime/react/hooks/useNavigation.ts","../../src/runtime/react/hooks/usePageProps.ts","../../src/runtime/react/hooks/usePageRoute.ts","../../src/runtime/react/openxiangdaProvider.tsx","../../src/runtime/core/fetch.ts","../../src/runtime/react/auth.tsx","../../src/runtime/core/auth.ts","../../src/runtime/react/publicAccess.tsx","../../src/runtime/core/publicAccess.ts"],"sourcesContent":["export { createReactPage } from \"./createReactPage\"\nexport { PageProvider } from \"./provider\"\nexport { useCurrentUser } from \"./hooks/useCurrentUser\"\nexport { useDataSource } from \"./hooks/useDataSource\"\nexport { useFormViewPermissions } from \"./hooks/useFormViewPermissions\"\nexport { useMessage } from \"./hooks/useMessage\"\nexport { useModal } from \"./hooks/useModal\"\nexport { useNavigation } from \"./hooks/useNavigation\"\nexport { usePageContext } from \"./hooks/usePageContext\"\nexport { usePageProps } from \"./hooks/usePageProps\"\nexport { usePageRoute } from \"./hooks/usePageRoute\"\nexport { usePageSdk } from \"./hooks/usePageSdk\"\nexport {\n OpenXiangdaProvider,\n PermissionBoundary,\n LoginPage,\n useAppMenus,\n useAuth,\n useCanAccessRoute,\n useLoginMethods,\n useOpenXiangda,\n usePermission,\n useRuntimeAuth,\n useRuntimeBootstrap,\n} from \"./openxiangdaProvider\"\nexport type {\n OpenXiangdaProviderProps,\n LoginPageProps,\n PermissionBoundaryFallback,\n PermissionBoundaryFallbackState,\n PermissionBoundaryProps,\n RouteAccessResult,\n RuntimeBootstrap,\n RuntimeErrorSnapshot,\n RuntimeErrorType,\n RuntimeMenuItem,\n RuntimePagePermissions,\n RuntimeRedirectLoginOptions,\n RuntimeRequestError,\n RuntimeRequestState,\n RuntimeResolveLoginOptions,\n RuntimeLogoutOptions,\n UseCanAccessRouteInput,\n UseAuthOptions,\n UseLoginMethodsState,\n} from \"./openxiangdaProvider\"\nexport { PublicAccessGate, usePublicAccess } from \"./publicAccess\"\nexport type {\n PublicAccessGateProps,\n UsePublicAccessOptions,\n UsePublicAccessState,\n} from \"./publicAccess\"\nexport * from \"../core\"\n","import { StyleProvider } from \"@ant-design/cssinjs\";\nimport { App as AntdApp, ConfigProvider, message } from \"antd\";\nimport zhCN from \"antd/locale/zh_CN.js\";\nimport dayjs from \"dayjs\";\nimport \"dayjs/locale/zh-cn.js\";\nimport React from \"react\";\nimport { createRoot } from \"react-dom/client\";\n\nimport { PageProvider } from \"./provider\";\nimport { antdTheme, legacyAntdTheme } from \"../../styles/antd-theme\";\n\nimport type { PageContext } from \"../core/types\";\n\ndayjs.locale(\"zh-cn\");\n\ntype RootLike = {\n render: (node: React.ReactNode) => void;\n unmount: () => void;\n};\n\nconst NAMESPACE_ROOT_CLASS = \"sy-app-workspace\";\nconst RUNTIME_PORTAL_ATTR = \"data-sy-runtime-portal\";\nconst PORTAL_CONTAINER_STACK_GLOBAL = \"__OPENXIANGDA_PORTAL_CONTAINER_STACK__\";\nconst PORTAL_CONTAINER_RESOLVER_GLOBAL = \"__OPENXIANGDA_GET_PORTAL_CONTAINER__\";\nconst MESSAGE_PROXY_GLOBAL = \"__OPENXIANGDA_ANTD_MESSAGE_PROXY__\";\nconst MESSAGE_METHODS = [\n \"open\",\n \"success\",\n \"info\",\n \"warning\",\n \"error\",\n \"loading\",\n \"destroy\",\n] as const;\n\ntype RuntimePortalHandle = {\n container: HTMLElement | null;\n release: () => void;\n};\n\ntype RuntimeCssIsolation = \"none\" | \"namespace\" | \"shadow\";\n\ntype MessageMethod = (typeof MESSAGE_METHODS)[number];\n\ntype AntdMessageProxyState = {\n apiStack: Array<Record<string, unknown>>;\n installed: boolean;\n originalMethods: Partial<Record<MessageMethod, (...args: unknown[]) => unknown>>;\n};\n\nconst createRuntimeRoot = (el: HTMLElement): RootLike => {\n return createRoot(el);\n};\n\nconst normalizeCssIsolation = (value: unknown): RuntimeCssIsolation => {\n if (value === \"namespace\" || value === \"shadow\") return value;\n return \"none\";\n};\n\nconst usesLegacyCssIsolation = (cssIsolation: RuntimeCssIsolation) =>\n cssIsolation === \"namespace\" || cssIsolation === \"shadow\";\n\nconst getRuntimeCssIsolation = (context: PageContext): RuntimeCssIsolation =>\n normalizeCssIsolation(context.page?.capabilities?.cssIsolation);\n\nconst getAntdRuntimeOptions = (cssIsolation: RuntimeCssIsolation) => {\n const legacy = usesLegacyCssIsolation(cssIsolation);\n return {\n prefixCls: legacy ? \"sy-ant\" : \"ant\",\n iconPrefixCls: legacy ? \"sy-anticon\" : \"anticon\",\n messagePrefixCls: legacy ? \"sy-ant-message\" : \"ant-message\",\n theme: legacy ? legacyAntdTheme : antdTheme,\n };\n};\n\nconst isShadowRoot = (rootNode: Node | null | undefined): rootNode is ShadowRoot =>\n typeof ShadowRoot !== \"undefined\" && rootNode instanceof ShadowRoot;\n\nconst getStyleContainer = (el: HTMLElement): HTMLElement | ShadowRoot => {\n const rootNode = el.getRootNode?.();\n if (isShadowRoot(rootNode)) {\n return rootNode;\n }\n return document.head;\n};\n\nconst getRuntimeRoot = (el: HTMLElement, triggerNode?: HTMLElement) => {\n const rootNode = el.getRootNode?.();\n if (isShadowRoot(rootNode)) return el;\n const triggerRoot = triggerNode?.closest?.<HTMLElement>(\n `.${NAMESPACE_ROOT_CLASS}`,\n );\n return (\n triggerRoot ||\n el.closest<HTMLElement>(`.${NAMESPACE_ROOT_CLASS}`) ||\n el.querySelector<HTMLElement>(`.${NAMESPACE_ROOT_CLASS}`) ||\n el\n );\n};\n\nconst getRuntimeOverlayContainer = (\n el: HTMLElement,\n portalContainer: HTMLElement | null,\n): {\n getPopupContainer: (triggerNode?: HTMLElement) => HTMLElement | ShadowRoot;\n getTargetContainer: () => HTMLElement | ShadowRoot;\n} => {\n const getOverlayRoot = (triggerNode?: HTMLElement) => {\n if (portalContainer?.isConnected) return portalContainer;\n return getRuntimeRoot(el, triggerNode);\n };\n\n return {\n getPopupContainer: (triggerNode?: HTMLElement) => {\n return getOverlayRoot(triggerNode);\n },\n getTargetContainer: () => getRuntimeRoot(el),\n };\n};\n\nconst createAntdConfig = (\n overlayContainer: ReturnType<typeof getRuntimeOverlayContainer>,\n cssIsolation: RuntimeCssIsolation,\n) => {\n const antdOptions = getAntdRuntimeOptions(cssIsolation);\n return {\n locale: zhCN,\n prefixCls: antdOptions.prefixCls,\n iconPrefixCls: antdOptions.iconPrefixCls,\n theme: antdOptions.theme,\n ...(usesLegacyCssIsolation(cssIsolation)\n ? {\n getPopupContainer: overlayContainer.getPopupContainer,\n getTargetContainer: overlayContainer.getTargetContainer,\n }\n : {}),\n };\n};\n\nconst createPortalContainer = (el: HTMLElement) => {\n const rootNode = el.getRootNode?.();\n const parent = isShadowRoot(rootNode)\n ? rootNode\n : el.ownerDocument?.body || document.body;\n const portalContainer = el.ownerDocument.createElement(\"div\");\n portalContainer.setAttribute(RUNTIME_PORTAL_ATTR, \"\");\n portalContainer.classList.add(NAMESPACE_ROOT_CLASS);\n parent.appendChild(portalContainer);\n return portalContainer;\n};\n\nconst getAntdMessageProxyState = (): AntdMessageProxyState => {\n const globalScope = globalThis as typeof globalThis & {\n [MESSAGE_PROXY_GLOBAL]?: AntdMessageProxyState;\n };\n if (!globalScope[MESSAGE_PROXY_GLOBAL]) {\n globalScope[MESSAGE_PROXY_GLOBAL] = {\n apiStack: [],\n installed: false,\n originalMethods: {},\n };\n }\n return globalScope[MESSAGE_PROXY_GLOBAL];\n};\n\nconst installAntdMessageProxy = () => {\n const state = getAntdMessageProxyState();\n if (state.installed) return state;\n MESSAGE_METHODS.forEach((method) => {\n const originalMethod = (message as unknown as Record<string, unknown>)[method];\n if (typeof originalMethod !== \"function\") return;\n state.originalMethods[method] = originalMethod.bind(message) as (\n ...args: unknown[]\n ) => unknown;\n (message as unknown as Record<string, unknown>)[method] = (\n ...args: unknown[]\n ) => {\n const api = state.apiStack.at(-1);\n const apiMethod = api?.[method];\n if (typeof apiMethod === \"function\") {\n return apiMethod(...args);\n }\n return state.originalMethods[method]?.(...args);\n };\n });\n state.installed = true;\n return state;\n};\n\nconst registerAntdMessageApi = (api: Record<string, unknown>) => {\n const state = installAntdMessageProxy();\n state.apiStack.push(api);\n return () => {\n const position = state.apiStack.lastIndexOf(api);\n if (position >= 0) {\n state.apiStack.splice(position, 1);\n }\n };\n};\n\nconst installRuntimePortalContainer = (\n el: HTMLElement,\n cssIsolation: RuntimeCssIsolation,\n): RuntimePortalHandle => {\n const globalScope = globalThis as typeof globalThis & {\n [PORTAL_CONTAINER_STACK_GLOBAL]?: HTMLElement[];\n [PORTAL_CONTAINER_RESOLVER_GLOBAL]?: () => HTMLElement;\n };\n const portalContainer = usesLegacyCssIsolation(cssIsolation)\n ? createPortalContainer(el)\n : null;\n const stack = Array.isArray(globalScope[PORTAL_CONTAINER_STACK_GLOBAL])\n ? globalScope[PORTAL_CONTAINER_STACK_GLOBAL]\n : [];\n const stackTarget = portalContainer ?? el.ownerDocument?.body ?? document.body;\n stack.push(stackTarget);\n globalScope[PORTAL_CONTAINER_STACK_GLOBAL] = stack;\n globalScope[PORTAL_CONTAINER_RESOLVER_GLOBAL] = () => {\n for (let index = stack.length - 1; index >= 0; index -= 1) {\n const candidate = stack[index];\n if (candidate?.isConnected) {\n return candidate;\n }\n }\n return (\n document.querySelector<HTMLElement>(`[${RUNTIME_PORTAL_ATTR}]`) ||\n document.querySelector<HTMLElement>(`.${NAMESPACE_ROOT_CLASS}`) ||\n document.body\n );\n };\n\n return {\n container: portalContainer,\n release: () => {\n const position = stack.lastIndexOf(stackTarget);\n if (position >= 0) {\n stack.splice(position, 1);\n }\n portalContainer?.remove();\n },\n };\n};\n\nconst installAntdStaticHolder = (\n el: HTMLElement,\n portalContainer: HTMLElement | null,\n cssIsolation: RuntimeCssIsolation,\n) => {\n installAntdMessageProxy();\n const antdOptions = getAntdRuntimeOptions(cssIsolation);\n const getMessageContainer = () => {\n if (portalContainer?.isConnected) return portalContainer;\n return usesLegacyCssIsolation(cssIsolation) ? getRuntimeRoot(el) : document.body;\n };\n\n ConfigProvider.config({\n prefixCls: antdOptions.prefixCls,\n iconPrefixCls: antdOptions.iconPrefixCls,\n theme: antdOptions.theme,\n holderRender: (children) => {\n if (!el.isConnected) {\n return (\n <ConfigProvider\n locale={zhCN}\n prefixCls={antdOptions.prefixCls}\n iconPrefixCls={antdOptions.iconPrefixCls}\n theme={antdOptions.theme}\n >\n {children}\n </ConfigProvider>\n );\n }\n const overlayContainer = getRuntimeOverlayContainer(el, portalContainer);\n return (\n <StyleProvider hashPriority=\"high\" container={getStyleContainer(el)}>\n <ConfigProvider {...createAntdConfig(overlayContainer, cssIsolation)}>\n {children}\n </ConfigProvider>\n </StyleProvider>\n );\n },\n });\n message.config({\n prefixCls: antdOptions.messagePrefixCls,\n getContainer: getMessageContainer,\n });\n};\n\nconst RuntimeMessageBridge = ({ children }: { children: React.ReactNode }) => {\n const appContext = AntdApp.useApp();\n React.useLayoutEffect(() => {\n return registerAntdMessageApi(\n appContext.message as unknown as Record<string, unknown>,\n );\n }, [appContext.message]);\n return <>{children}</>;\n};\n\nexport const createReactPage = (\n AppComponent: React.ComponentType,\n): {\n mount: (el: HTMLElement, context: PageContext) => void;\n update: (el: HTMLElement, context: PageContext) => void;\n unmount: () => void;\n} => {\n let root: RootLike | null = null;\n let currentContainer: HTMLElement | null = null;\n let releasePortalContainer: (() => void) | null = null;\n let portalContainer: HTMLElement | null = null;\n let currentCssIsolation: RuntimeCssIsolation | null = null;\n\n const render = (el: HTMLElement, context: PageContext) => {\n const cssIsolation = getRuntimeCssIsolation(context);\n if (usesLegacyCssIsolation(cssIsolation)) {\n el.classList.add(NAMESPACE_ROOT_CLASS);\n } else {\n el.classList.remove(NAMESPACE_ROOT_CLASS);\n }\n if (\n !root ||\n currentContainer !== el ||\n currentCssIsolation !== cssIsolation ||\n (usesLegacyCssIsolation(cssIsolation) && !portalContainer?.isConnected)\n ) {\n root?.unmount();\n releasePortalContainer?.();\n root = createRuntimeRoot(el);\n currentContainer = el;\n currentCssIsolation = cssIsolation;\n const portalHandle = installRuntimePortalContainer(el, cssIsolation);\n portalContainer = portalHandle.container;\n releasePortalContainer = portalHandle.release;\n }\n const overlayContainer = getRuntimeOverlayContainer(el, portalContainer);\n installAntdStaticHolder(el, portalContainer, cssIsolation);\n const antdConfig = createAntdConfig(overlayContainer, cssIsolation);\n\n root.render(\n <StyleProvider hashPriority=\"high\" container={getStyleContainer(el)}>\n <ConfigProvider {...antdConfig}>\n <AntdApp>\n <RuntimeMessageBridge>\n <PageProvider context={context}>\n <AppComponent />\n </PageProvider>\n </RuntimeMessageBridge>\n </AntdApp>\n </ConfigProvider>\n </StyleProvider>,\n );\n };\n\n return {\n mount: (el, context) => {\n render(el, context);\n },\n update: (el, context) => {\n render(el, context);\n },\n unmount: () => {\n root?.unmount();\n releasePortalContainer?.();\n root = null;\n currentContainer = null;\n releasePortalContainer = null;\n portalContainer = null;\n currentCssIsolation = null;\n },\n };\n};\n","export var SECONDS_A_MINUTE = 60;\nexport var SECONDS_A_HOUR = SECONDS_A_MINUTE * 60;\nexport var SECONDS_A_DAY = SECONDS_A_HOUR * 24;\nexport var SECONDS_A_WEEK = SECONDS_A_DAY * 7;\nexport var MILLISECONDS_A_SECOND = 1e3;\nexport var MILLISECONDS_A_MINUTE = SECONDS_A_MINUTE * MILLISECONDS_A_SECOND;\nexport var MILLISECONDS_A_HOUR = SECONDS_A_HOUR * MILLISECONDS_A_SECOND;\nexport var MILLISECONDS_A_DAY = SECONDS_A_DAY * MILLISECONDS_A_SECOND;\nexport var MILLISECONDS_A_WEEK = SECONDS_A_WEEK * MILLISECONDS_A_SECOND; // English locales\n\nexport var MS = 'millisecond';\nexport var S = 'second';\nexport var MIN = 'minute';\nexport var H = 'hour';\nexport var D = 'day';\nexport var W = 'week';\nexport var M = 'month';\nexport var Q = 'quarter';\nexport var Y = 'year';\nexport var DATE = 'date';\nexport var FORMAT_DEFAULT = 'YYYY-MM-DDTHH:mm:ssZ';\nexport var INVALID_DATE_STRING = 'Invalid Date'; // regex\n\nexport var REGEX_PARSE = /^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/;\nexport var REGEX_FORMAT = /\\[([^\\]]+)]|YYYY|YY|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g;","// English [en]\n// We don't need weekdaysShort, weekdaysMin, monthsShort in en.js locale\nexport default {\n name: 'en',\n weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n ordinal: function ordinal(n) {\n var s = ['th', 'st', 'nd', 'rd'];\n var v = n % 100;\n return \"[\" + n + (s[(v - 20) % 10] || s[v] || s[0]) + \"]\";\n }\n};","import * as C from './constant';\n\nvar padStart = function padStart(string, length, pad) {\n var s = String(string);\n if (!s || s.length >= length) return string;\n return \"\" + Array(length + 1 - s.length).join(pad) + string;\n};\n\nvar padZoneStr = function padZoneStr(instance) {\n var negMinutes = -instance.utcOffset();\n var minutes = Math.abs(negMinutes);\n var hourOffset = Math.floor(minutes / 60);\n var minuteOffset = minutes % 60;\n return \"\" + (negMinutes <= 0 ? '+' : '-') + padStart(hourOffset, 2, '0') + \":\" + padStart(minuteOffset, 2, '0');\n};\n\nvar monthDiff = function monthDiff(a, b) {\n // function from moment.js in order to keep the same result\n if (a.date() < b.date()) return -monthDiff(b, a);\n var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month());\n var anchor = a.clone().add(wholeMonthDiff, C.M);\n var c = b - anchor < 0;\n var anchor2 = a.clone().add(wholeMonthDiff + (c ? -1 : 1), C.M);\n return +(-(wholeMonthDiff + (b - anchor) / (c ? anchor - anchor2 : anchor2 - anchor)) || 0);\n};\n\nvar absFloor = function absFloor(n) {\n return n < 0 ? Math.ceil(n) || 0 : Math.floor(n);\n};\n\nvar prettyUnit = function prettyUnit(u) {\n var special = {\n M: C.M,\n y: C.Y,\n w: C.W,\n d: C.D,\n D: C.DATE,\n h: C.H,\n m: C.MIN,\n s: C.S,\n ms: C.MS,\n Q: C.Q\n };\n return special[u] || String(u || '').toLowerCase().replace(/s$/, '');\n};\n\nvar isUndefined = function isUndefined(s) {\n return s === undefined;\n};\n\nexport default {\n s: padStart,\n z: padZoneStr,\n m: monthDiff,\n a: absFloor,\n p: prettyUnit,\n u: isUndefined\n};","import * as C from './constant';\nimport en from './locale/en';\nimport U from './utils';\nvar L = 'en'; // global locale\n\nvar Ls = {}; // global loaded locale\n\nLs[L] = en;\nvar IS_DAYJS = '$isDayjsObject'; // eslint-disable-next-line no-use-before-define\n\nvar isDayjs = function isDayjs(d) {\n return d instanceof Dayjs || !!(d && d[IS_DAYJS]);\n};\n\nvar parseLocale = function parseLocale(preset, object, isLocal) {\n var l;\n if (!preset) return L;\n\n if (typeof preset === 'string') {\n var presetLower = preset.toLowerCase();\n\n if (Ls[presetLower]) {\n l = presetLower;\n }\n\n if (object) {\n Ls[presetLower] = object;\n l = presetLower;\n }\n\n var presetSplit = preset.split('-');\n\n if (!l && presetSplit.length > 1) {\n return parseLocale(presetSplit[0]);\n }\n } else {\n var name = preset.name;\n Ls[name] = preset;\n l = name;\n }\n\n if (!isLocal && l) L = l;\n return l || !isLocal && L;\n};\n\nvar dayjs = function dayjs(date, c) {\n if (isDayjs(date)) {\n return date.clone();\n } // eslint-disable-next-line no-nested-ternary\n\n\n var cfg = typeof c === 'object' ? c : {};\n cfg.date = date;\n cfg.args = arguments; // eslint-disable-line prefer-rest-params\n\n return new Dayjs(cfg); // eslint-disable-line no-use-before-define\n};\n\nvar wrapper = function wrapper(date, instance) {\n return dayjs(date, {\n locale: instance.$L,\n utc: instance.$u,\n x: instance.$x,\n $offset: instance.$offset // todo: refactor; do not use this.$offset in you code\n\n });\n};\n\nvar Utils = U; // for plugin use\n\nUtils.l = parseLocale;\nUtils.i = isDayjs;\nUtils.w = wrapper;\n\nvar parseDate = function parseDate(cfg) {\n var date = cfg.date,\n utc = cfg.utc;\n if (date === null) return new Date(NaN); // null is invalid\n\n if (Utils.u(date)) return new Date(); // today\n\n if (date instanceof Date) return new Date(date);\n\n if (typeof date === 'string' && !/Z$/i.test(date)) {\n var d = date.match(C.REGEX_PARSE);\n\n if (d) {\n var m = d[2] - 1 || 0;\n var ms = (d[7] || '0').substring(0, 3);\n\n if (utc) {\n return new Date(Date.UTC(d[1], m, d[3] || 1, d[4] || 0, d[5] || 0, d[6] || 0, ms));\n }\n\n return new Date(d[1], m, d[3] || 1, d[4] || 0, d[5] || 0, d[6] || 0, ms);\n }\n }\n\n return new Date(date); // everything else\n};\n\nvar Dayjs = /*#__PURE__*/function () {\n function Dayjs(cfg) {\n this.$L = parseLocale(cfg.locale, null, true);\n this.parse(cfg); // for plugin\n\n this.$x = this.$x || cfg.x || {};\n this[IS_DAYJS] = true;\n }\n\n var _proto = Dayjs.prototype;\n\n _proto.parse = function parse(cfg) {\n this.$d = parseDate(cfg);\n this.init();\n };\n\n _proto.init = function init() {\n var $d = this.$d;\n this.$y = $d.getFullYear();\n this.$M = $d.getMonth();\n this.$D = $d.getDate();\n this.$W = $d.getDay();\n this.$H = $d.getHours();\n this.$m = $d.getMinutes();\n this.$s = $d.getSeconds();\n this.$ms = $d.getMilliseconds();\n } // eslint-disable-next-line class-methods-use-this\n ;\n\n _proto.$utils = function $utils() {\n return Utils;\n };\n\n _proto.isValid = function isValid() {\n return !(this.$d.toString() === C.INVALID_DATE_STRING);\n };\n\n _proto.isSame = function isSame(that, units) {\n var other = dayjs(that);\n return this.startOf(units) <= other && other <= this.endOf(units);\n };\n\n _proto.isAfter = function isAfter(that, units) {\n return dayjs(that) < this.startOf(units);\n };\n\n _proto.isBefore = function isBefore(that, units) {\n return this.endOf(units) < dayjs(that);\n };\n\n _proto.$g = function $g(input, get, set) {\n if (Utils.u(input)) return this[get];\n return this.set(set, input);\n };\n\n _proto.unix = function unix() {\n return Math.floor(this.valueOf() / 1000);\n };\n\n _proto.valueOf = function valueOf() {\n // timezone(hour) * 60 * 60 * 1000 => ms\n return this.$d.getTime();\n };\n\n _proto.startOf = function startOf(units, _startOf) {\n var _this = this;\n\n // startOf -> endOf\n var isStartOf = !Utils.u(_startOf) ? _startOf : true;\n var unit = Utils.p(units);\n\n var instanceFactory = function instanceFactory(d, m) {\n var ins = Utils.w(_this.$u ? Date.UTC(_this.$y, m, d) : new Date(_this.$y, m, d), _this);\n return isStartOf ? ins : ins.endOf(C.D);\n };\n\n var instanceFactorySet = function instanceFactorySet(method, slice) {\n var argumentStart = [0, 0, 0, 0];\n var argumentEnd = [23, 59, 59, 999];\n return Utils.w(_this.toDate()[method].apply( // eslint-disable-line prefer-spread\n _this.toDate('s'), (isStartOf ? argumentStart : argumentEnd).slice(slice)), _this);\n };\n\n var $W = this.$W,\n $M = this.$M,\n $D = this.$D;\n var utcPad = \"set\" + (this.$u ? 'UTC' : '');\n\n switch (unit) {\n case C.Y:\n return isStartOf ? instanceFactory(1, 0) : instanceFactory(31, 11);\n\n case C.M:\n return isStartOf ? instanceFactory(1, $M) : instanceFactory(0, $M + 1);\n\n case C.W:\n {\n var weekStart = this.$locale().weekStart || 0;\n var gap = ($W < weekStart ? $W + 7 : $W) - weekStart;\n return instanceFactory(isStartOf ? $D - gap : $D + (6 - gap), $M);\n }\n\n case C.D:\n case C.DATE:\n return instanceFactorySet(utcPad + \"Hours\", 0);\n\n case C.H:\n return instanceFactorySet(utcPad + \"Minutes\", 1);\n\n case C.MIN:\n return instanceFactorySet(utcPad + \"Seconds\", 2);\n\n case C.S:\n return instanceFactorySet(utcPad + \"Milliseconds\", 3);\n\n default:\n return this.clone();\n }\n };\n\n _proto.endOf = function endOf(arg) {\n return this.startOf(arg, false);\n };\n\n _proto.$set = function $set(units, _int) {\n var _C$D$C$DATE$C$M$C$Y$C;\n\n // private set\n var unit = Utils.p(units);\n var utcPad = \"set\" + (this.$u ? 'UTC' : '');\n var name = (_C$D$C$DATE$C$M$C$Y$C = {}, _C$D$C$DATE$C$M$C$Y$C[C.D] = utcPad + \"Date\", _C$D$C$DATE$C$M$C$Y$C[C.DATE] = utcPad + \"Date\", _C$D$C$DATE$C$M$C$Y$C[C.M] = utcPad + \"Month\", _C$D$C$DATE$C$M$C$Y$C[C.Y] = utcPad + \"FullYear\", _C$D$C$DATE$C$M$C$Y$C[C.H] = utcPad + \"Hours\", _C$D$C$DATE$C$M$C$Y$C[C.MIN] = utcPad + \"Minutes\", _C$D$C$DATE$C$M$C$Y$C[C.S] = utcPad + \"Seconds\", _C$D$C$DATE$C$M$C$Y$C[C.MS] = utcPad + \"Milliseconds\", _C$D$C$DATE$C$M$C$Y$C)[unit];\n var arg = unit === C.D ? this.$D + (_int - this.$W) : _int;\n\n if (unit === C.M || unit === C.Y) {\n // clone is for badMutable plugin\n var date = this.clone().set(C.DATE, 1);\n date.$d[name](arg);\n date.init();\n this.$d = date.set(C.DATE, Math.min(this.$D, date.daysInMonth())).$d;\n } else if (name) this.$d[name](arg);\n\n this.init();\n return this;\n };\n\n _proto.set = function set(string, _int2) {\n return this.clone().$set(string, _int2);\n };\n\n _proto.get = function get(unit) {\n return this[Utils.p(unit)]();\n };\n\n _proto.add = function add(number, units) {\n var _this2 = this,\n _C$MIN$C$H$C$S$unit;\n\n number = Number(number); // eslint-disable-line no-param-reassign\n\n var unit = Utils.p(units);\n\n var instanceFactorySet = function instanceFactorySet(n) {\n var d = dayjs(_this2);\n return Utils.w(d.date(d.date() + Math.round(n * number)), _this2);\n };\n\n if (unit === C.M) {\n return this.set(C.M, this.$M + number);\n }\n\n if (unit === C.Y) {\n return this.set(C.Y, this.$y + number);\n }\n\n if (unit === C.D) {\n return instanceFactorySet(1);\n }\n\n if (unit === C.W) {\n return instanceFactorySet(7);\n }\n\n var step = (_C$MIN$C$H$C$S$unit = {}, _C$MIN$C$H$C$S$unit[C.MIN] = C.MILLISECONDS_A_MINUTE, _C$MIN$C$H$C$S$unit[C.H] = C.MILLISECONDS_A_HOUR, _C$MIN$C$H$C$S$unit[C.S] = C.MILLISECONDS_A_SECOND, _C$MIN$C$H$C$S$unit)[unit] || 1; // ms\n\n var nextTimeStamp = this.$d.getTime() + number * step;\n return Utils.w(nextTimeStamp, this);\n };\n\n _proto.subtract = function subtract(number, string) {\n return this.add(number * -1, string);\n };\n\n _proto.format = function format(formatStr) {\n var _this3 = this;\n\n var locale = this.$locale();\n if (!this.isValid()) return locale.invalidDate || C.INVALID_DATE_STRING;\n var str = formatStr || C.FORMAT_DEFAULT;\n var zoneStr = Utils.z(this);\n var $H = this.$H,\n $m = this.$m,\n $M = this.$M;\n var weekdays = locale.weekdays,\n months = locale.months,\n meridiem = locale.meridiem;\n\n var getShort = function getShort(arr, index, full, length) {\n return arr && (arr[index] || arr(_this3, str)) || full[index].slice(0, length);\n };\n\n var get$H = function get$H(num) {\n return Utils.s($H % 12 || 12, num, '0');\n };\n\n var meridiemFunc = meridiem || function (hour, minute, isLowercase) {\n var m = hour < 12 ? 'AM' : 'PM';\n return isLowercase ? m.toLowerCase() : m;\n };\n\n var matches = function matches(match) {\n switch (match) {\n case 'YY':\n return String(_this3.$y).slice(-2);\n\n case 'YYYY':\n return Utils.s(_this3.$y, 4, '0');\n\n case 'M':\n return $M + 1;\n\n case 'MM':\n return Utils.s($M + 1, 2, '0');\n\n case 'MMM':\n return getShort(locale.monthsShort, $M, months, 3);\n\n case 'MMMM':\n return getShort(months, $M);\n\n case 'D':\n return _this3.$D;\n\n case 'DD':\n return Utils.s(_this3.$D, 2, '0');\n\n case 'd':\n return String(_this3.$W);\n\n case 'dd':\n return getShort(locale.weekdaysMin, _this3.$W, weekdays, 2);\n\n case 'ddd':\n return getShort(locale.weekdaysShort, _this3.$W, weekdays, 3);\n\n case 'dddd':\n return weekdays[_this3.$W];\n\n case 'H':\n return String($H);\n\n case 'HH':\n return Utils.s($H, 2, '0');\n\n case 'h':\n return get$H(1);\n\n case 'hh':\n return get$H(2);\n\n case 'a':\n return meridiemFunc($H, $m, true);\n\n case 'A':\n return meridiemFunc($H, $m, false);\n\n case 'm':\n return String($m);\n\n case 'mm':\n return Utils.s($m, 2, '0');\n\n case 's':\n return String(_this3.$s);\n\n case 'ss':\n return Utils.s(_this3.$s, 2, '0');\n\n case 'SSS':\n return Utils.s(_this3.$ms, 3, '0');\n\n case 'Z':\n return zoneStr;\n // 'ZZ' logic below\n\n default:\n break;\n }\n\n return null;\n };\n\n return str.replace(C.REGEX_FORMAT, function (match, $1) {\n return $1 || matches(match) || zoneStr.replace(':', '');\n }); // 'ZZ'\n };\n\n _proto.utcOffset = function utcOffset() {\n // Because a bug at FF24, we're rounding the timezone offset around 15 minutes\n // https://github.com/moment/moment/pull/1871\n return -Math.round(this.$d.getTimezoneOffset() / 15) * 15;\n };\n\n _proto.diff = function diff(input, units, _float) {\n var _this4 = this;\n\n var unit = Utils.p(units);\n var that = dayjs(input);\n var zoneDelta = (that.utcOffset() - this.utcOffset()) * C.MILLISECONDS_A_MINUTE;\n var diff = this - that;\n\n var getMonth = function getMonth() {\n return Utils.m(_this4, that);\n };\n\n var result;\n\n switch (unit) {\n case C.Y:\n result = getMonth() / 12;\n break;\n\n case C.M:\n result = getMonth();\n break;\n\n case C.Q:\n result = getMonth() / 3;\n break;\n\n case C.W:\n result = (diff - zoneDelta) / C.MILLISECONDS_A_WEEK;\n break;\n\n case C.D:\n result = (diff - zoneDelta) / C.MILLISECONDS_A_DAY;\n break;\n\n case C.H:\n result = diff / C.MILLISECONDS_A_HOUR;\n break;\n\n case C.MIN:\n result = diff / C.MILLISECONDS_A_MINUTE;\n break;\n\n case C.S:\n result = diff / C.MILLISECONDS_A_SECOND;\n break;\n\n default:\n result = diff; // milliseconds\n\n break;\n }\n\n return _float ? result : Utils.a(result);\n };\n\n _proto.daysInMonth = function daysInMonth() {\n return this.endOf(C.M).$D;\n };\n\n _proto.$locale = function $locale() {\n // get locale object\n return Ls[this.$L];\n };\n\n _proto.locale = function locale(preset, object) {\n if (!preset) return this.$L;\n var that = this.clone();\n var nextLocaleName = parseLocale(preset, object, true);\n if (nextLocaleName) that.$L = nextLocaleName;\n return that;\n };\n\n _proto.clone = function clone() {\n return Utils.w(this.$d, this);\n };\n\n _proto.toDate = function toDate() {\n return new Date(this.valueOf());\n };\n\n _proto.toJSON = function toJSON() {\n return this.isValid() ? this.toISOString() : null;\n };\n\n _proto.toISOString = function toISOString() {\n // ie 8 return\n // new Dayjs(this.valueOf() + this.$d.getTimezoneOffset() * 60000)\n // .format('YYYY-MM-DDTHH:mm:ss.SSS[Z]')\n return this.$d.toISOString();\n };\n\n _proto.toString = function toString() {\n return this.$d.toUTCString();\n };\n\n return Dayjs;\n}();\n\nvar proto = Dayjs.prototype;\ndayjs.prototype = proto;\n[['$ms', C.MS], ['$s', C.S], ['$m', C.MIN], ['$H', C.H], ['$W', C.D], ['$M', C.M], ['$y', C.Y], ['$D', C.DATE]].forEach(function (g) {\n proto[g[1]] = function (input) {\n return this.$g(input, g[0], g[1]);\n };\n});\n\ndayjs.extend = function (plugin, option) {\n if (!plugin.$i) {\n // install plugin only once\n plugin(option, Dayjs, dayjs);\n plugin.$i = true;\n }\n\n return dayjs;\n};\n\ndayjs.locale = parseLocale;\ndayjs.isDayjs = isDayjs;\n\ndayjs.unix = function (timestamp) {\n return dayjs(timestamp * 1e3);\n};\n\ndayjs.en = Ls[L];\ndayjs.Ls = Ls;\ndayjs.p = {};\nexport default dayjs;","// Chinese (China) [zh-cn]\nimport dayjs from '../index';\nvar locale = {\n name: 'zh-cn',\n weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n weekdaysShort: '周日_周一_周二_周三_周四_周五_周六'.split('_'),\n weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n ordinal: function ordinal(number, period) {\n switch (period) {\n case 'W':\n return number + \"\\u5468\";\n\n default:\n return number + \"\\u65E5\";\n }\n },\n weekStart: 1,\n yearStart: 4,\n formats: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'YYYY/MM/DD',\n LL: 'YYYY年M月D日',\n LLL: 'YYYY年M月D日Ah点mm分',\n LLLL: 'YYYY年M月D日ddddAh点mm分',\n l: 'YYYY/M/D',\n ll: 'YYYY年M月D日',\n lll: 'YYYY年M月D日 HH:mm',\n llll: 'YYYY年M月D日dddd HH:mm'\n },\n relativeTime: {\n future: '%s内',\n past: '%s前',\n s: '几秒',\n m: '1 分钟',\n mm: '%d 分钟',\n h: '1 小时',\n hh: '%d 小时',\n d: '1 天',\n dd: '%d 天',\n M: '1 个月',\n MM: '%d 个月',\n y: '1 年',\n yy: '%d 年'\n },\n meridiem: function meridiem(hour, minute) {\n var hm = hour * 100 + minute;\n\n if (hm < 600) {\n return '凌晨';\n } else if (hm < 900) {\n return '早上';\n } else if (hm < 1100) {\n return '上午';\n } else if (hm < 1300) {\n return '中午';\n } else if (hm < 1800) {\n return '下午';\n }\n\n return '晚上';\n }\n};\ndayjs.locale(locale, null, true);\nexport default locale;","import React, { useMemo } from \"react\"\n\nimport { ReactPageContext } from \"./store\"\nimport { createPageSdk } from \"../core/client\"\n\nimport type { PageSdkStore } from \"./store\"\nimport type { PageContext } from \"../core/types\"\n\nexport interface PageProviderProps {\n context: PageContext\n children: React.ReactNode\n}\n\nexport const PageProvider: React.FC<PageProviderProps> = ({\n context,\n children,\n}) => {\n const value = useMemo<PageSdkStore>(\n () => ({\n context,\n sdk: createPageSdk(context),\n }),\n [context],\n )\n\n return (\n <ReactPageContext.Provider value={value}>\n {children}\n </ReactPageContext.Provider>\n )\n}\n","import { createContext, useContext } from \"react\"\n\nimport type { PageContext, PageSdk } from \"../core/types\"\n\nexport interface PageSdkStore {\n context: PageContext\n sdk: PageSdk\n}\n\nexport const ReactPageContext = createContext<PageSdkStore | null>(null)\n\nexport const usePageSdkStore = () => {\n const store = useContext(ReactPageContext)\n if (!store) {\n throw new Error(\"usePageSdkStore 必须在 PageProvider 内使用\")\n }\n return store\n}\n","import type {\n ApiPermissionListParams,\n AuthLogoutRedirectOptions,\n ApproveTaskParams,\n AssignPermissionsParams,\n AssignRolesParams,\n BatchAddUsersToRoleParams,\n BatchSendNotificationByTypeParams,\n ConnectorCallParams,\n ConnectorInvokeParams,\n ConnectorInvokeResult,\n CreateApiPermissionParams,\n CreateFormPermissionGroupDto,\n CreatePagePermissionGroupDto,\n CreateRoleParams,\n CreateUiPermissionParams,\n CurrentUserDepartmentParents,\n DataManagementConfigParams,\n DataViewQueryParams,\n DataViewQueryResult,\n DataViewStatsParams,\n FormAdvancedSearchParams,\n FormChangeRecordParams,\n FormCreateParams,\n FormExportParams,\n FormGetDetailParams,\n FormImportParams,\n FormRemoveParams,\n FormSearchParams,\n FormUpdateParams,\n FunctionInvokeParams,\n FunctionInvokeResult,\n GetParentDepartmentsOptions,\n GetProcessInstanceParams,\n GetUserRolesParams,\n ImportExportRecordDownloadParams,\n ImportExportRecordQuery,\n PageApiResponse,\n PageBinaryResponse,\n PageContext,\n PageDataSourceDescriptor,\n PageDepartmentRecord,\n PageHttpMethod,\n PageListResult,\n PageOffsetListResult,\n PagePermissionGroup,\n PageRequestOptions,\n PageSdk,\n PageSdkError,\n PageTransportDownloadPayload,\n PageTransportRequestPayload,\n PreviewNotificationTemplateParams,\n FormPermissionGroup,\n RoleListParams,\n RoleUsersParams,\n SaveDataManagementConfigParams,\n SearchExpression,\n SearchGroup,\n SearchRule,\n SearchSortItem,\n SubFormRule,\n SwitchAppRoleParams,\n SwitchPlatformRoleParams,\n TerminateProcessInstanceParams,\n TriggerCallbackTaskParams,\n UiPermissionListParams,\n UpdateApiPermissionParams,\n UpdateFormPermissionGroupDto,\n UpdatePagePermissionGroupDto,\n UpdateRoleParams,\n UpdateUiPermissionParams,\n UpdateUserParams,\n QueryFormPermissionGroupDto,\n QueryPagePermissionGroupDto,\n UserListParams,\n UserMenuPermissionsResponse,\n ValidateUserParams,\n CreateUserParams,\n SendNotificationByTypeParams,\n SendNotificationResult,\n ViewFieldPermissionValue,\n ViewPermissionSummary,\n} from \"./types\"\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value)\n\nconst isSearchRuleLike = (value: unknown): value is SearchRule | SubFormRule =>\n isRecord(value) &&\n typeof value.key === \"string\" &&\n (value.componentName === undefined || typeof value.componentName === \"string\")\n\nconst isBlobLike = (value: unknown): value is Blob =>\n typeof Blob !== \"undefined\" && value instanceof Blob\n\nconst normalizeMethod = (value: PageHttpMethod | string): PageHttpMethod => {\n const method = String(value || \"get\").toLowerCase()\n if (\n method === \"get\" ||\n method === \"post\" ||\n method === \"put\" ||\n method === \"delete\" ||\n method === \"patch\"\n ) {\n return method\n }\n return \"get\"\n}\n\nconst resolveAppType = (\n context: PageContext,\n explicitAppType?: string,\n): string => {\n const appType = String(explicitAppType || context.app.appType || \"\").trim()\n if (!appType) {\n throw new Error(\"appType 不能为空\")\n }\n return appType\n}\n\nconst buildAppPath = (\n context: PageContext,\n explicitAppType: string | undefined,\n suffix: string,\n) => `/${resolveAppType(context, explicitAppType)}${suffix}`\n\nconst buildOpenXiangdaAppPath = (\n context: PageContext,\n explicitAppType: string | undefined,\n suffix: string,\n) =>\n `/openxiangda-api/v1/apps/${encodePathSegment(\n resolveAppType(context, explicitAppType),\n )}${suffix}`\n\nconst encodePathSegment = (value: string) => encodeURIComponent(String(value))\n\nconst getHeaderValue = (\n headers: Record<string, unknown> | undefined,\n name: string,\n): string | undefined => {\n if (!headers) {\n return undefined\n }\n const target = name.toLowerCase()\n const entry = Object.entries(headers).find(\n ([key]) => key.toLowerCase() === target,\n )\n return entry ? String(entry[1]) : undefined\n}\n\nconst parseContentDispositionFileName = (\n contentDisposition?: string,\n): string | undefined => {\n if (!contentDisposition) {\n return undefined\n }\n\n const utf8Match = contentDisposition.match(/filename\\*=UTF-8''([^;]+)/i)\n if (utf8Match?.[1]) {\n try {\n return decodeURIComponent(utf8Match[1])\n } catch {\n return utf8Match[1]\n }\n }\n\n const quotedMatch = contentDisposition.match(/filename=\"([^\"]+)\"/i)\n if (quotedMatch?.[1]) {\n return quotedMatch[1]\n }\n\n const plainMatch = contentDisposition.match(/filename=([^;]+)/i)\n if (plainMatch?.[1]) {\n return plainMatch[1].trim()\n }\n\n return undefined\n}\n\nconst parseConnectorCallName = (name: string) => {\n const value = String(name || \"\").trim()\n const separatorIndex = value.indexOf(\".\")\n if (separatorIndex <= 0 || separatorIndex === value.length - 1) {\n throw new Error(\"连接器调用名必须是 connector.api 格式\")\n }\n\n return {\n connector: value.slice(0, separatorIndex),\n api: value.slice(separatorIndex + 1),\n }\n}\n\nconst serializeQuery = (query?: Record<string, unknown>) => {\n if (!query) {\n return undefined\n }\n\n const params = new URLSearchParams()\n\n const appendValue = (key: string, value: unknown) => {\n if (value === undefined || value === null || value === \"\") {\n return\n }\n if (Array.isArray(value)) {\n value.forEach((item) => appendValue(key, item))\n return\n }\n if (value instanceof Date) {\n params.append(key, value.toISOString())\n return\n }\n params.append(key, String(value))\n }\n\n Object.entries(query).forEach(([key, value]) => {\n appendValue(key, value)\n })\n\n const serialized = params.toString()\n return serialized || undefined\n}\n\nconst toLegacyRules = (value: Record<string, unknown>) =>\n Object.entries(value).flatMap(([key, itemValue]) => {\n if (itemValue === undefined) {\n return []\n }\n return [\n {\n key,\n operator: Array.isArray(itemValue) ? \"IN\" : \"EQ\",\n value: itemValue,\n },\n ]\n })\n\nconst toSearchGroup = (value: unknown): SearchGroup | undefined => {\n if (value === undefined || value === null || value === \"\") {\n return undefined\n }\n\n if (typeof value === \"string\") {\n try {\n return toSearchGroup(JSON.parse(value))\n } catch {\n return undefined\n }\n }\n\n if (Array.isArray(value)) {\n const rules: Array<SearchRule | SubFormRule> = []\n const conditions: SearchGroup[] = []\n\n value.forEach((item) => {\n const group = toSearchGroup(item)\n if (group) {\n if (group.rules?.length) {\n rules.push(...group.rules)\n }\n if (group.conditions?.length) {\n conditions.push(...group.conditions)\n }\n return\n }\n\n if (isSearchRuleLike(item)) {\n rules.push(item)\n return\n }\n\n if (isRecord(item)) {\n rules.push(...(toLegacyRules(item) as SearchRule[]))\n }\n })\n\n if (rules.length === 0 && conditions.length === 0) {\n return undefined\n }\n\n return {\n logic: \"AND\",\n ...(rules.length > 0 ? { rules } : {}),\n ...(conditions.length > 0 ? { conditions } : {}),\n }\n }\n\n if (isRecord(value)) {\n if (isSearchRuleLike(value)) {\n return {\n logic: \"AND\",\n rules: [value],\n }\n }\n\n if (\"rules\" in value || \"conditions\" in value || \"logic\" in value) {\n const nextGroup: SearchGroup = {\n logic:\n value.logic === \"OR\" || value.logic === \"AND\" ? value.logic : \"AND\",\n }\n\n if (Array.isArray(value.rules)) {\n nextGroup.rules = value.rules.filter(isSearchRuleLike)\n }\n\n if (Array.isArray(value.conditions)) {\n nextGroup.conditions = value.conditions\n .map((item) => toSearchGroup(item))\n .filter((item): item is SearchGroup => Boolean(item))\n }\n\n if (!nextGroup.rules?.length && !nextGroup.conditions?.length) {\n return undefined\n }\n\n return nextGroup\n }\n\n const rules = toLegacyRules(value)\n if (rules.length === 0) {\n return undefined\n }\n return {\n logic: \"AND\",\n rules,\n }\n }\n\n return undefined\n}\n\nconst mergeSearchExpressions = (base: unknown, extra: unknown) => {\n const baseGroup = toSearchGroup(base)\n const extraGroup = toSearchGroup(extra)\n\n if (!baseGroup) {\n return extraGroup\n }\n\n if (!extraGroup) {\n return baseGroup\n }\n\n return {\n logic: \"AND\",\n conditions: [baseGroup, extraGroup],\n } satisfies SearchGroup\n}\n\nconst serializeSearchExpression = (value?: SearchExpression | string) => {\n if (value === undefined || value === null || value === \"\") {\n return undefined\n }\n if (typeof value === \"string\") {\n return value\n }\n const group = toSearchGroup(value)\n return group ? JSON.stringify(group) : undefined\n}\n\nconst normalizeAdvancedOrder = (value?: SearchSortItem | SearchSortItem[]) => {\n if (!value) {\n return undefined\n }\n const nextValue = Array.isArray(value) ? value : [value]\n return JSON.stringify(nextValue)\n}\n\nconst normalizeDynamicOrder = (value?: string | SearchSortItem) => {\n if (!value) {\n return undefined\n }\n if (typeof value === \"string\") {\n return value\n }\n return `${value.id}:${value.isAsc === \"n\" ? \"-\" : \"+\"}`\n}\n\nconst hasOwn = (value: object, key: string) =>\n Object.prototype.hasOwnProperty.call(value, key)\n\nconst normalizeEnvelopeCode = (value: unknown): number | string => {\n if (value === undefined || value === null || value === \"\") {\n return 200\n }\n const normalized = Number(value)\n return Number.isFinite(normalized) ? normalized : String(value)\n}\n\nconst isSuccessCode = (value: unknown) => {\n if (value === undefined || value === null || value === \"\") {\n return true\n }\n const normalized = Number(value)\n return Number.isFinite(normalized)\n ? normalized === 0 || (normalized >= 200 && normalized < 300)\n : false\n}\n\nconst getEnvelopeCode = (rawResponse: unknown) => {\n if (isRecord(rawResponse) && hasOwn(rawResponse, \"code\")) {\n return rawResponse.code\n }\n const nestedData = (rawResponse as { data?: unknown })?.data\n if (isRecord(nestedData) && hasOwn(nestedData, \"code\")) {\n return nestedData.code\n }\n return undefined\n}\n\nconst normalizeJsonResponse = <TResult = unknown, TRaw = TResult>(\n rawResponse: unknown,\n): PageApiResponse<TResult, TRaw> => {\n const code = normalizeEnvelopeCode(getEnvelopeCode(rawResponse))\n\n const topLevelResult =\n isRecord(rawResponse) && \"result\" in rawResponse\n ? (rawResponse.result as TResult)\n : undefined\n const nestedResult =\n isRecord((rawResponse as { data?: unknown })?.data) &&\n \"result\" in ((rawResponse as { data?: Record<string, unknown> }).data || {})\n ? ((rawResponse as { data?: Record<string, unknown> }).data\n ?.result as TResult)\n : undefined\n const topLevelData =\n isRecord(rawResponse) && \"data\" in rawResponse\n ? (rawResponse.data as TRaw)\n : undefined\n\n const result =\n topLevelResult !== undefined\n ? topLevelResult\n : nestedResult !== undefined\n ? nestedResult\n : topLevelData !== undefined\n ? (topLevelData as unknown as TResult)\n : isRecord(rawResponse)\n ? (rawResponse as TResult)\n : null\n\n const nestedSuccess =\n typeof (rawResponse as { data?: { success?: boolean } })?.data?.success ===\n \"boolean\"\n ? (rawResponse as { data?: { success?: boolean } }).data?.success\n : undefined\n\n const success =\n (rawResponse as { success?: boolean })?.success === false ||\n nestedSuccess === false\n ? false\n : isSuccessCode(code)\n\n return {\n code,\n success,\n message:\n typeof (rawResponse as { message?: string })?.message === \"string\"\n ? (rawResponse as { message?: string }).message\n : typeof (rawResponse as { data?: { message?: string } })?.data\n ?.message === \"string\"\n ? (rawResponse as { data?: { message?: string } }).data?.message\n : undefined,\n result,\n data:\n topLevelData !== undefined\n ? topLevelData\n : topLevelResult !== undefined\n ? (topLevelResult as unknown as TRaw)\n : undefined,\n raw: rawResponse,\n }\n}\n\nconst normalizeBinaryResponse = (rawResponse: unknown): PageBinaryResponse => {\n if (isRecord(rawResponse) && isBlobLike(rawResponse.blob)) {\n return rawResponse as unknown as PageBinaryResponse\n }\n\n if (isBlobLike(rawResponse)) {\n return {\n blob: rawResponse,\n raw: rawResponse,\n }\n }\n\n const responseData = (rawResponse as { data?: unknown })?.data\n const responseHeaders = isRecord(\n (rawResponse as { headers?: unknown })?.headers,\n )\n ? ((rawResponse as { headers?: Record<string, unknown> }).headers as Record<\n string,\n unknown\n >)\n : undefined\n\n if (!isBlobLike(responseData)) {\n throw new Error(\"transport.download 未返回 Blob 数据\")\n }\n\n const contentDisposition = getHeaderValue(\n responseHeaders,\n \"content-disposition\",\n )\n\n return {\n blob: responseData,\n fileName: parseContentDispositionFileName(contentDisposition),\n contentType:\n getHeaderValue(responseHeaders, \"content-type\") || responseData.type,\n headers: responseHeaders\n ? Object.fromEntries(\n Object.entries(responseHeaders).map(([key, value]) => [\n key,\n value === undefined ? undefined : String(value),\n ]),\n )\n : undefined,\n raw: rawResponse,\n }\n}\n\nconst toSdkError = (\n input: unknown,\n payload: PageTransportRequestPayload | PageTransportDownloadPayload,\n): PageSdkError => {\n if (input instanceof Error && (input as PageSdkError).response) {\n return input as PageSdkError\n }\n\n const normalizedResponse = isRecord(input)\n ? normalizeJsonResponse(input)\n : undefined\n\n const nextError =\n input instanceof Error\n ? input\n : new Error(\n normalizedResponse?.message ||\n `请求失败: ${String(payload.method).toUpperCase()} ${payload.path}`,\n )\n\n const sdkError = nextError as PageSdkError\n sdkError.method = String(payload.method).toUpperCase()\n sdkError.path = payload.path\n sdkError.response = normalizedResponse\n sdkError.raw = input\n return sdkError\n}\n\nconst ensureSuccess = <TResult = unknown, TRaw = TResult>(\n response: PageApiResponse<TResult, TRaw>,\n payload: PageTransportRequestPayload,\n) => {\n if (!response.success) {\n throw toSdkError(response, payload)\n }\n return response\n}\n\nconst resolveFormInstanceId = (params: {\n formInstId?: string\n formInstanceId?: string\n}) => {\n const formInstanceId = String(\n params.formInstId || params.formInstanceId || \"\",\n ).trim()\n if (!formInstanceId) {\n throw new Error(\"formInstanceId 不能为空\")\n }\n return formInstanceId\n}\n\nconst withDefaultAppType = <\n T extends {\n appType?: string\n scope?: string\n },\n>(\n context: PageContext,\n params: T | undefined,\n) => {\n if (!params) {\n return params\n }\n\n if (params.appType) {\n return params\n }\n\n if (params.scope === \"app\") {\n return {\n ...params,\n appType: context.app.appType,\n }\n }\n\n return params\n}\n\nconst AUTH_LOGIN_URL_ENV_KEYS = [\n \"loginUrl\",\n \"authLoginUrl\",\n \"bathAuthUrl\",\n \"REACT_APP_VITE_BATH_AUTH_URL\",\n \"VITE_BATH_AUTH_URL\",\n \"BATH_AUTH_URL\",\n]\n\nconst DEFAULT_PLATFORM_LOGIN_URL = \"/platform/login\"\n\nconst normalizeOptionalString = (value: unknown) => {\n const text = typeof value === \"string\" ? value.trim() : \"\"\n return text || undefined\n}\n\nconst getCurrentHref = () => {\n if (typeof window === \"undefined\") {\n return \"\"\n }\n return window.location?.href || \"\"\n}\n\nconst resolveAuthLoginUrl = (\n context: PageContext,\n options: AuthLogoutRedirectOptions,\n) => {\n const explicitLoginUrl = normalizeOptionalString(options.loginUrl)\n if (explicitLoginUrl) {\n return explicitLoginUrl\n }\n\n for (const key of AUTH_LOGIN_URL_ENV_KEYS) {\n const loginUrl = normalizeOptionalString(context.env?.[key])\n if (loginUrl) {\n return loginUrl\n }\n }\n\n return undefined\n}\n\nconst buildAuthRedirectUrl = (\n loginUrl: string,\n callbackUrl: string | undefined,\n callbackParamName: string | undefined,\n) => {\n const paramName = normalizeOptionalString(callbackParamName) || \"callback\"\n const normalizedCallbackUrl = normalizeOptionalString(callbackUrl)\n\n if (!normalizedCallbackUrl) {\n return loginUrl\n }\n\n const baseHref = getCurrentHref() || \"http://localhost/\"\n const isAbsoluteUrl = /^[a-z][a-z\\d+.-]*:/i.test(loginUrl)\n const isProtocolRelativeUrl = loginUrl.startsWith(\"//\")\n const isRootRelativeUrl = loginUrl.startsWith(\"/\")\n\n try {\n const url = new URL(loginUrl, baseHref)\n url.searchParams.set(paramName, normalizedCallbackUrl)\n\n if (isAbsoluteUrl || isProtocolRelativeUrl) {\n return url.toString()\n }\n\n const path = `${url.pathname}${url.search}${url.hash}`\n return isRootRelativeUrl ? path : path.replace(/^\\//, \"\")\n } catch {\n const hashIndex = loginUrl.indexOf(\"#\")\n const pathAndQuery =\n hashIndex >= 0 ? loginUrl.slice(0, hashIndex) : loginUrl\n const hash = hashIndex >= 0 ? loginUrl.slice(hashIndex) : \"\"\n const separator = pathAndQuery.includes(\"?\") ? \"&\" : \"?\"\n\n return `${pathAndQuery}${separator}${encodeURIComponent(\n paramName,\n )}=${encodeURIComponent(normalizedCallbackUrl)}${hash}`\n }\n}\n\nconst performRedirect = (\n url: string,\n options: AuthLogoutRedirectOptions,\n) => {\n if (options.redirect) {\n options.redirect(url)\n return\n }\n\n if (typeof window === \"undefined\" || !window.location) {\n return\n }\n\n if (options.replace && typeof window.location.replace === \"function\") {\n window.location.replace(url)\n return\n }\n\n window.location.href = url\n}\n\nconst reloadCurrentPage = () => {\n if (\n typeof window === \"undefined\" ||\n !window.location ||\n typeof window.location.reload !== \"function\"\n ) {\n return\n }\n\n window.location.reload()\n}\n\nconst redirectAfterLogout = (\n context: PageContext,\n options: AuthLogoutRedirectOptions,\n) => {\n const loginUrl = resolveAuthLoginUrl(context, options)\n const callbackUrl = normalizeOptionalString(options.callbackUrl) || getCurrentHref()\n\n if (loginUrl) {\n performRedirect(\n buildAuthRedirectUrl(loginUrl, callbackUrl, options.callbackParamName),\n options,\n )\n return\n }\n\n if (options.fallback === \"none\") {\n return\n }\n\n if (options.fallback === \"reload\") {\n reloadCurrentPage()\n return\n }\n\n const redirectLoginUrl = DEFAULT_PLATFORM_LOGIN_URL\n performRedirect(\n buildAuthRedirectUrl(redirectLoginUrl, callbackUrl, options.callbackParamName),\n options,\n )\n}\n\nexport const createPageSdk = (context: PageContext): PageSdk => {\n const request = async <TResult = unknown, TRaw = TResult>(\n options: PageRequestOptions,\n ) => {\n const payload: PageTransportRequestPayload = {\n path: options.path,\n method: normalizeMethod(options.method),\n query: serializeQuery(options.query),\n body: options.body,\n headers: options.headers,\n }\n\n try {\n const rawResponse = await context.bridge.invoke<unknown>(\n \"transport.request\",\n payload,\n )\n return ensureSuccess(\n normalizeJsonResponse<TResult, TRaw>(rawResponse),\n payload,\n )\n } catch (error) {\n throw toSdkError(error, payload)\n }\n }\n\n const download = async (options: PageRequestOptions) => {\n const payload: PageTransportDownloadPayload = {\n path: options.path,\n method: normalizeMethod(options.method),\n query: serializeQuery(options.query),\n body: options.body,\n headers: options.headers,\n }\n\n try {\n const rawResponse = await context.bridge.invoke<unknown>(\n \"transport.download\",\n payload,\n )\n return normalizeBinaryResponse(rawResponse)\n } catch (error) {\n throw toSdkError(error, payload)\n }\n }\n\n const logout = <T = boolean>() =>\n request<T>({\n path: \"/api/auth/logout\",\n method: \"post\",\n })\n\n const auth = {\n logout,\n logoutAndRedirect: async <T = boolean>(\n options: AuthLogoutRedirectOptions = {},\n ) => {\n try {\n const response = await logout<T>()\n redirectAfterLogout(context, options)\n return response\n } catch (error) {\n if (options.continueOnLogoutError === false) {\n throw error\n }\n redirectAfterLogout(context, options)\n return null\n }\n },\n }\n\n const connector = {\n invoke: <TResult = unknown, TBody = unknown>(\n params: ConnectorInvokeParams<TBody>,\n ) =>\n request<ConnectorInvokeResult<TResult>>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/connectors/actions/invoke\",\n ),\n method: \"post\",\n body: {\n connector: params.connector,\n api: params.api,\n pathParams: params.pathParams,\n query: params.query,\n body: params.body,\n headers: params.headers,\n requestBodyType: params.requestBodyType,\n responseType: params.responseType,\n },\n }),\n call: <TResult = unknown, TBody = unknown>(\n name: string,\n params: ConnectorCallParams<TBody> = {},\n ) => {\n const target = parseConnectorCallName(name)\n return connector.invoke<TResult, TBody>({\n ...params,\n connector: target.connector,\n api: target.api,\n })\n },\n download: <TBody = unknown>(\n params: ConnectorInvokeParams<TBody>,\n ): Promise<PageBinaryResponse> =>\n download({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/connectors/actions/download\",\n ),\n method: \"post\",\n body: {\n connector: params.connector,\n api: params.api,\n pathParams: params.pathParams,\n query: params.query,\n body: params.body,\n headers: params.headers,\n requestBodyType: params.requestBodyType,\n responseType: \"binary\",\n },\n }),\n }\n\n const form = {\n getDetail: <T = unknown>(params: FormGetDetailParams) =>\n request<T>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/getFormDataById.json\",\n ),\n method: \"get\",\n query: {\n formUuid: params.formUuid,\n formInstId: resolveFormInstanceId(params),\n },\n }),\n create: <T = unknown, TRaw = unknown>(params: FormCreateParams) =>\n request<T, TRaw>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/saveFormData.json\",\n ),\n method: \"post\",\n body: {\n formUuid: params.formUuid,\n formDataJson: JSON.stringify(params.data || {}),\n },\n }),\n update: <T = unknown, TRaw = unknown>(params: FormUpdateParams) =>\n request<T, TRaw>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/updateFormData.json\",\n ),\n method: \"post\",\n body: {\n formUuid: params.formUuid,\n formInstId: resolveFormInstanceId(params),\n updateFormDataJson:\n params.updateFormDataJson || JSON.stringify(params.data || {}),\n },\n }),\n remove: <T = unknown, TRaw = unknown>(params: FormRemoveParams) =>\n request<T, TRaw>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/deleteFormData.json\",\n ),\n method: \"post\",\n body: {\n formUuid: params.formUuid,\n formInstId: resolveFormInstanceId(params),\n },\n }),\n getChangeRecords: <T = unknown>(params: FormChangeRecordParams) =>\n request<T>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/getFormDataChangeRecords.json\",\n ),\n method: \"get\",\n query: {\n formUuid: params.formUuid,\n formInstId: resolveFormInstanceId(params),\n page: params.page,\n pageSize: params.pageSize,\n },\n }),\n search: <T = unknown>(params: FormSearchParams) =>\n request<PageListResult<T>>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/searchFormDatas.json\",\n ),\n method: \"get\",\n query: {\n formUuid: params.formUuid,\n searchFieldJson: serializeSearchExpression(params.search),\n currentPage: params.currentPage,\n pageSize: params.pageSize,\n originatorId: params.originatorId,\n createFrom: params.createFrom,\n createTo: params.createTo,\n modifiedFrom: params.modifiedFrom,\n modifiedTo: params.modifiedTo,\n dynamicOrder: normalizeDynamicOrder(params.dynamicOrder),\n instanceStatus: params.instanceStatus,\n },\n }),\n searchIds: <T = string>(params: FormSearchParams) =>\n request<PageListResult<T>>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/searchFormDataIds.json\",\n ),\n method: \"get\",\n query: {\n formUuid: params.formUuid,\n searchFieldJson: serializeSearchExpression(params.search),\n currentPage: params.currentPage,\n pageSize: params.pageSize,\n originatorId: params.originatorId,\n createFrom: params.createFrom,\n createTo: params.createTo,\n modifiedFrom: params.modifiedFrom,\n modifiedTo: params.modifiedTo,\n dynamicOrder: normalizeDynamicOrder(params.dynamicOrder),\n instanceStatus: params.instanceStatus,\n },\n }),\n advancedSearch: <T = unknown>(params: FormAdvancedSearchParams) =>\n request<PageListResult<T>>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/advancedSearch.json\",\n ),\n method: \"get\",\n query: {\n formUuid: params.formUuid,\n filters: serializeSearchExpression(params.filters),\n conditionType: params.conditionType,\n searchKeyWord: params.searchKeyWord,\n currentPage: params.currentPage,\n pageSize: params.pageSize,\n order: normalizeAdvancedOrder(params.order),\n instanceStatus: params.instanceStatus,\n },\n }),\n advancedExport: (params: FormExportParams) =>\n download({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/advancedExport.xlsx\",\n ),\n method: \"get\",\n query: {\n formUuid: params.formUuid,\n filters: serializeSearchExpression(params.filters),\n conditionType: params.conditionType,\n searchKeyWord: params.searchKeyWord,\n currentPage: params.currentPage,\n pageSize: params.pageSize,\n order: normalizeAdvancedOrder(params.order),\n instanceStatus: params.instanceStatus,\n exportAll: params.exportAll,\n embedImages: params.embedImages,\n exportFields: params.exportFields?.join(\",\"),\n },\n }),\n downloadImportTemplate: (params: DataManagementConfigParams) =>\n download({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/advancedExportTemplate.xlsx\",\n ),\n method: \"get\",\n query: {\n formUuid: params.formUuid,\n },\n }),\n importPreview: <T = unknown>(params: FormImportParams) =>\n request<T>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/importPreview.xlsx\",\n ),\n method: \"post\",\n body: {\n formUuid: params.formUuid,\n fileBase64: params.fileBase64,\n fileName: params.fileName,\n },\n }),\n importExcel: <T = unknown>(params: FormImportParams) =>\n request<T>({\n path: buildAppPath(context, params.appType, \"/v1/form/import.xlsx\"),\n method: \"post\",\n body: {\n formUuid: params.formUuid,\n fileBase64: params.fileBase64,\n fileName: params.fileName,\n },\n }),\n getImportRecords: <T = unknown>(params: ImportExportRecordQuery) =>\n request<T>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/importRecords.json\",\n ),\n method: \"get\",\n query: {\n formUuid: params.formUuid,\n currentPage: params.currentPage,\n pageSize: params.pageSize,\n },\n }),\n getExportRecords: <T = unknown>(params: ImportExportRecordQuery) =>\n request<T>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/exportRecords.json\",\n ),\n method: \"get\",\n query: {\n formUuid: params.formUuid,\n currentPage: params.currentPage,\n pageSize: params.pageSize,\n },\n }),\n downloadImportSource: (params: ImportExportRecordDownloadParams) =>\n download({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/importRecord/downloadSource.xlsx\",\n ),\n method: \"get\",\n query: {\n recordId: params.recordId,\n },\n }),\n downloadImportFailed: (params: ImportExportRecordDownloadParams) =>\n download({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/importRecord/downloadFailed.xlsx\",\n ),\n method: \"get\",\n query: {\n recordId: params.recordId,\n },\n }),\n downloadExportRecord: (params: ImportExportRecordDownloadParams) =>\n download({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/exportRecord/download.xlsx\",\n ),\n method: \"get\",\n query: {\n recordId: params.recordId,\n },\n }),\n getDataManagementConfig: <T = unknown>(\n params: DataManagementConfigParams,\n ) =>\n request<T>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/dataManagement/config/get.json\",\n ),\n method: \"get\",\n query: {\n formUuid: params.formUuid,\n },\n }),\n saveDataManagementConfig: <T = unknown>(\n params: SaveDataManagementConfigParams,\n ) =>\n request<T>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/form/dataManagement/config/save.json\",\n ),\n method: \"post\",\n body: {\n formUuid: params.formUuid,\n config: params.config,\n },\n }),\n }\n\n const user = {\n create: <T = unknown>(params: CreateUserParams) =>\n request<T>({\n path: \"/user/create\",\n method: \"post\",\n body: params,\n }),\n update: <T = unknown>(params: UpdateUserParams) =>\n request<T>({\n path: \"/user/update\",\n method: \"put\",\n body: params,\n }),\n remove: <T = boolean>(id: string) =>\n request<T>({\n path: `/user/${encodePathSegment(id)}`,\n method: \"delete\",\n }),\n get: <T = unknown>(id = \"current\") =>\n request<T>({\n path: `/user/${encodePathSegment(id)}`,\n method: \"get\",\n }),\n getCurrent: <T = unknown>() =>\n request<T>({\n path: \"/user/current\",\n method: \"get\",\n }),\n getByUsername: <T = unknown>(username: string) =>\n request<T>({\n path: `/user/username/${encodePathSegment(username)}`,\n method: \"get\",\n }),\n list: <T = unknown>(params?: UserListParams) =>\n request<T>({\n path: \"/user/list\",\n method: \"get\",\n query: {\n ids: params?.ids,\n departmentIds: params?.departmentIds,\n name: params?.name,\n username: params?.username,\n phone: params?.phone,\n email: params?.email,\n page: params?.page,\n pageSize: params?.pageSize,\n },\n }),\n search: <T = unknown>(keyword?: string) =>\n request<T>({\n path: \"/user/search\",\n method: \"get\",\n query: {\n keyword,\n },\n }),\n listAll: <T = unknown>() =>\n request<T>({\n path: \"/user/all\",\n method: \"get\",\n }),\n listByDepartment: <T = unknown>(departmentId: string) =>\n request<T>({\n path: `/user/department/${encodePathSegment(departmentId)}`,\n method: \"get\",\n }),\n validate: <T = unknown>(params: ValidateUserParams) =>\n request<T>({\n path: \"/user/validate\",\n method: \"post\",\n body: params,\n }),\n }\n\n const getParentDepartments = <T = PageDepartmentRecord[]>(\n departmentId: string,\n options: GetParentDepartmentsOptions = {},\n ) =>\n request<T>({\n path: `/department/${encodePathSegment(departmentId)}/parentDepartments`,\n method: \"get\",\n query: {\n includeSelf: options.includeSelf ?? true,\n },\n })\n\n const department = {\n getParentDepartments,\n getCurrentUserParentDepartments: async (\n options: GetParentDepartmentsOptions = {},\n ): Promise<CurrentUserDepartmentParents[]> => {\n const departments = (context.user.departments || []).filter(\n (item) => typeof item.id === \"string\" && item.id.trim(),\n )\n\n return Promise.all(\n departments.map(async (item) => {\n const response = await getParentDepartments(item.id || \"\", {\n includeSelf: options.includeSelf,\n })\n return {\n department: item,\n parents: response.result || [],\n }\n }),\n )\n },\n }\n\n const role = {\n create: <T = unknown>(params: CreateRoleParams) =>\n request<T>({\n path: \"/role/\",\n method: \"post\",\n body: params,\n }),\n update: <T = unknown>(id: string, params: UpdateRoleParams) =>\n request<T>({\n path: `/role/${encodePathSegment(id)}`,\n method: \"put\",\n body: params,\n }),\n remove: <T = boolean>(id: string) =>\n request<T>({\n path: `/role/${encodePathSegment(id)}`,\n method: \"delete\",\n }),\n get: <T = unknown>(id: string) =>\n request<T>({\n path: `/role/${encodePathSegment(id)}`,\n method: \"get\",\n }),\n list: <T = unknown>(params?: RoleListParams) =>\n request<T>({\n path: \"/role/\",\n method: \"get\",\n query: withDefaultAppType(context, params) as\n | Record<string, unknown>\n | undefined,\n }),\n listUsers: <T = unknown>(roleId: string, params?: RoleUsersParams) =>\n request<T>({\n path: `/role/${encodePathSegment(roleId)}/users`,\n method: \"get\",\n query: params as Record<string, unknown> | undefined,\n }),\n assignRoles: <T = unknown>(params: AssignRolesParams) =>\n request<T>({\n path: \"/role/assign\",\n method: \"post\",\n body: params,\n }),\n addUserRole: <T = boolean>(params: { userId: string; roleId: string }) =>\n request<T>({\n path: \"/role/add\",\n method: \"post\",\n body: params,\n }),\n removeUserRole: <T = boolean>(params: { userId: string; roleId: string }) =>\n request<T>({\n path: \"/role/remove\",\n method: \"post\",\n body: params,\n }),\n batchAddUsers: <T = unknown>(params: BatchAddUsersToRoleParams) =>\n request<T>({\n path: \"/role/batch-add-users\",\n method: \"post\",\n body: params,\n }),\n getMyRoles: <T = unknown>(params?: GetUserRolesParams) =>\n request<T>({\n path: \"/role/my/roles\",\n method: \"get\",\n query: withDefaultAppType(context, params) as\n | Record<string, unknown>\n | undefined,\n }),\n getCurrentRole: <T = unknown>(params?: GetUserRolesParams) =>\n request<T>({\n path: \"/role/my/current\",\n method: \"get\",\n query: withDefaultAppType(context, params) as\n | Record<string, unknown>\n | undefined,\n }),\n switchPlatformRole: <T = boolean>(params: SwitchPlatformRoleParams) =>\n request<T>({\n path: \"/role/switch/platform\",\n method: \"post\",\n body: params,\n }),\n switchAppRole: <T = boolean>(params: SwitchAppRoleParams) =>\n request<T>({\n path: \"/role/switch/app\",\n method: \"post\",\n body: {\n ...params,\n appType: resolveAppType(context, params.appType),\n },\n }),\n }\n\n const permission = {\n formGroup: {\n create: <T = FormPermissionGroup>(params: CreateFormPermissionGroupDto) =>\n request<T>({\n path: \"/permission/form-group/\",\n method: \"post\",\n body: {\n ...params,\n appType: resolveAppType(context, params.appType),\n },\n }),\n update: <T = FormPermissionGroup>(\n id: string,\n params: UpdateFormPermissionGroupDto,\n ) =>\n request<T>({\n path: `/permission/form-group/${encodePathSegment(id)}`,\n method: \"put\",\n body: {\n ...params,\n ...(params.appType\n ? { appType: resolveAppType(context, params.appType) }\n : {}),\n },\n }),\n remove: <T = boolean>(id: string) =>\n request<T>({\n path: `/permission/form-group/${encodePathSegment(id)}`,\n method: \"delete\",\n }),\n get: <T = FormPermissionGroup | null>(id: string) =>\n request<T>({\n path: `/permission/form-group/${encodePathSegment(id)}`,\n method: \"get\",\n }),\n list: <T = PageOffsetListResult<FormPermissionGroup>>(\n params?: QueryFormPermissionGroupDto,\n ) =>\n request<T>({\n path: \"/permission/form-group/\",\n method: \"get\",\n query: {\n ...params,\n appType: resolveAppType(context, params?.appType),\n },\n }),\n getViewFieldPermissions: <\n T = Record<string, ViewFieldPermissionValue>,\n >(params: {\n appType?: string\n formUuid: string\n }) =>\n request<T>({\n path: \"/permission/form-group/field-permissions\",\n method: \"get\",\n query: {\n appType: resolveAppType(context, params.appType),\n formUuid: params.formUuid,\n },\n }),\n getViewPermissionSummary: <T = ViewPermissionSummary>(params: {\n appType?: string\n formUuid: string\n }) =>\n request<T>({\n path: \"/permission/form-group/view-permissions\",\n method: \"get\",\n query: {\n appType: resolveAppType(context, params.appType),\n formUuid: params.formUuid,\n },\n }),\n },\n pageGroup: {\n create: <T = PagePermissionGroup>(params: CreatePagePermissionGroupDto) =>\n request<T>({\n path: \"/permission/page-group/\",\n method: \"post\",\n body: {\n ...params,\n appType: resolveAppType(context, params.appType),\n },\n }),\n update: <T = PagePermissionGroup>(\n id: string,\n params: UpdatePagePermissionGroupDto,\n ) =>\n request<T>({\n path: `/permission/page-group/${encodePathSegment(id)}`,\n method: \"put\",\n body: {\n ...params,\n ...(params.appType\n ? { appType: resolveAppType(context, params.appType) }\n : {}),\n },\n }),\n remove: <T = boolean>(id: string) =>\n request<T>({\n path: `/permission/page-group/${encodePathSegment(id)}`,\n method: \"delete\",\n }),\n get: <T = PagePermissionGroup | null>(id: string) =>\n request<T>({\n path: `/permission/page-group/${encodePathSegment(id)}`,\n method: \"get\",\n }),\n list: <T = PageOffsetListResult<PagePermissionGroup>>(\n params?: QueryPagePermissionGroupDto,\n ) =>\n request<T>({\n path: \"/permission/page-group/\",\n method: \"get\",\n query: {\n ...params,\n appType: resolveAppType(context, params?.appType),\n },\n }),\n getUserMenuPermissions: <T = UserMenuPermissionsResponse>(\n appType?: string,\n ) =>\n request<T>({\n path: \"/permission/page-group/user-menu-permissions\",\n method: \"get\",\n query: {\n appType: resolveAppType(context, appType),\n },\n }),\n },\n api: {\n create: <T = unknown>(params: CreateApiPermissionParams) =>\n request<T>({\n path: \"/permission/api\",\n method: \"post\",\n body: params,\n }),\n update: <T = unknown>(id: string, params: UpdateApiPermissionParams) =>\n request<T>({\n path: `/permission/api/${encodePathSegment(id)}`,\n method: \"put\",\n body: params,\n }),\n remove: <T = boolean>(id: string) =>\n request<T>({\n path: `/permission/api/${encodePathSegment(id)}`,\n method: \"delete\",\n }),\n list: <T = unknown>(params?: ApiPermissionListParams) =>\n request<T>({\n path: \"/permission/api\",\n method: \"get\",\n query: withDefaultAppType(context, params) as\n | Record<string, unknown>\n | undefined,\n }),\n assign: <T = boolean>(params: AssignPermissionsParams) =>\n request<T>({\n path: \"/permission/api/assign\",\n method: \"post\",\n body: params,\n }),\n getByRole: <T = unknown>(roleId: string) =>\n request<T>({\n path: `/permission/api/role/${encodePathSegment(roleId)}`,\n method: \"get\",\n }),\n getRolesByPermission: <T = unknown>(permissionId: string) =>\n request<T>({\n path: `/permission/api/${encodePathSegment(permissionId)}/roles`,\n method: \"get\",\n }),\n },\n ui: {\n create: <T = unknown>(params: CreateUiPermissionParams) =>\n request<T>({\n path: \"/permission/api/ui\",\n method: \"post\",\n body: params,\n }),\n update: <T = unknown>(id: string, params: UpdateUiPermissionParams) =>\n request<T>({\n path: `/permission/api/ui/${encodePathSegment(id)}`,\n method: \"put\",\n body: params,\n }),\n remove: <T = boolean>(id: string) =>\n request<T>({\n path: `/permission/api/ui/${encodePathSegment(id)}`,\n method: \"delete\",\n }),\n list: <T = unknown>(params?: UiPermissionListParams) =>\n request<T>({\n path: \"/permission/api/ui\",\n method: \"get\",\n query: withDefaultAppType(context, params) as\n | Record<string, unknown>\n | undefined,\n }),\n assign: <T = boolean>(params: AssignPermissionsParams) =>\n request<T>({\n path: \"/permission/api/ui/assign\",\n method: \"post\",\n body: params,\n }),\n getMyPlatform: <T = unknown>() =>\n request<T>({\n path: \"/permission/api/ui/me/platform\",\n method: \"get\",\n }),\n getMyApp: <T = unknown>(appType?: string) =>\n request<T>({\n path: \"/permission/api/ui/me/app\",\n method: \"get\",\n query: {\n appType: resolveAppType(context, appType),\n },\n }),\n },\n }\n\n const process = {\n getInstance: <T = unknown>(params: GetProcessInstanceParams) =>\n request<T>({\n path: buildAppPath(context, params.appType, \"/v1/process/instance\"),\n method: \"get\",\n query: {\n instanceId: params.instanceId,\n },\n }),\n terminateInstance: <T = unknown>(params: TerminateProcessInstanceParams) =>\n request<T>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/process/terminateInstance.json\",\n ),\n method: \"post\",\n body: {\n processInstanceId: params.processInstanceId,\n reason: params.reason,\n },\n }),\n approveTask: <T = unknown>(params: ApproveTaskParams) =>\n request<T>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/process/approveTask.json\",\n ),\n method: \"post\",\n body: {\n ...params,\n appType: resolveAppType(context, params.appType),\n },\n }),\n triggerCallbackTask: <T = unknown>(params: TriggerCallbackTaskParams) =>\n request<T>({\n path: buildAppPath(\n context,\n params.appType,\n \"/v1/process/triggerCallback.json\",\n ),\n method: \"post\",\n body: {\n taskId: params.taskId,\n payload: params.payload,\n },\n }),\n }\n\n const dataView = {\n query: <T = unknown>(code: string, params: DataViewQueryParams = {}) => {\n const dataViewCode = String(code || \"\").trim()\n if (!dataViewCode) {\n throw new Error(\"数据视图 code 不能为空\")\n }\n return request<DataViewQueryResult<T>>({\n path: buildAppPath(\n context,\n params.appType,\n `/v1/data-views/${encodePathSegment(dataViewCode)}/query.json`,\n ),\n method: \"post\",\n body: {\n fields: params.fields,\n filters: serializeSearchExpression(params.filters),\n conditionType: params.conditionType,\n searchKeyWord: params.searchKeyWord,\n currentPage: params.currentPage,\n pageSize: params.pageSize,\n order: Array.isArray(params.order)\n ? params.order\n : params.order\n ? [params.order]\n : undefined,\n },\n })\n },\n stats: <T = unknown>(code: string, params: DataViewStatsParams = {}) => {\n const dataViewCode = String(code || \"\").trim()\n if (!dataViewCode) {\n throw new Error(\"数据视图 code 不能为空\")\n }\n return request<DataViewQueryResult<T>>({\n path: buildAppPath(\n context,\n params.appType,\n `/v1/data-views/${encodePathSegment(dataViewCode)}/stats.json`,\n ),\n method: \"post\",\n body: {\n fields: params.fields,\n filters: serializeSearchExpression(params.filters),\n having: serializeSearchExpression(params.having),\n conditionType: params.conditionType,\n searchKeyWord: params.searchKeyWord,\n currentPage: params.currentPage,\n pageSize: params.pageSize,\n order: Array.isArray(params.order)\n ? params.order\n : params.order\n ? [params.order]\n : undefined,\n },\n })\n },\n }\n\n const appFunction = {\n invoke: <TResult = unknown, TInput = unknown>(\n code: string,\n params: FunctionInvokeParams<TInput> = {},\n ) => {\n const functionCode = String(code || \"\").trim()\n if (!functionCode) {\n throw new Error(\"应用函数 code 不能为空\")\n }\n return request<FunctionInvokeResult<TResult>>({\n path: buildAppPath(\n context,\n params.appType,\n `/v1/functions/${encodePathSegment(functionCode)}/invoke.json`,\n ),\n method: \"post\",\n body: {\n input: params.input,\n },\n })\n },\n }\n\n const notification = {\n sendByType: <T = SendNotificationResult>(\n params: SendNotificationByTypeParams,\n ) =>\n request<T>({\n path: buildOpenXiangdaAppPath(\n context,\n params.appType,\n \"/notifications/send-by-type\",\n ),\n method: \"post\",\n body: {\n ...params,\n appType: resolveAppType(context, params.appType),\n },\n }),\n batchSendByType: <T = SendNotificationResult>(\n params: BatchSendNotificationByTypeParams,\n ) =>\n request<T>({\n path: buildOpenXiangdaAppPath(\n context,\n params.appType,\n \"/notifications/batch-send-by-type\",\n ),\n method: \"post\",\n body: {\n ...params,\n appType: resolveAppType(context, params.appType),\n },\n }),\n findConfig: <T = unknown>(\n notificationType: string,\n params: { appType?: string; formUuid?: string } = {},\n ) =>\n request<T>({\n path: buildOpenXiangdaAppPath(\n context,\n params.appType,\n `/notifications/type-configs/${encodePathSegment(notificationType)}`,\n ),\n method: \"get\",\n query: params.formUuid ? { formUuid: params.formUuid } : undefined,\n }),\n previewTemplate: <T = unknown>(params: PreviewNotificationTemplateParams) =>\n request<T>({\n path: buildOpenXiangdaAppPath(\n context,\n params.appType,\n \"/notifications/templates/preview\",\n ),\n method: \"post\",\n body: {\n ...params,\n appType: resolveAppType(context, params.appType),\n },\n }),\n }\n\n const sdk: PageSdk = {\n context,\n request,\n download,\n transport: {\n request,\n download,\n },\n auth,\n connector,\n form,\n user,\n department,\n role,\n permission,\n process,\n notification,\n dataView,\n function: appFunction,\n dataSource: {\n run: async <TResult = unknown, TRaw = TResult>(\n name: string,\n params: Record<string, unknown> = {},\n ): Promise<PageApiResponse<TResult, TRaw>> => {\n const descriptor = (context.page.dataSources || []).find(\n (item) => item.key === name,\n ) as PageDataSourceDescriptor | undefined\n\n if (!descriptor) {\n throw new Error(`未找到数据源: ${String(name || \"\")}`)\n }\n\n const runtimeParams = params\n const resolvedFormUuid = String(\n runtimeParams.formUuid || descriptor.formUuid || \"\",\n ).trim()\n\n switch (descriptor.type) {\n case \"dataView.query\":\n case \"dataView.stats\": {\n const dataViewCode = String(\n runtimeParams.code ||\n runtimeParams.dataViewCode ||\n descriptor.code ||\n descriptor.dataViewCode ||\n descriptor.viewCode ||\n descriptor.key ||\n \"\",\n ).trim()\n const queryParams = {\n ...(descriptor.params && typeof descriptor.params === \"object\"\n ? (descriptor.params as Record<string, unknown>)\n : {}),\n ...runtimeParams,\n fields: runtimeParams.fields || descriptor.fields,\n filters: mergeSearchExpressions(\n descriptor.defaultFilter,\n runtimeParams.filters as SearchExpression | string | undefined,\n ),\n having: mergeSearchExpressions(\n descriptor.defaultHaving || descriptor.having,\n runtimeParams.having as SearchExpression | string | undefined,\n ),\n } as unknown as DataViewStatsParams\n delete (queryParams as Record<string, unknown>).code\n delete (queryParams as Record<string, unknown>).dataViewCode\n delete (queryParams as Record<string, unknown>).viewCode\n if (descriptor.type === \"dataView.stats\") {\n return dataView.stats<TResult>(\n dataViewCode,\n queryParams,\n ) as unknown as Promise<PageApiResponse<TResult, TRaw>>\n }\n delete (queryParams as Record<string, unknown>).having\n return dataView.query<TResult>(\n dataViewCode,\n queryParams,\n ) as unknown as Promise<PageApiResponse<TResult, TRaw>>\n }\n case \"form.list\":\n return form.advancedSearch<TResult>({\n ...(runtimeParams as unknown as Omit<\n FormAdvancedSearchParams,\n \"formUuid\"\n >),\n formUuid: resolvedFormUuid,\n filters: mergeSearchExpressions(\n descriptor.defaultFilter,\n runtimeParams.filters as SearchExpression | string | undefined,\n ),\n }) as unknown as Promise<PageApiResponse<TResult, TRaw>>\n case \"form.detail\":\n return form.getDetail<TResult>({\n ...(runtimeParams as unknown as Omit<\n FormGetDetailParams,\n \"formUuid\"\n >),\n formUuid: resolvedFormUuid,\n }) as unknown as Promise<PageApiResponse<TResult, TRaw>>\n case \"form.create\":\n return form.create<TResult>({\n ...(runtimeParams as unknown as Omit<\n FormCreateParams,\n \"formUuid\"\n >),\n formUuid: resolvedFormUuid,\n }) as unknown as Promise<PageApiResponse<TResult, TRaw>>\n case \"form.update\":\n return form.update<TResult>({\n ...(runtimeParams as unknown as Omit<\n FormUpdateParams,\n \"formUuid\"\n >),\n formUuid: resolvedFormUuid,\n }) as unknown as Promise<PageApiResponse<TResult, TRaw>>\n case \"form.delete\":\n return form.remove<TResult>({\n ...(runtimeParams as unknown as Omit<\n FormRemoveParams,\n \"formUuid\"\n >),\n formUuid: resolvedFormUuid,\n }) as unknown as Promise<PageApiResponse<TResult, TRaw>>\n default:\n throw new Error(`暂不支持的数据源类型: ${String(descriptor.type)}`)\n }\n },\n },\n navigation: context.navigation,\n ui: context.ui,\n }\n\n return sdk\n}\n","import type { ThemeConfig } from 'antd';\n\nconst baseTheme = {\n hashed: false,\n token: {\n colorPrimary: '#1677ff',\n colorInfo: '#1677ff',\n colorSuccess: '#52c41a',\n colorWarning: '#faad14',\n colorError: '#ff4d4f',\n colorText: 'rgba(0,0,0,0.88)',\n colorTextSecondary: 'rgba(0,0,0,0.65)',\n colorTextTertiary: 'rgba(0,0,0,0.45)',\n colorTextDisabled: 'rgba(0,0,0,0.25)',\n colorBgContainer: '#ffffff',\n colorBgLayout: '#f5f5f5',\n colorBgElevated: '#ffffff',\n colorBorder: '#d9d9d9',\n colorBorderSecondary: '#f0f0f0',\n borderRadius: 6,\n borderRadiusSM: 4,\n borderRadiusLG: 8,\n fontSize: 14,\n controlHeight: 32,\n },\n components: {\n Form: { itemMarginBottom: 16 },\n Card: { paddingLG: 24 },\n },\n} satisfies ThemeConfig;\n\nexport const antdTheme: ThemeConfig = {\n ...baseTheme,\n cssVar: { prefix: 'ant' },\n};\n\nexport const legacyAntdTheme: ThemeConfig = {\n ...baseTheme,\n cssVar: { prefix: 'sy-ant' },\n};\n\nexport default antdTheme;\n","import { useMemo } from \"react\"\n\nimport { usePageContext } from \"./usePageContext\"\n\nimport type { PageUserInfo, PageUserType } from \"../../core/types\"\n\nexport interface CurrentUserState {\n user: PageUserInfo & { userType: PageUserType; isGuest: boolean }\n isGuest: boolean\n isInternalUser: boolean\n displayName: string\n primaryDepartment: NonNullable<PageUserInfo[\"departments\"]>[number] | null\n affiliatedDepartment: PageUserInfo[\"affiliatedDepartment\"] | null\n}\n\nexport const useCurrentUser = (): CurrentUserState => {\n const { user } = usePageContext()\n\n return useMemo(() => {\n const userType: PageUserType =\n user.userType === \"guest\" || user.isGuest ? \"guest\" : \"normal\"\n const isGuest = userType === \"guest\"\n\n return {\n user: {\n ...user,\n isGuest,\n userType,\n },\n isGuest,\n isInternalUser: !isGuest,\n displayName: user.name || user.username || user.id,\n primaryDepartment: user.departments?.[0] || null,\n affiliatedDepartment: user.affiliatedDepartment || null,\n }\n }, [user])\n}\n","import { usePageSdkStore } from \"../store\"\n\nimport type { PageContext } from \"../../core/types\"\n\nexport const usePageContext = (): PageContext => {\n return usePageSdkStore().context\n}\n","import { useCallback, useEffect, useRef, useState } from \"react\"\n\nimport { usePageSdk } from \"./usePageSdk\"\n\nimport type { PageApiResponse } from \"../../core/types\"\nimport type { Dispatch, SetStateAction } from \"react\"\n\nconst createParamsSignature = (value: unknown): string => {\n try {\n return JSON.stringify(value || {})\n } catch {\n return \"\"\n }\n}\n\nexport interface UseDataSourceOptions<\n TResult = unknown,\n TData = TResult,\n TParams extends Record<string, unknown> = Record<string, unknown>,\n> {\n params?: TParams\n immediate?: boolean\n transform?: (result: TResult, response: PageApiResponse<TResult>) => TData\n}\n\nexport interface UseDataSourceResult<\n TResult = unknown,\n TData = TResult,\n TParams extends Record<string, unknown> = Record<string, unknown>,\n> {\n response: PageApiResponse<TResult> | null\n result: TResult | null\n data: TData | null\n loading: boolean\n error: Error | null\n refresh: (params?: TParams) => Promise<PageApiResponse<TResult> | null>\n run: (params?: TParams) => Promise<PageApiResponse<TResult> | null>\n setResponse: Dispatch<SetStateAction<PageApiResponse<TResult> | null>>\n setResult: Dispatch<SetStateAction<TResult | null>>\n setData: Dispatch<SetStateAction<TData | null>>\n}\n\nexport const useDataSource = <\n TResult = unknown,\n TData = TResult,\n TParams extends Record<string, unknown> = Record<string, unknown>,\n>(\n name: string,\n options: UseDataSourceOptions<TResult, TData, TParams> = {},\n): UseDataSourceResult<TResult, TData, TParams> => {\n const sdk = usePageSdk()\n const { params, immediate = true, transform } = options\n const paramsRef = useRef(params)\n const transformRef = useRef(transform)\n const paramsSignature = createParamsSignature(params)\n const [response, setResponse] = useState<PageApiResponse<TResult> | null>(\n null,\n )\n const [result, setResult] = useState<TResult | null>(null)\n const [data, setData] = useState<TData | null>(null)\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n\n paramsRef.current = params\n transformRef.current = transform\n\n const run = useCallback(\n async (overrideParams?: TParams) => {\n setLoading(true)\n setError(null)\n try {\n const response = await sdk.dataSource.run<TResult>(\n name,\n overrideParams || paramsRef.current || {},\n )\n setResponse(response)\n setResult(response.result as TResult | null)\n const activeTransform = transformRef.current\n const nextData = activeTransform\n ? activeTransform(response.result as TResult, response)\n : ((response.result ?? null) as unknown as TData | null)\n setData(nextData)\n return response\n } catch (runtimeError) {\n const nextError =\n runtimeError instanceof Error\n ? runtimeError\n : new Error(String(runtimeError))\n setError(nextError)\n setResponse(null)\n setResult(null)\n return null\n } finally {\n setLoading(false)\n }\n },\n [name, sdk.dataSource],\n )\n\n useEffect(() => {\n if (!immediate) {\n return\n }\n void run()\n }, [immediate, paramsSignature, run])\n\n return {\n response,\n result,\n data,\n loading,\n error,\n refresh: run,\n run,\n setResponse,\n setResult,\n setData,\n }\n}\n","import { usePageSdkStore } from \"../store\"\n\nimport type { PageSdk } from \"../../core/types\"\n\nexport const usePageSdk = (): PageSdk => {\n return usePageSdkStore().sdk\n}\n","import { useCallback, useEffect, useMemo, useState } from \"react\"\n\nimport { usePageSdk } from \"./usePageSdk\"\n\nimport type {\n PageApiResponse,\n ViewFieldPermissionValue,\n ViewOperationPermission,\n ViewPermissionSummary,\n} from \"../../core/types\"\n\nexport interface UseFormViewPermissionsOptions {\n appType?: string\n immediate?: boolean\n}\n\nexport interface UseFormViewPermissionsState {\n summary: ViewPermissionSummary\n response: PageApiResponse<ViewPermissionSummary> | null\n loading: boolean\n error: Error | null\n refresh: () => Promise<PageApiResponse<ViewPermissionSummary> | null>\n can: (operation: ViewOperationPermission) => boolean\n getFieldPermission: (fieldName: string) => ViewFieldPermissionValue | null\n}\n\nconst EMPTY_SUMMARY: ViewPermissionSummary = {\n fieldPermissions: {},\n operations: [],\n}\n\nconst toError = (error: unknown): Error => {\n if (error instanceof Error) {\n return error\n }\n if (\n typeof error === \"object\" &&\n error !== null &&\n \"message\" in error &&\n typeof error.message === \"string\"\n ) {\n return new Error(error.message)\n }\n return new Error(String(error || \"获取查看态权限失败\"))\n}\n\nexport const useFormViewPermissions = (\n formUuid: string,\n options: UseFormViewPermissionsOptions = {},\n): UseFormViewPermissionsState => {\n const sdk = usePageSdk()\n const [summary, setSummary] = useState<ViewPermissionSummary>(EMPTY_SUMMARY)\n const [response, setResponse] =\n useState<PageApiResponse<ViewPermissionSummary> | null>(null)\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n const immediate = options.immediate ?? true\n\n const refresh = useCallback(async () => {\n const normalizedFormUuid = String(formUuid || \"\").trim()\n if (!normalizedFormUuid) {\n setSummary(EMPTY_SUMMARY)\n setResponse(null)\n return null\n }\n\n setLoading(true)\n setError(null)\n\n try {\n const nextResponse =\n await sdk.permission.formGroup.getViewPermissionSummary({\n appType: options.appType,\n formUuid: normalizedFormUuid,\n })\n const nextSummary = nextResponse.result || EMPTY_SUMMARY\n setResponse(nextResponse)\n setSummary({\n fieldPermissions: nextSummary.fieldPermissions || {},\n operations: nextSummary.operations || [],\n })\n return nextResponse\n } catch (requestError) {\n const nextError = toError(requestError)\n setError(nextError)\n setResponse(null)\n setSummary(EMPTY_SUMMARY)\n return null\n } finally {\n setLoading(false)\n }\n }, [formUuid, options.appType, sdk])\n\n useEffect(() => {\n if (!immediate) {\n return\n }\n void refresh()\n }, [immediate, refresh])\n\n const operationSet = useMemo(\n () => new Set(summary.operations),\n [summary.operations],\n )\n\n const can = useCallback(\n (operation: ViewOperationPermission) => operationSet.has(operation),\n [operationSet],\n )\n\n const getFieldPermission = useCallback(\n (fieldName: string) => summary.fieldPermissions[fieldName] || null,\n [summary.fieldPermissions],\n )\n\n return {\n summary,\n response,\n loading,\n error,\n refresh,\n can,\n getFieldPermission,\n }\n}\n","import { usePageContext } from \"./usePageContext\"\n\nimport type { PageMessageApi } from \"../../core/types\"\n\nexport const useMessage = (): PageMessageApi => {\n return usePageContext().ui.message\n}\n","import { usePageContext } from \"./usePageContext\"\n\nimport type { PageModalApi } from \"../../core/types\"\n\nexport const useModal = (): PageModalApi => {\n return usePageContext().ui.modal\n}\n","import { usePageContext } from \"./usePageContext\"\n\nimport type { PageNavigationApi } from \"../../core/types\"\n\nexport const useNavigation = (): PageNavigationApi => {\n return usePageContext().navigation\n}\n","import { usePageContext } from \"./usePageContext\"\n\nexport const usePageProps = <T extends object = Record<string, unknown>>() => {\n return usePageContext().page.props as T\n}\n","import { usePageContext } from \"./usePageContext\"\n\nimport type { PageRouteInfo } from \"../../core/types\"\n\nexport const usePageRoute = (): PageRouteInfo => {\n return usePageContext().route\n}\n","import React, {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from \"react\"\nimport { createBoundFetch } from \"../core/fetch\"\n\nexport type RuntimeErrorType =\n | \"unauthenticated\"\n | \"forbidden\"\n | \"network\"\n | \"unknown\"\n\nexport type RuntimeRequestError = Error & {\n type?: RuntimeErrorType\n status?: number\n code?: number | string\n payload?: unknown\n}\n\nexport interface RuntimeErrorSnapshot {\n type: RuntimeErrorType\n status?: number\n code?: number | string\n message: string\n payload?: unknown\n}\n\nexport class RuntimeHttpError extends Error {\n type: RuntimeErrorType\n status?: number\n code?: number | string\n payload?: unknown\n\n constructor(snapshot: RuntimeErrorSnapshot) {\n super(snapshot.message)\n this.name = \"RuntimeHttpError\"\n this.type = snapshot.type\n this.status = snapshot.status\n this.code = snapshot.code\n this.payload = snapshot.payload\n }\n}\n\nexport interface RuntimeMenuItem {\n id: string\n name: string\n resourceCode?: string | null\n routeCode?: string | null\n path?: string | null\n type?: string\n formUuid?: string | null\n pageId?: string | null\n parentId?: string | null\n sortOrder?: number\n isHidden?: boolean\n icon?: string | null\n children?: RuntimeMenuItem[]\n [key: string]: unknown\n}\n\nexport interface RuntimePagePermissions {\n appType: string\n hasFullAccess: boolean\n roleCodes: string[]\n roleSource?: string\n menuFormUuids: string[]\n menuCodes: string[]\n routeCodes: string[]\n pathPatterns: string[]\n}\n\nexport interface RuntimeBootstrap {\n appType: string\n app?: Record<string, unknown> | null\n user?: Record<string, unknown> | null\n runtime?: {\n mode?: \"legacy\" | \"react-spa\" | string\n settings?: Record<string, unknown>\n activeReleaseId?: string | null\n activeBuildId?: string | null\n indexUrl?: string | null\n assetBaseUrl?: string | null\n }\n permissions?: RuntimePagePermissions\n menus?: RuntimeMenuItem[]\n servicePrefix?: string\n}\n\nexport interface RouteAccessResult {\n appType: string\n canAccess: boolean\n routeCode?: string\n menuCode?: string\n path?: string\n status?: number\n code?: number | string\n message?: string\n errorType?: RuntimeErrorType\n payload?: unknown\n permissions?: RuntimePagePermissions\n}\n\nexport interface RuntimeRequestState<T> {\n data: T | null\n loading: boolean\n error: RuntimeRequestError | null\n}\n\nexport interface RuntimeReloadOptions {\n accessToken?: string | null\n}\n\nexport interface OpenXiangdaProviderProps {\n appType?: string\n servicePrefix?: string\n fetchImpl?: typeof fetch\n children: React.ReactNode\n}\n\ninterface OpenXiangdaRuntimeStore extends RuntimeRequestState<RuntimeBootstrap> {\n appType: string\n servicePrefix: string\n fetchImpl: typeof fetch\n reload: (options?: RuntimeReloadOptions) => Promise<void>\n setAccessToken: (accessToken?: string | null) => void\n}\n\nconst OpenXiangdaRuntimeContext =\n createContext<OpenXiangdaRuntimeStore | null>(null)\n\nexport const OpenXiangdaProvider: React.FC<OpenXiangdaProviderProps> = ({\n appType,\n servicePrefix = \"/service\",\n fetchImpl,\n children,\n}) => {\n const resolvedFetch = useMemo(() => createBoundFetch(fetchImpl), [fetchImpl])\n const resolvedAppType = useMemo(\n () => appType || resolveAppTypeFromLocation(),\n [appType],\n )\n const [accessToken, setAccessTokenState] = useState<string | null>(null)\n const setAccessToken = useCallback(\n (nextAccessToken?: string | null) => {\n setAccessTokenState(nextAccessToken || null)\n },\n [],\n )\n const authorizedFetch = useMemo(\n () => createAuthorizedFetch(resolvedFetch, accessToken),\n [accessToken, resolvedFetch],\n )\n const [state, setState] = useState<RuntimeRequestState<RuntimeBootstrap>>({\n data: null,\n loading: true,\n error: null,\n })\n\n const reload = useCallback(async (options: RuntimeReloadOptions = {}) => {\n if (!resolvedAppType) {\n setState({\n data: null,\n loading: false,\n error: createRuntimeError({\n message: \"appType 不能为空\",\n type: \"unknown\",\n }),\n })\n return\n }\n setState(prev => ({ ...prev, loading: true, error: null }))\n const requestFetch =\n options.accessToken !== undefined\n ? createAuthorizedFetch(resolvedFetch, options.accessToken || null)\n : authorizedFetch\n try {\n const response = await requestFetch(\n buildServiceUrl(\n servicePrefix,\n `/openxiangda-api/v1/apps/${encodeURIComponent(\n resolvedAppType,\n )}/runtime/bootstrap`,\n ),\n {\n credentials: \"include\",\n headers: { accept: \"application/json\" },\n },\n )\n const payload = await readJsonPayload(response)\n if (isRuntimeEnvelopeFailure(response, payload)) {\n throw createRuntimeHttpError(\n response,\n payload,\n payload?.message || `Runtime bootstrap failed: ${response.status}`,\n )\n }\n setState({\n data: payload?.data || null,\n loading: false,\n error: null,\n })\n } catch (error) {\n setState({\n data: null,\n loading: false,\n error: normalizeRuntimeError(error),\n })\n }\n }, [authorizedFetch, resolvedAppType, resolvedFetch, servicePrefix])\n\n useEffect(() => {\n void reload()\n }, [reload])\n\n const value = useMemo<OpenXiangdaRuntimeStore>(\n () => ({\n ...state,\n appType: resolvedAppType,\n servicePrefix,\n fetchImpl: authorizedFetch,\n reload,\n setAccessToken,\n }),\n [authorizedFetch, reload, resolvedAppType, servicePrefix, state],\n )\n\n return (\n <OpenXiangdaRuntimeContext.Provider value={value}>\n {children}\n </OpenXiangdaRuntimeContext.Provider>\n )\n}\n\nexport const useOpenXiangda = () => {\n const context = useContext(OpenXiangdaRuntimeContext)\n if (!context) {\n throw new Error(\"useOpenXiangda must be used inside OpenXiangdaProvider\")\n }\n return context\n}\n\nexport const useRuntimeBootstrap = () => useOpenXiangda()\n\nexport const useAppMenus = () => {\n const runtime = useOpenXiangda()\n return {\n ...runtime,\n data: runtime.data?.menus || [],\n }\n}\n\nexport const usePermission = () => {\n const runtime = useOpenXiangda()\n return {\n ...runtime,\n data: runtime.data?.permissions || null,\n }\n}\n\nexport interface UseCanAccessRouteInput {\n routeCode?: string\n menuCode?: string\n path?: string\n}\n\nexport const useCanAccessRoute = (input: UseCanAccessRouteInput) => {\n const runtime = useOpenXiangda()\n const [state, setState] = useState<RuntimeRequestState<RouteAccessResult>>({\n data: null,\n loading: true,\n error: null,\n })\n\n useEffect(() => {\n let disposed = false\n const check = async () => {\n const permissions = runtime.data?.permissions\n if (!runtime.appType || runtime.loading) {\n setState(prev => ({ ...prev, loading: runtime.loading }))\n return\n }\n if (runtime.error && !runtime.data) {\n const snapshot = toRuntimeErrorSnapshot(runtime.error)\n setState({\n data: {\n appType: runtime.appType,\n canAccess: false,\n status: snapshot.status,\n code: snapshot.code,\n message: snapshot.message,\n errorType: snapshot.type,\n payload: snapshot.payload,\n },\n loading: false,\n error: runtime.error,\n })\n return\n }\n if (permissions?.hasFullAccess) {\n setState({\n data: { appType: runtime.appType, canAccess: true, permissions },\n loading: false,\n error: null,\n })\n return\n }\n setState(prev => ({ ...prev, loading: true, error: null }))\n try {\n const response = await runtime.fetchImpl(\n buildServiceUrl(\n runtime.servicePrefix,\n `/openxiangda-api/v1/apps/${encodeURIComponent(\n runtime.appType,\n )}/runtime/routes/check`,\n ),\n {\n method: \"POST\",\n credentials: \"include\",\n headers: {\n accept: \"application/json\",\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(input),\n },\n )\n const payload = await readJsonPayload(response)\n const code = payload?.code ?? response.status\n const canAccess = Boolean(payload?.data?.canAccess)\n const errorType = canAccess\n ? undefined\n : classifyRuntimeError(response.status, code)\n const data: RouteAccessResult = {\n ...(payload?.data || {\n appType: runtime.appType,\n canAccess: false,\n }),\n appType: payload?.data?.appType || runtime.appType,\n canAccess,\n status: response.status,\n code,\n message: payload?.message,\n errorType,\n payload,\n }\n if (!disposed) {\n const shouldTreatAsError =\n !response.ok || isServerErrorCode(code)\n setState({\n data,\n loading: false,\n error: shouldTreatAsError\n ? createRuntimeHttpError(\n response,\n payload,\n payload?.message || `Route check failed: ${response.status}`,\n )\n : null,\n })\n }\n } catch (error) {\n if (!disposed) {\n setState({\n data: null,\n loading: false,\n error: normalizeRuntimeError(error),\n })\n }\n }\n }\n void check()\n return () => {\n disposed = true\n }\n }, [\n input.menuCode,\n input.path,\n input.routeCode,\n runtime.appType,\n runtime.data?.permissions,\n runtime.fetchImpl,\n runtime.loading,\n runtime.servicePrefix,\n ])\n\n return {\n ...state,\n canAccess: Boolean(state.data?.canAccess),\n }\n}\n\nexport interface PermissionBoundaryProps extends UseCanAccessRouteInput {\n children: React.ReactNode\n fallback?: React.ReactNode | PermissionBoundaryFallback\n loadingFallback?: React.ReactNode | PermissionBoundaryFallback\n}\n\nexport interface PermissionBoundaryFallbackState {\n access: ReturnType<typeof useCanAccessRoute>\n runtime: ReturnType<typeof useOpenXiangda>\n error: RuntimeRequestError | null\n errorType: RuntimeErrorType\n status?: number\n code?: number | string\n message: string\n}\n\nexport type PermissionBoundaryFallback = (\n state: PermissionBoundaryFallbackState,\n) => React.ReactNode\n\nexport const PermissionBoundary: React.FC<PermissionBoundaryProps> = ({\n children,\n fallback = null,\n loadingFallback = null,\n routeCode,\n menuCode,\n path,\n}) => {\n const runtime = useOpenXiangda()\n const access = useCanAccessRoute({ routeCode, menuCode, path })\n const fallbackState = createPermissionFallbackState(access, runtime)\n if (access.loading) {\n return <>{renderBoundaryFallback(loadingFallback, fallbackState)}</>\n }\n if (!access.canAccess) {\n return <>{renderBoundaryFallback(fallback, fallbackState)}</>\n }\n return <>{children}</>\n}\n\nexport interface RuntimeResolveLoginOptions {\n redirectUri?: string\n loginUrl?: string\n domain?: string\n}\n\nexport interface RuntimeRedirectLoginOptions extends RuntimeResolveLoginOptions {\n replace?: boolean\n}\n\nexport interface RuntimeLogoutOptions extends RuntimeRedirectLoginOptions {\n continueOnError?: boolean\n}\n\nexport const useRuntimeAuth = () => {\n const runtime = useOpenXiangda()\n\n const resolveLoginUrl = useCallback(\n async (options: RuntimeResolveLoginOptions = {}) => {\n const redirectUri = options.redirectUri || getCurrentHref()\n const domain = options.domain || getCurrentHostname()\n const appTenantId = getRecordString(runtime.data?.app, \"tenantId\")\n\n try {\n const statusUrl = withQuery(\n buildServiceUrl(runtime.servicePrefix, \"/api/sso/status\"),\n { domain },\n )\n const statusResponse = await runtime.fetchImpl(statusUrl, {\n credentials: \"include\",\n headers: { accept: \"application/json\" },\n })\n const statusPayload = await readJsonPayload(statusResponse)\n const sso = statusPayload?.data || {}\n const enabled = Boolean(sso.enabled)\n const shouldUseSso = Boolean(\n enabled && (sso.forceLogin ?? sso.autoRedirect ?? true),\n )\n if (shouldUseSso) {\n const loginUrlResponse = await runtime.fetchImpl(\n withQuery(buildServiceUrl(runtime.servicePrefix, \"/api/sso/login-url\"), {\n domain,\n redirectUri,\n ...(sso.tenantId || appTenantId\n ? { tenantId: String(sso.tenantId || appTenantId) }\n : {}),\n ...(sso.protocol ? { protocol: String(sso.protocol) } : {}),\n }),\n {\n credentials: \"include\",\n headers: { accept: \"application/json\" },\n },\n )\n const loginUrlPayload = await readJsonPayload(loginUrlResponse)\n const loginUrl =\n loginUrlPayload?.data?.loginUrl ||\n loginUrlPayload?.data?.url ||\n loginUrlPayload?.loginUrl ||\n loginUrlPayload?.url\n if (loginUrl) return String(loginUrl)\n }\n } catch {\n // Login resolution must always have a local fallback so logged-out\n // users are not stranded behind a permission state.\n }\n\n const configuredLoginUrl =\n options.loginUrl ||\n getRuntimeEnv(\"OPENXIANGDA_LOGIN_URL\") ||\n getRuntimeEnv(\"VITE_OPENXIANGDA_LOGIN_URL\") ||\n getRuntimeEnv(\"APP_LOGIN_URL\") ||\n getRuntimeEnv(\"VITE_APP_LOGIN_URL\") ||\n getRuntimeEnv(\"VITE_BATH_AUTH_URL\") ||\n getRuntimeEnv(\"BATH_AUTH_URL\")\n if (configuredLoginUrl) {\n return attachCallback(configuredLoginUrl, redirectUri)\n }\n return attachCallback(\"/platform/login\", redirectUri)\n },\n [runtime.data?.app, runtime.fetchImpl, runtime.servicePrefix],\n )\n\n const redirectToLogin = useCallback(\n async (options: RuntimeRedirectLoginOptions = {}) => {\n const loginUrl = await resolveLoginUrl(options)\n if (typeof window !== \"undefined\") {\n if (options.replace === false) {\n window.location.assign(loginUrl)\n } else {\n window.location.replace(loginUrl)\n }\n }\n return loginUrl\n },\n [resolveLoginUrl],\n )\n\n const logout = useCallback(async () => {\n const response = await runtime.fetchImpl(\n buildServiceUrl(runtime.servicePrefix, \"/api/auth/logout\"),\n {\n method: \"POST\",\n credentials: \"include\",\n headers: { accept: \"application/json\" },\n },\n )\n const payload = await readJsonPayload(response)\n if (isRuntimeEnvelopeFailure(response, payload)) {\n throw createRuntimeHttpError(\n response,\n payload,\n payload?.message || `Logout failed: ${response.status}`,\n )\n }\n return payload\n }, [runtime.fetchImpl, runtime.servicePrefix])\n\n const logoutAndRedirect = useCallback(\n async (options: RuntimeLogoutOptions = {}) => {\n try {\n await logout()\n } catch (error) {\n if (options.continueOnError === false) throw error\n }\n return redirectToLogin(options)\n },\n [logout, redirectToLogin],\n )\n\n return {\n logout,\n logoutAndRedirect,\n redirectToLogin,\n resolveLoginUrl,\n }\n}\n\nconst buildServiceUrl = (servicePrefix: string, path: string) => {\n const prefix = servicePrefix.endsWith(\"/\")\n ? servicePrefix.slice(0, -1)\n : servicePrefix\n const suffix = path.startsWith(\"/\") ? path : `/${path}`\n return `${prefix}${suffix}`\n}\n\nconst createAuthorizedFetch = (\n baseFetch: typeof fetch,\n accessToken?: string | null,\n): typeof fetch => {\n if (!accessToken) return baseFetch\n return ((input, init = {}) => {\n const headers = new Headers(init.headers || {})\n if (!headers.has(\"authorization\")) {\n headers.set(\"authorization\", `Bearer ${accessToken}`)\n }\n return baseFetch(input, {\n ...init,\n headers,\n })\n }) as typeof fetch\n}\n\nconst readJsonPayload = async (response: Response) => {\n try {\n return await response.json()\n } catch {\n return null\n }\n}\n\nconst createRuntimeHttpError = (\n response: Response,\n payload: unknown,\n fallbackMessage: string,\n): RuntimeRequestError =>\n createRuntimeError({\n type: classifyRuntimeError(\n response.status,\n getRecordValue(payload, \"code\") as number | string | undefined,\n ),\n status: response.status,\n code: getRecordValue(payload, \"code\") as number | string | undefined,\n message:\n (getRecordValue(payload, \"message\") as string | undefined) ||\n fallbackMessage,\n payload,\n })\n\nconst createRuntimeError = (\n snapshot: RuntimeErrorSnapshot,\n): RuntimeRequestError =>\n new RuntimeHttpError({\n ...snapshot,\n type: snapshot.type || \"unknown\",\n message: snapshot.message || \"Runtime request failed\",\n })\n\nconst normalizeRuntimeError = (error: unknown): RuntimeRequestError => {\n if (error instanceof RuntimeHttpError) return error\n if (error instanceof Error) {\n const runtimeError = error as RuntimeRequestError\n runtimeError.type = runtimeError.type || classifyRuntimeError(runtimeError.status, runtimeError.code)\n return runtimeError\n }\n return createRuntimeError({\n type: \"unknown\",\n message: String(error),\n })\n}\n\nconst toRuntimeErrorSnapshot = (\n error: RuntimeRequestError,\n): RuntimeErrorSnapshot => ({\n type: error.type || classifyRuntimeError(error.status, error.code),\n status: error.status,\n code: error.code,\n message: error.message || \"Runtime request failed\",\n payload: error.payload,\n})\n\nconst classifyRuntimeError = (\n status?: number,\n code?: number | string,\n): RuntimeErrorType => {\n const normalizedCode = typeof code === \"string\" ? Number(code) : code\n if (status === 401 || normalizedCode === 401) return \"unauthenticated\"\n if (status === 403 || normalizedCode === 403) return \"forbidden\"\n if (typeof code === \"string\") {\n const normalizedText = code.toUpperCase()\n if (\n normalizedText.includes(\"DENIED\") ||\n normalizedText.includes(\"FORBIDDEN\")\n ) {\n return \"forbidden\"\n }\n if (\n normalizedText.includes(\"UNAUTH\") ||\n normalizedText.includes(\"LOGIN\")\n ) {\n return \"unauthenticated\"\n }\n }\n if (!status && !normalizedCode) return \"network\"\n return \"unknown\"\n}\n\nconst createPermissionFallbackState = (\n access: ReturnType<typeof useCanAccessRoute>,\n runtime: ReturnType<typeof useOpenXiangda>,\n): PermissionBoundaryFallbackState => {\n const error = access.error || runtime.error\n const accessData = access.data\n const errorType =\n accessData?.errorType ||\n error?.type ||\n (!access.canAccess ? \"forbidden\" : \"unknown\")\n return {\n access,\n runtime,\n error,\n errorType,\n status: accessData?.status || error?.status,\n code: accessData?.code || error?.code,\n message:\n accessData?.message ||\n error?.message ||\n (errorType === \"unauthenticated\"\n ? \"当前账号尚未登录\"\n : \"当前账号没有访问权限\"),\n }\n}\n\nconst renderBoundaryFallback = (\n fallback: React.ReactNode | PermissionBoundaryFallback,\n state: PermissionBoundaryFallbackState,\n) => (typeof fallback === \"function\" ? fallback(state) : fallback)\n\nconst withQuery = (\n url: string,\n params: Record<string, string | number | boolean | undefined>,\n) => {\n const query = new URLSearchParams()\n Object.entries(params).forEach(([key, value]) => {\n if (value === undefined || value === \"\") return\n query.set(key, String(value))\n })\n const serialized = query.toString()\n if (!serialized) return url\n return `${url}${url.includes(\"?\") ? \"&\" : \"?\"}${serialized}`\n}\n\nconst attachCallback = (loginUrl: string, callback: string) => {\n if (!callback) return loginUrl\n try {\n const base =\n typeof window !== \"undefined\" ? window.location.origin : \"http://localhost\"\n const parsed = new URL(loginUrl, base)\n if (!parsed.searchParams.has(\"callback\") && !parsed.searchParams.has(\"redirectUri\")) {\n parsed.searchParams.set(\"callback\", callback)\n }\n if (loginUrl.startsWith(\"http://\") || loginUrl.startsWith(\"https://\")) {\n return parsed.toString()\n }\n return `${parsed.pathname}${parsed.search}${parsed.hash}`\n } catch {\n const separator = loginUrl.includes(\"?\") ? \"&\" : \"?\"\n return `${loginUrl}${separator}callback=${encodeURIComponent(callback)}`\n }\n}\n\nconst getCurrentHref = () =>\n typeof window === \"undefined\" ? \"\" : window.location.href\n\nconst getCurrentHostname = () =>\n typeof window === \"undefined\" ? \"\" : window.location.hostname\n\nconst getRuntimeEnv = (key: string) => {\n const env =\n typeof process !== \"undefined\"\n ? (process as unknown as { env?: Record<string, string | undefined> }).env\n : undefined\n return env?.[key]\n}\n\nconst getRecordValue = (value: unknown, key: string) => {\n if (!value || typeof value !== \"object\") return undefined\n return (value as Record<string, unknown>)[key]\n}\n\nconst isSuccessCode = (code: unknown) => {\n if (code === undefined || code === null || code === \"\") return true\n const normalized = Number(code)\n return Number.isFinite(normalized)\n ? normalized === 0 || (normalized >= 200 && normalized < 300)\n : false\n}\n\nconst isRuntimeEnvelopeFailure = (response: Response, payload: unknown) => {\n const code = getRecordValue(payload, \"code\")\n const success = getRecordValue(payload, \"success\")\n return !response.ok || success === false || !isSuccessCode(code)\n}\n\nconst isServerErrorCode = (code: unknown) => {\n const normalized = Number(code)\n return Number.isFinite(normalized) && normalized >= 500\n}\n\nconst getRecordString = (value: unknown, key: string) => {\n const result = getRecordValue(value, key)\n return typeof result === \"string\" ? result : undefined\n}\n\nconst resolveAppTypeFromLocation = () => {\n if (typeof window === \"undefined\") return \"\"\n const segments = window.location.pathname.split(\"/\").filter(Boolean)\n const viewIndex = segments[0] === \"view\" ? 1 : 0\n if (segments[viewIndex] === \"submit\") return segments[viewIndex + 1] || \"\"\n if (segments[viewIndex] === \"preview\") return segments[viewIndex + 1] || \"\"\n return segments[viewIndex] || \"\"\n}\n\nexport {\n LoginPage,\n useAuth,\n useLoginMethods,\n} from \"./auth\"\nexport type {\n LoginPageProps,\n UseAuthOptions,\n UseLoginMethodsState,\n} from \"./auth\"\nexport {\n AuthClientError,\n createAuthClient,\n} from \"../core/auth\"\nexport type {\n AppAuthClient,\n AuthMethod,\n AuthMethodType,\n AuthTokenData,\n DingTalkLoginInput,\n GuestLoginInput,\n LoginMethodsResult,\n PasswordLoginInput,\n PhoneCodeInput,\n PhoneCodeLoginInput,\n PhoneCodeRegisterInput,\n PhoneCodeSendResult,\n RefreshInput,\n ResolveLoginUrlInput,\n SsoLoginUrlInput,\n SsoLoginUrlResult,\n} from \"../core/auth\"\n","export const createBoundFetch = (fetchImpl?: typeof fetch): typeof fetch => {\n const baseFetch = fetchImpl || globalThis.fetch;\n return ((input, init) => baseFetch.call(globalThis, input, init)) as typeof fetch;\n};\n","import React, {\n type CSSProperties,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from \"react\"\nimport {\n Alert,\n Button,\n Card,\n Empty,\n Form,\n Input,\n Space,\n Tabs,\n Typography,\n} from \"antd\"\nimport {\n LoginOutlined,\n MobileOutlined,\n QrcodeOutlined,\n SafetyCertificateOutlined,\n UserOutlined,\n} from \"@ant-design/icons\"\nimport {\n type AppAuthClient,\n type AuthClientOptions,\n type AuthMethod,\n type AuthTokenData,\n createAuthClient,\n type LoginMethodsResult,\n} from \"../core/auth\"\nimport { useOpenXiangda } from \"./openxiangdaProvider\"\n\nexport interface UseAuthOptions extends Partial<AuthClientOptions> {}\n\nexport interface UseLoginMethodsState {\n data: LoginMethodsResult | null\n methods: AuthMethod[]\n loading: boolean\n error: Error | null\n reload: () => Promise<void>\n}\n\nexport interface LoginPageProps extends UseAuthOptions {\n title?: React.ReactNode\n subtitle?: React.ReactNode\n className?: string\n style?: CSSProperties\n defaultMethod?: \"password\" | \"phone_code\"\n redirectUrl?: string\n redirectOnSuccess?: boolean\n onSuccess?: (data: AuthTokenData) => void | Promise<void>\n}\n\ninterface PasswordFormValues {\n username: string\n password: string\n}\n\ninterface PhoneCodeFormValues {\n phone: string\n code: string\n}\n\nexport const useAuth = (options: UseAuthOptions = {}) => {\n const runtime = useOpenXiangda()\n const client = useMemo(\n () =>\n createAuthClient({\n appType: options.appType || runtime.appType,\n servicePrefix: options.servicePrefix || runtime.servicePrefix,\n fetchImpl: options.fetchImpl || runtime.fetchImpl,\n }),\n [\n options.appType,\n options.fetchImpl,\n options.servicePrefix,\n runtime.appType,\n runtime.fetchImpl,\n runtime.servicePrefix,\n ],\n )\n\n return useMemo(\n () => ({\n client,\n getMethods: client.getMethods,\n passwordLogin: client.passwordLogin,\n dingtalkLogin: client.dingtalkLogin,\n guestLogin: client.guestLogin,\n sendPhoneCode: client.sendPhoneCode,\n phoneCodeLogin: client.phoneCodeLogin,\n registerWithPhoneCode: client.registerWithPhoneCode,\n getSsoLoginUrl: client.getSsoLoginUrl,\n refresh: client.refresh,\n logout: client.logout,\n resolveLoginUrl: client.resolveLoginUrl,\n }),\n [client],\n )\n}\n\nexport const useLoginMethods = (\n options: UseAuthOptions = {},\n): UseLoginMethodsState => {\n const auth = useAuth(options)\n const [state, setState] = useState<{\n data: LoginMethodsResult | null\n loading: boolean\n error: Error | null\n }>({\n data: null,\n loading: true,\n error: null,\n })\n\n const reload = useCallback(async () => {\n setState(prev => ({ ...prev, loading: true, error: null }))\n try {\n const data = await auth.getMethods()\n setState({ data, loading: false, error: null })\n } catch (error) {\n setState({\n data: null,\n loading: false,\n error: normalizeError(error),\n })\n }\n }, [auth])\n\n useEffect(() => {\n let disposed = false\n const run = async () => {\n setState(prev => ({ ...prev, loading: true, error: null }))\n try {\n const data = await auth.getMethods()\n if (!disposed) setState({ data, loading: false, error: null })\n } catch (error) {\n if (!disposed) {\n setState({\n data: null,\n loading: false,\n error: normalizeError(error),\n })\n }\n }\n }\n void run()\n return () => {\n disposed = true\n }\n }, [auth])\n\n return {\n ...state,\n methods: state.data?.methods || [],\n reload,\n }\n}\n\nexport const LoginPage: React.FC<LoginPageProps> = ({\n title,\n subtitle,\n className,\n style,\n defaultMethod,\n redirectUrl,\n redirectOnSuccess = true,\n onSuccess,\n ...authOptions\n}) => {\n const runtime = useOpenXiangda()\n const auth = useAuth(authOptions)\n const methodsState = useLoginMethods(authOptions)\n const [passwordForm] = Form.useForm<PasswordFormValues>()\n const [phoneForm] = Form.useForm<PhoneCodeFormValues>()\n const [activeMethod, setActiveMethod] = useState<string>(\n defaultMethod || \"password\",\n )\n const [phonePurpose, setPhonePurpose] = useState<\"login\" | \"register\">(\n \"login\",\n )\n const [phoneChallengeId, setPhoneChallengeId] = useState(\"\")\n const [submitting, setSubmitting] = useState(false)\n const [sendingCode, setSendingCode] = useState(false)\n const [error, setError] = useState<string | null>(null)\n\n const methods = methodsState.methods.filter(method => method.enabled !== false)\n const passwordMethod = findMethod(methods, \"password\")\n const phoneMethod = findMethod(methods, \"phone_code\")\n const dingtalkMethod = findMethod(methods, \"dingtalk\")\n const ssoMethod = findMethod(methods, \"sso\")\n const guestMethod = findMethod(methods, \"guest\")\n const allowRegister = methodsState.data?.registration?.mode !== \"reject\"\n\n const tabItems = useMemo(() => {\n const items = []\n if (passwordMethod) {\n items.push({\n key: \"password\",\n label: (\n <Space size={6}>\n <UserOutlined />\n <span>{passwordMethod.label || \"账号密码\"}</span>\n </Space>\n ),\n children: (\n <PasswordLoginForm\n form={passwordForm}\n loading={submitting}\n onFinish={async values => {\n setSubmitting(true)\n setError(null)\n try {\n await handleSuccess(\n await auth.passwordLogin({\n username: values.username,\n password: values.password,\n }),\n )\n } catch (loginError) {\n setError(normalizeError(loginError).message)\n } finally {\n setSubmitting(false)\n }\n }}\n />\n ),\n })\n }\n if (phoneMethod) {\n items.push({\n key: \"phone_code\",\n label: (\n <Space size={6}>\n <MobileOutlined />\n <span>{phoneMethod.label || \"手机号\"}</span>\n </Space>\n ),\n children: (\n <PhoneCodeLoginForm\n allowRegister={allowRegister}\n form={phoneForm}\n loading={submitting}\n phonePurpose={phonePurpose}\n sendingCode={sendingCode}\n onPurposeChange={setPhonePurpose}\n onSendCode={async () => {\n const values = await phoneForm.validateFields([\"phone\"])\n setSendingCode(true)\n setError(null)\n try {\n const result = await auth.sendPhoneCode({\n phone: values.phone,\n purpose: phonePurpose,\n })\n setPhoneChallengeId(result.challengeId)\n } catch (sendError) {\n setError(normalizeError(sendError).message)\n } finally {\n setSendingCode(false)\n }\n }}\n onFinish={async values => {\n setSubmitting(true)\n setError(null)\n try {\n const data =\n phonePurpose === \"register\"\n ? await auth.registerWithPhoneCode({\n phone: values.phone,\n code: values.code,\n challengeId: phoneChallengeId,\n })\n : await auth.phoneCodeLogin({\n phone: values.phone,\n code: values.code,\n challengeId: phoneChallengeId,\n })\n await handleSuccess(data)\n } catch (loginError) {\n setError(normalizeError(loginError).message)\n } finally {\n setSubmitting(false)\n }\n }}\n />\n ),\n })\n }\n return items\n }, [\n allowRegister,\n auth,\n handleSuccess,\n passwordForm,\n passwordMethod,\n phoneChallengeId,\n phoneForm,\n phoneMethod,\n phonePurpose,\n sendingCode,\n submitting,\n ])\n\n useEffect(() => {\n const firstKey = tabItems[0]?.key\n if (firstKey && !tabItems.some(item => item.key === activeMethod)) {\n setActiveMethod(firstKey)\n }\n }, [activeMethod, tabItems])\n\n const handleDingTalkLogin = async () => {\n setSubmitting(true)\n setError(null)\n try {\n const code = await requestDingTalkCode(dingtalkMethod)\n await handleSuccess(\n await auth.dingtalkLogin({\n code,\n corpId: getString(dingtalkMethod, \"corpId\"),\n }),\n )\n } catch (loginError) {\n setError(normalizeError(loginError).message)\n } finally {\n setSubmitting(false)\n }\n }\n\n const handleSsoLogin = async () => {\n setSubmitting(true)\n setError(null)\n try {\n const redirectUri = getCurrentHref()\n const result = await auth.getSsoLoginUrl({\n protocol: getString(ssoMethod, \"protocol\") || \"cas\",\n redirectUri,\n })\n window.location.assign(result.loginUrl)\n } catch (loginError) {\n setError(normalizeError(loginError).message)\n setSubmitting(false)\n }\n }\n\n const handleGuestLogin = async () => {\n setSubmitting(true)\n setError(null)\n try {\n await handleSuccess(\n await auth.guestLogin({\n guestIdentifier: getOrCreateGuestIdentifier(auth.client),\n domain: getCurrentHostname(),\n }),\n )\n } catch (loginError) {\n setError(normalizeError(loginError).message)\n } finally {\n setSubmitting(false)\n }\n }\n\n async function handleSuccess(data: AuthTokenData) {\n await onSuccess?.(data)\n await runtime.reload()\n if (redirectOnSuccess && typeof window !== \"undefined\") {\n window.location.replace(\n redirectUrl || getCallbackUrl() || `/view/${auth.client.appType}`,\n )\n }\n }\n\n return (\n <div\n className={className}\n style={{\n minHeight: \"100vh\",\n display: \"grid\",\n placeItems: \"center\",\n padding: 24,\n background: \"#f6f8fb\",\n ...style,\n }}\n >\n <Card\n style={{\n width: \"min(100%, 420px)\",\n borderRadius: 8,\n boxShadow: \"0 16px 48px rgba(15, 23, 42, 0.10)\",\n }}\n styles={{ body: { padding: 28 } }}\n >\n <Space direction=\"vertical\" size={20} style={{ width: \"100%\" }}>\n <div>\n <Typography.Title level={3} style={{ margin: 0 }}>\n {title || \"应用登录\"}\n </Typography.Title>\n {subtitle ? (\n <Typography.Text type=\"secondary\">{subtitle}</Typography.Text>\n ) : null}\n </div>\n {methodsState.error ? (\n <Alert\n showIcon\n type=\"error\"\n message={methodsState.error.message}\n />\n ) : null}\n {error ? <Alert showIcon type=\"error\" message={error} /> : null}\n {methodsState.loading ? (\n <Button block loading>\n 加载中\n </Button>\n ) : tabItems.length > 0 ? (\n <Tabs\n activeKey={activeMethod}\n items={tabItems}\n onChange={setActiveMethod}\n />\n ) : (\n <Empty description=\"未启用登录方式\" />\n )}\n <Space direction=\"vertical\" size={10} style={{ width: \"100%\" }}>\n {dingtalkMethod ? (\n <Button\n block\n icon={<QrcodeOutlined />}\n loading={submitting}\n onClick={handleDingTalkLogin}\n >\n {dingtalkMethod.label || \"钉钉免登\"}\n </Button>\n ) : null}\n {ssoMethod ? (\n <Button\n block\n icon={<SafetyCertificateOutlined />}\n loading={submitting}\n onClick={handleSsoLogin}\n >\n {ssoMethod.label || \"SSO 登录\"}\n </Button>\n ) : null}\n {guestMethod ? (\n <Button\n block\n icon={<LoginOutlined />}\n loading={submitting}\n onClick={handleGuestLogin}\n >\n {guestMethod.label || \"访客访问\"}\n </Button>\n ) : null}\n </Space>\n </Space>\n </Card>\n </div>\n )\n}\n\nconst PasswordLoginForm: React.FC<{\n form: ReturnType<typeof Form.useForm<PasswordFormValues>>[0]\n loading: boolean\n onFinish: (values: PasswordFormValues) => void\n}> = ({ form, loading, onFinish }) => (\n <Form form={form} layout=\"vertical\" requiredMark={false} onFinish={onFinish}>\n <Form.Item\n label=\"账号\"\n name=\"username\"\n rules={[{ required: true, message: \"请输入账号\" }]}\n >\n <Input autoComplete=\"username\" />\n </Form.Item>\n <Form.Item\n label=\"密码\"\n name=\"password\"\n rules={[{ required: true, message: \"请输入密码\" }]}\n >\n <Input.Password autoComplete=\"current-password\" />\n </Form.Item>\n <Button block htmlType=\"submit\" icon={<LoginOutlined />} loading={loading} type=\"primary\">\n 登录\n </Button>\n </Form>\n)\n\nconst PhoneCodeLoginForm: React.FC<{\n allowRegister: boolean\n form: ReturnType<typeof Form.useForm<PhoneCodeFormValues>>[0]\n loading: boolean\n phonePurpose: \"login\" | \"register\"\n sendingCode: boolean\n onPurposeChange: (purpose: \"login\" | \"register\") => void\n onSendCode: () => Promise<void>\n onFinish: (values: PhoneCodeFormValues) => void\n}> = ({\n allowRegister,\n form,\n loading,\n phonePurpose,\n sendingCode,\n onPurposeChange,\n onSendCode,\n onFinish,\n}) => (\n <Form form={form} layout=\"vertical\" requiredMark={false} onFinish={onFinish}>\n {allowRegister ? (\n <Form.Item style={{ marginBottom: 12 }}>\n <Tabs\n activeKey={phonePurpose}\n items={[\n { key: \"login\", label: \"登录\" },\n { key: \"register\", label: \"注册\" },\n ]}\n onChange={key => onPurposeChange(key === \"register\" ? \"register\" : \"login\")}\n size=\"small\"\n />\n </Form.Item>\n ) : null}\n <Form.Item\n label=\"手机号\"\n name=\"phone\"\n rules={[{ required: true, message: \"请输入手机号\" }]}\n >\n <Input autoComplete=\"tel\" />\n </Form.Item>\n <Form.Item\n label=\"验证码\"\n name=\"code\"\n rules={[{ required: true, message: \"请输入验证码\" }]}\n >\n <Input\n addonAfter={\n <Button\n loading={sendingCode}\n onClick={onSendCode}\n size=\"small\"\n type=\"link\"\n >\n 发送\n </Button>\n }\n autoComplete=\"one-time-code\"\n />\n </Form.Item>\n <Button block htmlType=\"submit\" icon={<MobileOutlined />} loading={loading} type=\"primary\">\n {phonePurpose === \"register\" ? \"注册\" : \"登录\"}\n </Button>\n </Form>\n)\n\nconst findMethod = (methods: AuthMethod[], type: string) =>\n methods.find(method => method.type === type)\n\nconst normalizeError = (error: unknown): Error =>\n error instanceof Error ? error : new Error(String(error || \"请求失败\"))\n\nconst getString = (value: unknown, key: string) => {\n if (!value || typeof value !== \"object\") return undefined\n const result = (value as Record<string, unknown>)[key]\n return typeof result === \"string\" ? result : undefined\n}\n\nconst requestDingTalkCode = (method?: AuthMethod): Promise<string> => {\n const dd =\n typeof window === \"undefined\"\n ? undefined\n : (window as unknown as { dd?: any }).dd\n const corpId = getString(method, \"corpId\")\n return new Promise((resolve, reject) => {\n const requestAuthCode =\n dd?.runtime?.permission?.requestAuthCode || dd?.requestAuthCode\n if (!requestAuthCode) {\n reject(new Error(\"当前环境不支持钉钉免登\"))\n return\n }\n requestAuthCode({\n corpId,\n onSuccess: (result: { code?: string }) => {\n if (result?.code) resolve(result.code)\n else reject(new Error(\"钉钉未返回免登码\"))\n },\n onFail: (error: unknown) => reject(normalizeError(error)),\n })\n })\n}\n\nconst getOrCreateGuestIdentifier = (client: AppAuthClient) => {\n const key = `openxiangda:${client.appType}:guest_id`\n if (typeof window === \"undefined\") return createGuestIdentifier()\n const current = window.localStorage.getItem(key)\n if (current) return current\n const next = createGuestIdentifier()\n window.localStorage.setItem(key, next)\n return next\n}\n\nconst createGuestIdentifier = () =>\n `guest_${Date.now()}_${Math.random().toString(36).slice(2, 10)}`\n\nconst getCurrentHref = () =>\n typeof window === \"undefined\" ? \"\" : window.location.href\n\nconst getCurrentHostname = () =>\n typeof window === \"undefined\" ? \"\" : window.location.hostname\n\nconst getCallbackUrl = () => {\n if (typeof window === \"undefined\") return \"\"\n const query = new URLSearchParams(window.location.search)\n return query.get(\"callback\") || query.get(\"redirectUri\") || \"\"\n}\n","import { createBoundFetch } from \"./fetch\"\n\nexport type AuthMethodType =\n | \"password\"\n | \"dingtalk\"\n | \"sso\"\n | \"guest\"\n | \"phone_code\"\n | string\n\nexport interface AuthMethod {\n type: AuthMethodType\n enabled?: boolean\n label?: string\n protocol?: string\n [key: string]: unknown\n}\n\nexport interface LoginMethodsResult {\n appType: string\n configCode?: string\n methods: AuthMethod[]\n registration?: {\n mode?: string\n [key: string]: unknown\n }\n security?: {\n hideFailureReason?: boolean\n [key: string]: unknown\n }\n defaultRedirectUrl?: string\n}\n\nexport interface AuthUser {\n id: string\n username?: string\n name?: string\n phone?: string | null\n email?: string | null\n avatar?: string | null\n jobNumber?: string | null\n departments?: Array<Record<string, unknown>>\n affiliatedDepartmentId?: string | null\n affiliatedDepartment?: Record<string, unknown> | null\n [key: string]: unknown\n}\n\nexport interface AuthTokenData {\n accessToken: string\n refreshToken: string\n token?: string\n accessTokenExpiresAt?: number\n refreshTokenExpiresAt?: number\n user?: AuthUser\n guestUser?: AuthUser\n [key: string]: unknown\n}\n\nexport interface PhoneCodeSendResult {\n challengeId: string\n expiresAt?: string | Date\n ttlSeconds?: number\n message?: string\n}\n\nexport interface SsoLoginUrlResult {\n loginUrl: string\n protocol?: string\n}\n\nexport interface AuthClientOptions {\n appType: string\n servicePrefix?: string\n fetchImpl?: typeof fetch\n}\n\nexport interface PasswordLoginInput {\n username: string\n password: string\n clientFingerprint?: string\n challengeId?: string\n challengeAnswer?: string\n}\n\nexport interface DingTalkLoginInput {\n code: string\n corpId?: string\n}\n\nexport interface GuestLoginInput {\n guestIdentifier?: string\n domain?: string\n ipAddress?: string\n userAgent?: string\n formUuid?: string\n}\n\nexport interface PhoneCodeInput {\n phone: string\n purpose?: \"login\" | \"register\" | string\n}\n\nexport interface PhoneCodeLoginInput {\n phone: string\n code: string\n challengeId?: string\n}\n\nexport interface PhoneCodeRegisterInput extends PhoneCodeLoginInput {\n name?: string\n email?: string\n}\n\nexport interface SsoLoginUrlInput {\n protocol?: string\n redirectUri?: string\n}\n\nexport interface RefreshInput {\n refreshToken?: string\n}\n\nexport interface ResolveLoginUrlInput {\n callbackUrl?: string\n callbackParamName?: string\n loginUrl?: string\n}\n\nexport interface AppAuthClient {\n appType: string\n servicePrefix: string\n getMethods: () => Promise<LoginMethodsResult>\n passwordLogin: (input: PasswordLoginInput) => Promise<AuthTokenData>\n dingtalkLogin: (input: DingTalkLoginInput) => Promise<AuthTokenData>\n guestLogin: (input?: GuestLoginInput) => Promise<AuthTokenData>\n sendPhoneCode: (input: PhoneCodeInput) => Promise<PhoneCodeSendResult>\n phoneCodeLogin: (input: PhoneCodeLoginInput) => Promise<AuthTokenData>\n registerWithPhoneCode: (\n input: PhoneCodeRegisterInput,\n ) => Promise<AuthTokenData>\n getSsoLoginUrl: (input?: SsoLoginUrlInput) => Promise<SsoLoginUrlResult>\n refresh: (input?: RefreshInput) => Promise<AuthTokenData>\n logout: () => Promise<void>\n resolveLoginUrl: (input?: ResolveLoginUrlInput) => string\n}\n\nexport class AuthClientError extends Error {\n status?: number\n code?: number | string\n payload?: unknown\n\n constructor(message: string, options: { status?: number; code?: number | string; payload?: unknown } = {}) {\n super(message)\n this.name = \"AuthClientError\"\n this.status = options.status\n this.code = options.code\n this.payload = options.payload\n }\n}\n\nexport const createAuthClient = ({\n appType,\n servicePrefix = \"/service\",\n fetchImpl,\n}: AuthClientOptions): AppAuthClient => {\n const normalizedAppType = String(appType || \"\").trim()\n if (!normalizedAppType) {\n throw new Error(\"appType 不能为空\")\n }\n const boundFetch = createBoundFetch(fetchImpl)\n const request = async <T>(\n path: string,\n options: RequestInit = {},\n ): Promise<T> => {\n const response = await boundFetch(buildServiceUrl(servicePrefix, path), {\n credentials: \"include\",\n ...options,\n headers: {\n accept: \"application/json\",\n ...(options.body ? { \"content-type\": \"application/json\" } : {}),\n ...(options.headers || {}),\n },\n })\n const payload = await readPayload(response)\n const code = getRecordValue(payload, \"code\")\n const success = getRecordValue(payload, \"success\")\n if (!response.ok || success === false || !isSuccessCode(code)) {\n throw new AuthClientError(\n String(getRecordValue(payload, \"message\") || `Auth request failed: ${response.status}`),\n { status: response.status, code: code as number | string | undefined, payload },\n )\n }\n return unwrapPayload<T>(payload)\n }\n\n const appAuthPath = (suffix: string) =>\n `/openxiangda-api/v1/apps/${encodeURIComponent(normalizedAppType)}/auth${suffix}`\n\n return {\n appType: normalizedAppType,\n servicePrefix,\n getMethods: () => request<LoginMethodsResult>(appAuthPath(\"/methods\")),\n passwordLogin: input =>\n request<AuthTokenData>(appAuthPath(\"/password/login\"), postJson(input)),\n dingtalkLogin: input =>\n request<AuthTokenData>(appAuthPath(\"/dingtalk/login\"), postJson(input)),\n guestLogin: input =>\n request<AuthTokenData>(appAuthPath(\"/guest/login\"), postJson(input || {})),\n sendPhoneCode: input =>\n request<PhoneCodeSendResult>(appAuthPath(\"/phone-code/send\"), postJson(input)),\n phoneCodeLogin: input =>\n request<AuthTokenData>(appAuthPath(\"/phone-code/login\"), postJson(input)),\n registerWithPhoneCode: input =>\n request<AuthTokenData>(appAuthPath(\"/phone-code/register\"), postJson(input)),\n getSsoLoginUrl: input =>\n request<SsoLoginUrlResult>(appAuthPath(\"/sso/login-url\"), postJson(input || {})),\n refresh: input =>\n request<AuthTokenData>(appAuthPath(\"/refresh\"), postJson(input || {})),\n logout: async () => {\n await request<null>(appAuthPath(\"/logout\"), { method: \"POST\" })\n },\n resolveLoginUrl: input =>\n resolveLoginUrl(normalizedAppType, input || {}),\n }\n}\n\nconst postJson = (body: unknown): RequestInit => ({\n method: \"POST\",\n body: JSON.stringify(body || {}),\n})\n\nconst buildServiceUrl = (servicePrefix: string, path: string) => {\n const prefix = servicePrefix.endsWith(\"/\")\n ? servicePrefix.slice(0, -1)\n : servicePrefix\n const suffix = path.startsWith(\"/\") ? path : `/${path}`\n return `${prefix}${suffix}`\n}\n\nconst readPayload = async (response: Response) => {\n try {\n return await response.json()\n } catch {\n return null\n }\n}\n\nconst unwrapPayload = <T>(payload: unknown): T => {\n if (!payload || typeof payload !== \"object\") return payload as T\n const record = payload as Record<string, unknown>\n if (\"data\" in record) return record.data as T\n return payload as T\n}\n\nconst getRecordValue = (value: unknown, key: string) => {\n if (!value || typeof value !== \"object\") return undefined\n return (value as Record<string, unknown>)[key]\n}\n\nconst isSuccessCode = (code: unknown) => {\n if (code === undefined || code === null || code === \"\") return true\n const normalized = Number(code)\n return Number.isFinite(normalized)\n ? normalized === 0 || (normalized >= 200 && normalized < 300)\n : false\n}\n\nconst resolveLoginUrl = (\n appType: string,\n {\n callbackUrl = getCurrentHref(),\n callbackParamName = \"callback\",\n loginUrl,\n }: ResolveLoginUrlInput,\n) => {\n const target = loginUrl || `/view/${encodeURIComponent(appType)}/login`\n if (!callbackUrl) return target\n try {\n const base =\n typeof window !== \"undefined\" ? window.location.origin : \"http://localhost\"\n const url = new URL(target, base)\n if (!url.searchParams.has(callbackParamName)) {\n url.searchParams.set(callbackParamName, callbackUrl)\n }\n if (target.startsWith(\"http://\") || target.startsWith(\"https://\")) {\n return url.toString()\n }\n return `${url.pathname}${url.search}${url.hash}`\n } catch {\n const separator = target.includes(\"?\") ? \"&\" : \"?\"\n return `${target}${separator}${callbackParamName}=${encodeURIComponent(callbackUrl)}`\n }\n}\n\nconst getCurrentHref = () =>\n typeof window === \"undefined\" ? \"\" : window.location.href\n","import React, { useCallback, useEffect, useMemo, useState } from \"react\"\nimport {\n createPublicAccessClient,\n PublicAccessClientError,\n type PublicAccessClaim,\n type PublicAccessSessionData,\n type PublicAccessSessionInput,\n} from \"../core/publicAccess\"\nimport { useOpenXiangda } from \"./openxiangdaProvider\"\n\nexport interface UsePublicAccessOptions extends PublicAccessSessionInput {\n appType?: string\n servicePrefix?: string\n fetchImpl?: typeof fetch\n autoStart?: boolean\n}\n\nexport interface UsePublicAccessState {\n loading: boolean\n error: PublicAccessClientError | null\n session: PublicAccessSessionData | null\n publicAccess: PublicAccessClaim | null\n startSession: (\n input?: PublicAccessSessionInput,\n ) => Promise<PublicAccessSessionData>\n}\n\nexport const usePublicAccess = (\n options: UsePublicAccessOptions = {},\n): UsePublicAccessState => {\n const runtime = useOpenXiangda()\n const {\n appType: runtimeAppType,\n servicePrefix: runtimeServicePrefix,\n fetchImpl: runtimeFetchImpl,\n reload: reloadRuntime,\n setAccessToken,\n } = runtime\n const {\n appType = runtimeAppType,\n servicePrefix = runtimeServicePrefix,\n fetchImpl = runtimeFetchImpl,\n autoStart = true,\n ...sessionInput\n } = options\n const [session, setSession] = useState<PublicAccessSessionData | null>(null)\n const [error, setError] = useState<PublicAccessClientError | null>(null)\n const [loading, setLoading] = useState(Boolean(autoStart))\n const sessionInputKey = JSON.stringify(sessionInput)\n const stableSessionInput = useMemo(() => sessionInput, [sessionInputKey])\n\n const client = useMemo(\n () =>\n createPublicAccessClient({\n appType,\n servicePrefix,\n fetchImpl,\n }),\n [appType, fetchImpl, servicePrefix],\n )\n\n const startSession = useCallback(\n async (input: PublicAccessSessionInput = {}) => {\n setLoading(true)\n setError(null)\n try {\n const data = await client.startSession({\n ...stableSessionInput,\n ...input,\n ticket:\n input.ticket || stableSessionInput.ticket || readTicketFromLocation(),\n path: input.path || stableSessionInput.path || readPathFromLocation(),\n })\n setSession(data)\n setAccessToken(data.accessToken)\n await reloadRuntime({ accessToken: data.accessToken })\n setLoading(false)\n return data\n } catch (caught) {\n const nextError =\n caught instanceof PublicAccessClientError\n ? caught\n : new PublicAccessClientError(\n caught instanceof Error ? caught.message : \"公开访问会话创建失败\",\n { payload: caught },\n )\n setError(nextError)\n setLoading(false)\n throw nextError\n }\n },\n [client, reloadRuntime, setAccessToken, stableSessionInput],\n )\n\n useEffect(() => {\n if (!autoStart) return\n void startSession().catch(() => undefined)\n }, [autoStart, startSession])\n\n return {\n loading,\n error,\n session,\n publicAccess: session?.publicAccess || null,\n startSession,\n }\n}\n\nexport interface PublicAccessGateProps extends UsePublicAccessOptions {\n children: React.ReactNode\n fallback?: React.ReactNode\n errorFallback?: React.ReactNode | ((error: PublicAccessClientError) => React.ReactNode)\n}\n\nexport const PublicAccessGate: React.FC<PublicAccessGateProps> = ({\n children,\n fallback = null,\n errorFallback = null,\n ...options\n}) => {\n const state = usePublicAccess(options)\n if (state.loading) return <>{fallback}</>\n if (state.error) {\n return (\n <>\n {typeof errorFallback === \"function\"\n ? errorFallback(state.error)\n : errorFallback}\n </>\n )\n }\n return <>{children}</>\n}\n\nconst readTicketFromLocation = () => {\n if (typeof window === \"undefined\") return undefined\n return new URLSearchParams(window.location.search).get(\"ticket\") || undefined\n}\n\nconst readPathFromLocation = () =>\n typeof window === \"undefined\" ? undefined : window.location.pathname\n","import { createBoundFetch } from \"./fetch\"\nimport type { AuthTokenData } from \"./auth\"\n\nexport interface PublicAccessClaim {\n type: \"openxiangda_public\"\n appType: string\n policyCode: string\n routeCode?: string\n pathPattern?: string\n mode: \"guest\" | \"ticket\"\n externalRoleCodes: string[]\n grants: {\n forms?: string[]\n dataViews?: string[]\n functions?: string[]\n connectors?: string[]\n }\n issuedAt: string\n expiresAt?: string | null\n ticketId?: string | null\n}\n\nexport interface PublicAccessSessionInput {\n policyCode?: string\n routeCode?: string\n path?: string\n ticket?: string\n guestIdentifier?: string\n domain?: string\n ipAddress?: string\n userAgent?: string\n}\n\nexport interface PublicAccessSessionData extends AuthTokenData {\n publicAccess?: PublicAccessClaim | null\n raw?: unknown\n}\n\nexport interface PublicAccessClientOptions {\n appType: string\n servicePrefix?: string\n fetchImpl?: typeof fetch\n}\n\nexport interface PublicAccessClient {\n appType: string\n servicePrefix: string\n startSession: (\n input?: PublicAccessSessionInput,\n ) => Promise<PublicAccessSessionData>\n}\n\nexport class PublicAccessClientError extends Error {\n status?: number\n code?: number | string\n payload?: unknown\n\n constructor(\n message: string,\n options: { status?: number; code?: number | string; payload?: unknown } = {},\n ) {\n super(message)\n this.name = \"PublicAccessClientError\"\n this.status = options.status\n this.code = options.code\n this.payload = options.payload\n }\n}\n\nexport const createPublicAccessClient = ({\n appType,\n servicePrefix = \"/service\",\n fetchImpl,\n}: PublicAccessClientOptions): PublicAccessClient => {\n const normalizedAppType = String(appType || \"\").trim()\n if (!normalizedAppType) {\n throw new Error(\"appType 不能为空\")\n }\n const boundFetch = createBoundFetch(fetchImpl)\n const request = async (\n input: PublicAccessSessionInput = {},\n ): Promise<PublicAccessSessionData> => {\n const body: PublicAccessSessionInput = {\n ...input,\n path: input.path || getCurrentPathname(),\n domain: input.domain || getCurrentDomain(),\n userAgent: input.userAgent || getCurrentUserAgent(),\n guestIdentifier:\n input.guestIdentifier || getOrCreatePublicGuestIdentifier(normalizedAppType),\n }\n const response = await boundFetch(\n buildServiceUrl(\n servicePrefix,\n `/openxiangda-api/v1/apps/${encodeURIComponent(\n normalizedAppType,\n )}/public/session`,\n ),\n {\n method: \"POST\",\n credentials: \"include\",\n headers: {\n accept: \"application/json\",\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(body),\n },\n )\n const payload = await readPayload(response)\n const code = getRecordValue(payload, \"code\")\n const success = getRecordValue(payload, \"success\")\n if (!response.ok || success === false || !isSuccessCode(code)) {\n throw new PublicAccessClientError(\n String(\n getRecordValue(payload, \"message\") ||\n `Public access session failed: ${response.status}`,\n ),\n { status: response.status, code: code as number | string | undefined, payload },\n )\n }\n const data = getRecordValue(payload, \"data\") as AuthTokenData\n const extra = getRecordValue(payload, \"extra\") as\n | Record<string, unknown>\n | undefined\n return {\n ...data,\n publicAccess: (extra?.publicAccess as PublicAccessClaim | undefined) || null,\n raw: payload,\n }\n }\n\n return {\n appType: normalizedAppType,\n servicePrefix,\n startSession: request,\n }\n}\n\nconst buildServiceUrl = (servicePrefix: string, path: string) => {\n const prefix = servicePrefix.endsWith(\"/\")\n ? servicePrefix.slice(0, -1)\n : servicePrefix\n const suffix = path.startsWith(\"/\") ? path : `/${path}`\n return `${prefix}${suffix}`\n}\n\nconst readPayload = async (response: Response) => {\n try {\n return await response.json()\n } catch {\n return null\n }\n}\n\nconst getRecordValue = (value: unknown, key: string) => {\n if (!value || typeof value !== \"object\") return undefined\n return (value as Record<string, unknown>)[key]\n}\n\nconst isSuccessCode = (code: unknown) => {\n if (code === undefined || code === null || code === \"\") return true\n const normalized = Number(code)\n return Number.isFinite(normalized)\n ? normalized === 0 || (normalized >= 200 && normalized < 300)\n : false\n}\n\nconst getCurrentPathname = () =>\n typeof window === \"undefined\" ? undefined : window.location.pathname\n\nconst getCurrentDomain = () =>\n typeof window === \"undefined\" ? undefined : window.location.host\n\nconst getCurrentUserAgent = () =>\n typeof navigator === \"undefined\" ? undefined : navigator.userAgent\n\nconst getOrCreatePublicGuestIdentifier = (appType: string) => {\n const key = `openxiangda:public:guest:${appType}`\n try {\n if (typeof window !== \"undefined\" && window.localStorage) {\n const existing = window.localStorage.getItem(key)\n if (existing) return existing\n const next = createRandomIdentifier(appType)\n window.localStorage.setItem(key, next)\n return next\n }\n } catch {\n // ignore storage failures and fall back to an in-memory value.\n }\n return createRandomIdentifier(appType)\n}\n\nconst createRandomIdentifier = (appType: string) => {\n const random =\n typeof crypto !== \"undefined\" && \"randomUUID\" in crypto\n ? crypto.randomUUID()\n : Math.random().toString(36).slice(2)\n return `public:${appType}:${random}`\n}\n"],"mappings":"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","names":["padStart","padZoneStr","monthDiff","absFloor","prettyUnit","isUndefined","isDayjs","parseLocale","dayjs","wrapper","parseDate","Dayjs","instanceFactory","instanceFactorySet","locale","meridiem","getShort","get$H","matches","diff","getMonth","ordinal","import_react","import_client","import_react","process","import_jsx_runtime","dayjs","zhCN","AntdApp","React","import_react","import_react","response","import_react","import_react","import_react","import_antd","message","isSuccessCode","getCurrentHref","import_jsx_runtime","getCurrentHref","import_jsx_runtime","buildServiceUrl","resolveLoginUrl","getCurrentHref","getCurrentHostname","getRecordValue","isSuccessCode","import_react","message","buildServiceUrl","readPayload","getRecordValue","isSuccessCode","import_jsx_runtime"]}
|