@miaixz/sdk 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (244) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +7 -0
  3. package/README.md +412 -0
  4. package/dist/api/client.d.ts +223 -0
  5. package/dist/api/client.d.ts.map +1 -0
  6. package/dist/api/client.js +1069 -0
  7. package/dist/api/client.js.map +1 -0
  8. package/dist/api/endpoint.d.ts +10 -0
  9. package/dist/api/endpoint.d.ts.map +1 -0
  10. package/dist/api/endpoint.js +51 -0
  11. package/dist/api/endpoint.js.map +1 -0
  12. package/dist/api/errors.d.ts +180 -0
  13. package/dist/api/errors.d.ts.map +1 -0
  14. package/dist/api/errors.js +173 -0
  15. package/dist/api/errors.js.map +1 -0
  16. package/dist/api/index.d.ts +6 -0
  17. package/dist/api/index.d.ts.map +1 -0
  18. package/dist/api/index.js +5 -0
  19. package/dist/api/index.js.map +1 -0
  20. package/dist/api/request.d.ts +135 -0
  21. package/dist/api/request.d.ts.map +1 -0
  22. package/dist/api/request.js +2 -0
  23. package/dist/api/request.js.map +1 -0
  24. package/dist/api/response.d.ts +69 -0
  25. package/dist/api/response.d.ts.map +1 -0
  26. package/dist/api/response.js +43 -0
  27. package/dist/api/response.js.map +1 -0
  28. package/dist/api/telemetry.d.ts +139 -0
  29. package/dist/api/telemetry.d.ts.map +1 -0
  30. package/dist/api/telemetry.js +2 -0
  31. package/dist/api/telemetry.js.map +1 -0
  32. package/dist/appearance/appearance.d.ts +161 -0
  33. package/dist/appearance/appearance.d.ts.map +1 -0
  34. package/dist/appearance/appearance.js +614 -0
  35. package/dist/appearance/appearance.js.map +1 -0
  36. package/dist/appearance/index.d.ts +3 -0
  37. package/dist/appearance/index.d.ts.map +1 -0
  38. package/dist/appearance/index.js +3 -0
  39. package/dist/appearance/index.js.map +1 -0
  40. package/dist/auth/auth.d.ts +197 -0
  41. package/dist/auth/auth.d.ts.map +1 -0
  42. package/dist/auth/auth.js +314 -0
  43. package/dist/auth/auth.js.map +1 -0
  44. package/dist/auth/index.d.ts +2 -0
  45. package/dist/auth/index.d.ts.map +1 -0
  46. package/dist/auth/index.js +2 -0
  47. package/dist/auth/index.js.map +1 -0
  48. package/dist/config/config.d.ts +117 -0
  49. package/dist/config/config.d.ts.map +1 -0
  50. package/dist/config/config.js +241 -0
  51. package/dist/config/config.js.map +1 -0
  52. package/dist/config/index.d.ts +2 -0
  53. package/dist/config/index.d.ts.map +1 -0
  54. package/dist/config/index.js +2 -0
  55. package/dist/config/index.js.map +1 -0
  56. package/dist/consts/index.d.ts +35 -0
  57. package/dist/consts/index.d.ts.map +1 -0
  58. package/dist/consts/index.js +35 -0
  59. package/dist/consts/index.js.map +1 -0
  60. package/dist/context/context.d.ts +123 -0
  61. package/dist/context/context.d.ts.map +1 -0
  62. package/dist/context/context.js +252 -0
  63. package/dist/context/context.js.map +1 -0
  64. package/dist/context/index.d.ts +2 -0
  65. package/dist/context/index.d.ts.map +1 -0
  66. package/dist/context/index.js +2 -0
  67. package/dist/context/index.js.map +1 -0
  68. package/dist/contracts/host-context.d.ts +132 -0
  69. package/dist/contracts/host-context.d.ts.map +1 -0
  70. package/dist/contracts/host-context.js +2 -0
  71. package/dist/contracts/host-context.js.map +1 -0
  72. package/dist/contracts/index.d.ts +8 -0
  73. package/dist/contracts/index.d.ts.map +1 -0
  74. package/dist/contracts/index.js +2 -0
  75. package/dist/contracts/index.js.map +1 -0
  76. package/dist/contracts/lifecycle.d.ts +49 -0
  77. package/dist/contracts/lifecycle.d.ts.map +1 -0
  78. package/dist/contracts/lifecycle.js +2 -0
  79. package/dist/contracts/lifecycle.js.map +1 -0
  80. package/dist/contracts/module-manifest.d.ts +110 -0
  81. package/dist/contracts/module-manifest.d.ts.map +1 -0
  82. package/dist/contracts/module-manifest.js +317 -0
  83. package/dist/contracts/module-manifest.js.map +1 -0
  84. package/dist/contracts/navigation.d.ts +36 -0
  85. package/dist/contracts/navigation.d.ts.map +1 -0
  86. package/dist/contracts/navigation.js +11 -0
  87. package/dist/contracts/navigation.js.map +1 -0
  88. package/dist/contracts/permission.d.ts +8 -0
  89. package/dist/contracts/permission.d.ts.map +1 -0
  90. package/dist/contracts/permission.js +14 -0
  91. package/dist/contracts/permission.js.map +1 -0
  92. package/dist/contracts/post-message.d.ts +124 -0
  93. package/dist/contracts/post-message.d.ts.map +1 -0
  94. package/dist/contracts/post-message.js +2 -0
  95. package/dist/contracts/post-message.js.map +1 -0
  96. package/dist/contracts/route.d.ts +45 -0
  97. package/dist/contracts/route.d.ts.map +1 -0
  98. package/dist/contracts/route.js +35 -0
  99. package/dist/contracts/route.js.map +1 -0
  100. package/dist/events/events.d.ts +191 -0
  101. package/dist/events/events.d.ts.map +1 -0
  102. package/dist/events/events.js +486 -0
  103. package/dist/events/events.js.map +1 -0
  104. package/dist/events/index.d.ts +2 -0
  105. package/dist/events/index.d.ts.map +1 -0
  106. package/dist/events/index.js +2 -0
  107. package/dist/events/index.js.map +1 -0
  108. package/dist/files/files.d.ts +138 -0
  109. package/dist/files/files.d.ts.map +1 -0
  110. package/dist/files/files.js +144 -0
  111. package/dist/files/files.js.map +1 -0
  112. package/dist/files/index.d.ts +2 -0
  113. package/dist/files/index.d.ts.map +1 -0
  114. package/dist/files/index.js +2 -0
  115. package/dist/files/index.js.map +1 -0
  116. package/dist/formatters/index.d.ts +44 -0
  117. package/dist/formatters/index.d.ts.map +1 -0
  118. package/dist/formatters/index.js +50 -0
  119. package/dist/formatters/index.js.map +1 -0
  120. package/dist/i18n/default-translator.d.ts +17 -0
  121. package/dist/i18n/default-translator.d.ts.map +1 -0
  122. package/dist/i18n/default-translator.js +19 -0
  123. package/dist/i18n/default-translator.js.map +1 -0
  124. package/dist/i18n/i18n.d.ts +248 -0
  125. package/dist/i18n/i18n.d.ts.map +1 -0
  126. package/dist/i18n/i18n.js +617 -0
  127. package/dist/i18n/i18n.js.map +1 -0
  128. package/dist/i18n/index.d.ts +2 -0
  129. package/dist/i18n/index.d.ts.map +1 -0
  130. package/dist/i18n/index.js +2 -0
  131. package/dist/i18n/index.js.map +1 -0
  132. package/dist/index.d.ts +19 -0
  133. package/dist/index.d.ts.map +1 -0
  134. package/dist/index.js +19 -0
  135. package/dist/index.js.map +1 -0
  136. package/dist/models/index.d.ts +2 -0
  137. package/dist/models/index.d.ts.map +1 -0
  138. package/dist/models/index.js +2 -0
  139. package/dist/models/index.js.map +1 -0
  140. package/dist/permissions/index.d.ts +2 -0
  141. package/dist/permissions/index.d.ts.map +1 -0
  142. package/dist/permissions/index.js +2 -0
  143. package/dist/permissions/index.js.map +1 -0
  144. package/dist/permissions/permissions.d.ts +67 -0
  145. package/dist/permissions/permissions.d.ts.map +1 -0
  146. package/dist/permissions/permissions.js +123 -0
  147. package/dist/permissions/permissions.js.map +1 -0
  148. package/dist/runtime/direct-host-bridge.d.ts +11 -0
  149. package/dist/runtime/direct-host-bridge.d.ts.map +1 -0
  150. package/dist/runtime/direct-host-bridge.js +299 -0
  151. package/dist/runtime/direct-host-bridge.js.map +1 -0
  152. package/dist/runtime/index.d.ts +5 -0
  153. package/dist/runtime/index.d.ts.map +1 -0
  154. package/dist/runtime/index.js +3 -0
  155. package/dist/runtime/index.js.map +1 -0
  156. package/dist/runtime/post-message-bridge.d.ts +20 -0
  157. package/dist/runtime/post-message-bridge.d.ts.map +1 -0
  158. package/dist/runtime/post-message-bridge.js +1115 -0
  159. package/dist/runtime/post-message-bridge.js.map +1 -0
  160. package/dist/sdk.d.ts +177 -0
  161. package/dist/sdk.d.ts.map +1 -0
  162. package/dist/sdk.js +214 -0
  163. package/dist/sdk.js.map +1 -0
  164. package/dist/storage/index.d.ts +2 -0
  165. package/dist/storage/index.d.ts.map +1 -0
  166. package/dist/storage/index.js +2 -0
  167. package/dist/storage/index.js.map +1 -0
  168. package/dist/storage/storage.d.ts +246 -0
  169. package/dist/storage/storage.d.ts.map +1 -0
  170. package/dist/storage/storage.js +358 -0
  171. package/dist/storage/storage.js.map +1 -0
  172. package/dist/types/api.d.ts +82 -0
  173. package/dist/types/api.d.ts.map +1 -0
  174. package/dist/types/api.js +2 -0
  175. package/dist/types/api.js.map +1 -0
  176. package/dist/types/appearance.d.ts +85 -0
  177. package/dist/types/appearance.d.ts.map +1 -0
  178. package/dist/types/appearance.js +48 -0
  179. package/dist/types/appearance.js.map +1 -0
  180. package/dist/types/config.d.ts +49 -0
  181. package/dist/types/config.d.ts.map +1 -0
  182. package/dist/types/config.js +2 -0
  183. package/dist/types/config.js.map +1 -0
  184. package/dist/types/context.d.ts +41 -0
  185. package/dist/types/context.d.ts.map +1 -0
  186. package/dist/types/context.js +2 -0
  187. package/dist/types/context.js.map +1 -0
  188. package/dist/types/file.d.ts +48 -0
  189. package/dist/types/file.d.ts.map +1 -0
  190. package/dist/types/file.js +2 -0
  191. package/dist/types/file.js.map +1 -0
  192. package/dist/types/index.d.ts +12 -0
  193. package/dist/types/index.d.ts.map +1 -0
  194. package/dist/types/index.js +12 -0
  195. package/dist/types/index.js.map +1 -0
  196. package/dist/types/organization.d.ts +56 -0
  197. package/dist/types/organization.d.ts.map +1 -0
  198. package/dist/types/organization.js +2 -0
  199. package/dist/types/organization.js.map +1 -0
  200. package/dist/types/pagination.d.ts +55 -0
  201. package/dist/types/pagination.d.ts.map +1 -0
  202. package/dist/types/pagination.js +13 -0
  203. package/dist/types/pagination.js.map +1 -0
  204. package/dist/types/permissions.d.ts +26 -0
  205. package/dist/types/permissions.d.ts.map +1 -0
  206. package/dist/types/permissions.js +2 -0
  207. package/dist/types/permissions.js.map +1 -0
  208. package/dist/types/space.d.ts +43 -0
  209. package/dist/types/space.d.ts.map +1 -0
  210. package/dist/types/space.js +2 -0
  211. package/dist/types/space.js.map +1 -0
  212. package/dist/types/tenant.d.ts +31 -0
  213. package/dist/types/tenant.d.ts.map +1 -0
  214. package/dist/types/tenant.js +2 -0
  215. package/dist/types/tenant.js.map +1 -0
  216. package/dist/types/user.d.ts +48 -0
  217. package/dist/types/user.d.ts.map +1 -0
  218. package/dist/types/user.js +2 -0
  219. package/dist/types/user.js.map +1 -0
  220. package/dist/utils/date.d.ts +9 -0
  221. package/dist/utils/date.d.ts.map +1 -0
  222. package/dist/utils/date.js +11 -0
  223. package/dist/utils/date.js.map +1 -0
  224. package/dist/utils/index.d.ts +5 -0
  225. package/dist/utils/index.d.ts.map +1 -0
  226. package/dist/utils/index.js +5 -0
  227. package/dist/utils/index.js.map +1 -0
  228. package/dist/utils/number.d.ts +11 -0
  229. package/dist/utils/number.d.ts.map +1 -0
  230. package/dist/utils/number.js +13 -0
  231. package/dist/utils/number.js.map +1 -0
  232. package/dist/utils/object.d.ts +9 -0
  233. package/dist/utils/object.d.ts.map +1 -0
  234. package/dist/utils/object.js +11 -0
  235. package/dist/utils/object.js.map +1 -0
  236. package/dist/utils/string.d.ts +9 -0
  237. package/dist/utils/string.d.ts.map +1 -0
  238. package/dist/utils/string.js +11 -0
  239. package/dist/utils/string.js.map +1 -0
  240. package/dist/validators/index.d.ts +8 -0
  241. package/dist/validators/index.d.ts.map +1 -0
  242. package/dist/validators/index.js +8 -0
  243. package/dist/validators/index.js.map +1 -0
  244. package/package.json +156 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"post-message-bridge.js","sourceRoot":"","sources":["../../src/runtime/post-message-bridge.ts"],"names":[],"mappings":"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","sourcesContent":["import { MiaixzSdkError } from \"../api/errors.js\";\nimport {\n MIAIXZ_MODULE_PROTOCOL_VERSION,\n parseMiaixzModuleManifest,\n type MiaixzBridgeEnvelope,\n type MiaixzHostAdapter,\n type MiaixzHostBridge,\n type MiaixzModuleManifest,\n type MiaixzNavigationRequest,\n type MiaixzPostMessageChildOptions,\n type MiaixzPostMessageHost,\n type MiaixzPostMessageHostOptions,\n} from \"../contracts/index.js\";\nimport { isMiaixzModulePermission } from \"../contracts/permission.js\";\nimport { translateMiaixzDefaultMessage } from \"../i18n/default-translator.js\";\nimport type { MiaixzMessageCatalog } from \"../i18n/index.js\";\nimport type { MiaixzRuntimeContext } from \"../types/index.js\";\n\ntype BridgeKind = MiaixzBridgeEnvelope[\"kind\"];\ntype BridgeErrorCode =\n | \"BRIDGE_CAPABILITY_UNAVAILABLE\"\n | \"BRIDGE_CRYPTO_UNAVAILABLE\"\n | \"BRIDGE_DISPOSED\"\n | \"BRIDGE_MESSAGE_INVALID\"\n | \"BRIDGE_NAVIGATION_STATE_INVALID\"\n | \"BRIDGE_NOT_READY\"\n | \"BRIDGE_ORIGIN_INVALID\"\n | \"BRIDGE_TIMEOUT\"\n | \"MODULE_HOST_INCOMPATIBLE\"\n | \"MODULE_MANIFEST_INVALID\";\n\ninterface PendingRequest {\n /**\n * Method expected on the correlated response.\n */\n readonly method: string;\n\n /**\n * Resolves the request with a validated response payload.\n */\n readonly resolve: (payload: unknown) => void;\n\n /**\n * Rejects the request with a local SDK error.\n */\n readonly reject: (error: MiaixzSdkError) => void;\n\n /**\n * Cancels the request timeout.\n */\n readonly timer: ReturnType<typeof setTimeout>;\n\n /**\n * Tracks whether a cancel envelope was already sent.\n */\n cancelSent: boolean;\n}\n\ninterface HostRequestState {\n /**\n * Tracks whether the Child cancelled this request.\n */\n cancelled: boolean;\n\n /**\n * Requests one cached response replay after an in-flight duplicate.\n */\n replayRequested: boolean;\n}\n\ninterface CachedIncomingMessage {\n /**\n * Records when this incoming identifier was first accepted.\n */\n readonly timestamp: number;\n\n /**\n * Stores the completed response for duplicate Request replay.\n */\n response?: MiaixzBridgeEnvelope;\n\n /**\n * Tracks an in-flight Host request before its response exists.\n */\n request?: HostRequestState;\n}\n\ninterface SafeRemoteError {\n /**\n * Stable registered SDK error code.\n */\n readonly code: string;\n\n /**\n * Registered internationalization key for the error.\n */\n readonly messageKey: string;\n}\n\ninterface SubscriptionResponse {\n /**\n * Secure identifier assigned to one Host subscription.\n */\n readonly subscriptionId: string;\n}\n\ninterface ChildEventListener {\n /**\n * Module-owned event type expected by the listener.\n */\n readonly type: string;\n\n /**\n * Delivers a validated subscription payload.\n */\n readonly listener: (payload: unknown) => void;\n}\n\nconst moduleIdentifierPattern = /^[a-z][a-z0-9-]{1,63}$/;\nconst semanticVersionPattern =\n /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[A-Za-z-][0-9A-Za-z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[A-Za-z-][0-9A-Za-z-]*))*))?$/;\nconst uuidPattern = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\nconst envelopeKeys = new Set([\n \"channel\",\n \"protocolVersion\",\n \"messageId\",\n \"moduleId\",\n \"kind\",\n \"method\",\n \"payload\",\n \"error\",\n]);\nconst bridgeKinds = new Set<BridgeKind>([\"request\", \"response\", \"event\", \"cancel\"]);\nconst allowedMethods = new Set([\n \"bridge.handshake\",\n \"bridge.dispose\",\n \"context.get\",\n \"events.emit\",\n \"events.message\",\n \"events.subscribe\",\n \"events.unsubscribe\",\n \"i18n.register\",\n \"navigation.navigate\",\n \"permissions.has\",\n]);\nconst contextKeys = new Set([\n \"departmentId\",\n \"locale\",\n \"organizationId\",\n \"spaceId\",\n \"tenantId\",\n \"timezone\",\n \"traceId\",\n \"userId\",\n]);\nconst errorMessageKeys: Readonly<Record<string, string>> = Object.freeze({\n ABORTED: \"sdk.error.aborted\",\n API_BASE_URL_INVALID: \"sdk.error.api.baseUrlInvalid\",\n API_CRYPTO_UNAVAILABLE: \"sdk.error.api.cryptoUnavailable\",\n API_ENVELOPE_INVALID: \"sdk.error.api.envelopeInvalid\",\n API_ENVELOPE_MODE_INVALID: \"sdk.error.api.envelopeModeInvalid\",\n API_FETCH_UNAVAILABLE: \"sdk.error.api.fetchUnavailable\",\n API_REQUEST_ORIGIN_INVALID: \"sdk.error.api.requestOriginInvalid\",\n API_RESPONSE_INVALID: \"sdk.error.api.responseInvalid\",\n API_RETRY_INVALID: \"sdk.error.api.retryInvalid\",\n API_TIMEOUT_INVALID: \"sdk.error.api.timeoutInvalid\",\n APPEARANCE_COLOR_INVALID: \"sdk.error.appearance.colorInvalid\",\n APPEARANCE_CONTRAST_INVALID: \"sdk.error.appearance.contrastInvalid\",\n AUTH_MODE_MISMATCH: \"sdk.error.auth.modeMismatch\",\n AUTH_PERSISTENCE_ACKNOWLEDGEMENT_REQUIRED: \"sdk.error.auth.persistenceAcknowledgementRequired\",\n AUTH_REFRESH_FAILED: \"sdk.error.auth.refreshFailed\",\n AUTH_SESSION_INVALID: \"sdk.error.auth.sessionInvalid\",\n BRIDGE_CAPABILITY_UNAVAILABLE: \"sdk.error.bridge.capabilityUnavailable\",\n BRIDGE_CRYPTO_UNAVAILABLE: \"sdk.error.bridge.cryptoUnavailable\",\n BRIDGE_DISPOSED: \"sdk.error.bridge.disposed\",\n BRIDGE_MESSAGE_INVALID: \"sdk.error.bridge.messageInvalid\",\n BRIDGE_NAVIGATION_STATE_INVALID: \"sdk.error.bridge.navigationStateInvalid\",\n BRIDGE_NOT_READY: \"sdk.error.bridge.notReady\",\n BRIDGE_ORIGIN_INVALID: \"sdk.error.bridge.originInvalid\",\n BRIDGE_TIMEOUT: \"sdk.error.bridge.timeout\",\n MODULE_HOST_INCOMPATIBLE: \"sdk.error.module.hostIncompatible\",\n MODULE_MANIFEST_INVALID: \"sdk.error.module.manifestInvalid\",\n CONFIG_FETCH_FAILED: \"sdk.error.config.fetchFailed\",\n CONFIG_FETCH_UNAVAILABLE: \"sdk.error.config.fetchUnavailable\",\n CONFIG_INVALID: \"sdk.error.config.invalid\",\n CONTEXT_INVALID: \"sdk.error.context.invalid\",\n EVENT_CHANNEL_INVALID: \"sdk.error.event.channelInvalid\",\n EVENT_CRYPTO_UNAVAILABLE: \"sdk.error.event.cryptoUnavailable\",\n EVENT_PAYLOAD_NOT_CLONEABLE: \"sdk.error.event.payloadNotCloneable\",\n EVENT_VALIDATOR_MISSING: \"sdk.error.event.validatorMissing\",\n FILE_DOWNLOAD_FAILED: \"sdk.error.file.downloadFailed\",\n I18N_LOAD_FAILED: \"sdk.error.i18n.loadFailed\",\n I18N_LOCALE_INVALID: \"sdk.error.i18n.localeInvalid\",\n I18N_MESSAGES_INVALID: \"sdk.error.i18n.messagesInvalid\",\n I18N_NAMESPACE_INVALID: \"sdk.error.i18n.namespaceInvalid\",\n NETWORK_ERROR: \"sdk.error.network\",\n PERMISSIONS_INVALID: \"sdk.error.permissions.invalid\",\n SERVICE_ENDPOINT_MISSING: \"sdk.error.config.serviceMissing\",\n STORAGE_MIGRATION_CHAIN_INVALID: \"sdk.error.storage.migrationChainInvalid\",\n STORAGE_SCOPE_INVALID: \"sdk.error.storage.scopeInvalid\",\n TIMEOUT: \"sdk.error.timeout\",\n});\n\n/**\n * Creates a registered Bridge error without caller-owned diagnostic values.\n *\n * @param code - Stable registered Bridge error code.\n * @returns Localized SDK error.\n */\nfunction bridgeError(code: BridgeErrorCode): MiaixzSdkError {\n return new MiaixzSdkError(translateMiaixzDefaultMessage(errorMessageKeys[code] ?? code), {\n code,\n });\n}\n\n/**\n * Determines whether a value is a plain record.\n *\n * @param value - Runtime value to inspect.\n * @returns Whether the value is a record without a custom prototype.\n */\nfunction isPlainRecord(value: unknown): value is Readonly<Record<string, unknown>> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) return false;\n const prototype = Object.getPrototypeOf(value);\n return prototype === Object.prototype || prototype === null;\n}\n\n/**\n * Determines whether a record contains exactly allowed field names.\n *\n * @param value - Record whose enumerable keys should be checked.\n * @param allowed - Complete allowed key set.\n * @returns Whether every key is allowed.\n */\nfunction hasOnlyKeys(\n value: Readonly<Record<string, unknown>>,\n allowed: ReadonlySet<string>,\n): boolean {\n return Object.keys(value).every((key) => allowed.has(key));\n}\n\n/**\n * Resolves the current Realm Window required by postMessage Bridge factories.\n *\n * @returns Browser Window capable of registering message listeners.\n * @throws MiaixzSdkError When the current Realm lacks required Window capabilities.\n */\nfunction getRuntimeWindow(): Window {\n const candidate = globalThis.window;\n if (\n candidate === undefined ||\n typeof candidate.addEventListener !== \"function\" ||\n typeof candidate.removeEventListener !== \"function\"\n ) {\n throw bridgeError(\"BRIDGE_CAPABILITY_UNAVAILABLE\");\n }\n return candidate;\n}\n\n/**\n * Validates a Window used as the single postMessage target.\n *\n * @param targetWindow - Window candidate to validate.\n * @returns Valid target Window.\n * @throws MiaixzSdkError When postMessage is unavailable.\n */\nfunction parseTargetWindow(targetWindow: Window): Window {\n if (targetWindow === null || typeof targetWindow?.postMessage !== \"function\") {\n throw bridgeError(\"BRIDGE_CAPABILITY_UNAVAILABLE\");\n }\n return targetWindow;\n}\n\n/**\n * Validates one exact HTTP or HTTPS origin string.\n *\n * @param value - Origin candidate.\n * @returns Canonical origin identical to the supplied value.\n * @throws MiaixzSdkError When the value is not one exact origin.\n */\nfunction parseTargetOrigin(value: string): string {\n if (typeof value !== \"string\" || value === \"*\" || value === \"null\") {\n throw bridgeError(\"BRIDGE_ORIGIN_INVALID\");\n }\n try {\n const parsed = new URL(value);\n if (\n (parsed.protocol !== \"https:\" && parsed.protocol !== \"http:\") ||\n parsed.origin !== value ||\n parsed.username !== \"\" ||\n parsed.password !== \"\" ||\n parsed.pathname !== \"/\" ||\n parsed.search !== \"\" ||\n parsed.hash !== \"\"\n ) {\n throw bridgeError(\"BRIDGE_ORIGIN_INVALID\");\n }\n return parsed.origin;\n } catch (error) {\n if (error instanceof MiaixzSdkError) throw error;\n throw bridgeError(\"BRIDGE_ORIGIN_INVALID\");\n }\n}\n\n/**\n * Validates one Bridge request timeout.\n *\n * @param timeoutMs - Optional timeout override.\n * @returns Valid timeout, defaulting to ten seconds.\n * @throws MiaixzSdkError When the timeout is outside the frozen range.\n */\nfunction parseTimeout(timeoutMs: number | undefined): number {\n const value = timeoutMs ?? 10_000;\n if (!Number.isInteger(value) || value < 1_000 || value > 60_000) {\n throw bridgeError(\"BRIDGE_MESSAGE_INVALID\");\n }\n return value;\n}\n\n/**\n * Produces one secure Bridge message or subscription identifier.\n *\n * @returns Cryptographically secure UUID.\n * @throws MiaixzSdkError When secure UUID generation is unavailable.\n */\nfunction createMessageId(): string {\n if (typeof globalThis.crypto?.randomUUID !== \"function\") {\n throw bridgeError(\"BRIDGE_CRYPTO_UNAVAILABLE\");\n }\n return globalThis.crypto.randomUUID();\n}\n\n/**\n * Validates the fixed Bridge envelope without interpreting method payloads.\n *\n * @param value - Incoming message data.\n * @returns Frozen typed envelope, or undefined for invalid data.\n */\nfunction parseEnvelope(value: unknown): MiaixzBridgeEnvelope | undefined {\n if (\n !isPlainRecord(value) ||\n !hasOnlyKeys(value, envelopeKeys) ||\n value.channel !== \"miaixz.bridge\" ||\n value.protocolVersion !== MIAIXZ_MODULE_PROTOCOL_VERSION ||\n typeof value.messageId !== \"string\" ||\n !uuidPattern.test(value.messageId) ||\n typeof value.moduleId !== \"string\" ||\n !moduleIdentifierPattern.test(value.moduleId) ||\n typeof value.kind !== \"string\" ||\n !bridgeKinds.has(value.kind as BridgeKind) ||\n typeof value.method !== \"string\" ||\n !allowedMethods.has(value.method)\n ) {\n return undefined;\n }\n if (value.error !== undefined) {\n if (\n value.kind !== \"response\" ||\n !isPlainRecord(value.error) ||\n !hasOnlyKeys(value.error, new Set([\"code\", \"messageKey\", \"details\"])) ||\n typeof value.error.code !== \"string\" ||\n typeof value.error.messageKey !== \"string\"\n ) {\n return undefined;\n }\n if (value.payload !== undefined || value.error.details !== undefined) return undefined;\n }\n return Object.freeze({ ...value }) as unknown as MiaixzBridgeEnvelope;\n}\n\n/**\n * Creates one immutable outgoing Bridge envelope.\n *\n * @param moduleId - Module owning the connection.\n * @param kind - Message state-machine branch.\n * @param method - Allow-listed Bridge method.\n * @param messageId - Existing request identifier or a new event identifier.\n * @param payload - Optional method payload.\n * @param error - Optional safe remote error.\n * @returns Frozen Bridge envelope.\n */\nfunction createEnvelope(\n moduleId: string,\n kind: BridgeKind,\n method: string,\n messageId: string,\n payload?: unknown,\n error?: MiaixzBridgeEnvelope[\"error\"],\n): MiaixzBridgeEnvelope {\n return Object.freeze({\n channel: \"miaixz.bridge\",\n protocolVersion: MIAIXZ_MODULE_PROTOCOL_VERSION,\n messageId,\n moduleId,\n kind,\n method,\n ...(payload === undefined ? {} : { payload }),\n ...(error === undefined ? {} : { error }),\n });\n}\n\n/**\n * Maps an Adapter failure to the only safe cross-origin error fields.\n *\n * @param error - Local Adapter failure.\n * @returns Frozen registered error code and message key.\n */\nfunction serializeError(error: unknown): Readonly<SafeRemoteError> {\n const candidate = error instanceof MiaixzSdkError ? error.code : undefined;\n const code =\n candidate !== undefined && candidate in errorMessageKeys ? candidate : \"BRIDGE_MESSAGE_INVALID\";\n return Object.freeze({\n code,\n messageKey: errorMessageKeys[code] ?? \"sdk.error.bridge.messageInvalid\",\n });\n}\n\n/**\n * Reconstructs a safe local SDK error from one remote response.\n *\n * @param error - Remote error fields.\n * @returns Localized SDK error without remote cause or stack.\n */\nfunction deserializeError(error: NonNullable<MiaixzBridgeEnvelope[\"error\"]>): MiaixzSdkError {\n const code = error.code;\n const messageKey = errorMessageKeys[code];\n if (messageKey === undefined || error.messageKey !== messageKey) {\n return bridgeError(\"BRIDGE_MESSAGE_INVALID\");\n }\n return new MiaixzSdkError(translateMiaixzDefaultMessage(messageKey), { code });\n}\n\n/**\n * Removes expired identifiers and enforces the frozen cache capacity.\n *\n * @param cache - Incoming message cache to compact.\n * @param now - Current epoch time.\n */\nfunction compactCache(cache: Map<string, CachedIncomingMessage>, now = Date.now()): void {\n for (const [messageId, entry] of cache) {\n if (now - entry.timestamp > 300_000) cache.delete(messageId);\n }\n while (cache.size > 1_000) {\n const oldest = cache.keys().next().value as string | undefined;\n if (oldest === undefined) break;\n cache.delete(oldest);\n }\n}\n\n/**\n * Validates and clones a same-site navigation request.\n *\n * @param value - Request payload to validate.\n * @returns Frozen navigation request.\n * @throws MiaixzSdkError When the request or state is invalid.\n */\nfunction parseNavigation(value: unknown): MiaixzNavigationRequest {\n if (\n !isPlainRecord(value) ||\n !hasOnlyKeys(value, new Set([\"path\", \"replace\", \"state\"])) ||\n typeof value.path !== \"string\" ||\n !value.path.startsWith(\"/\") ||\n value.path.startsWith(\"//\") ||\n value.path.includes(\"\\\\\") ||\n (value.replace !== undefined && typeof value.replace !== \"boolean\")\n ) {\n throw bridgeError(\"BRIDGE_MESSAGE_INVALID\");\n }\n let state: unknown;\n if (value.state !== undefined) {\n try {\n state = structuredClone(value.state);\n } catch {\n throw bridgeError(\"BRIDGE_NAVIGATION_STATE_INVALID\");\n }\n }\n return Object.freeze({\n path: value.path,\n ...(value.replace === undefined ? {} : { replace: value.replace }),\n ...(value.state === undefined ? {} : { state }),\n });\n}\n\n/**\n * Validates one permission list sent through the Bridge.\n *\n * @param value - Permission payload field.\n * @returns Frozen permission copy.\n * @throws MiaixzSdkError When a permission is malformed.\n */\nfunction parsePermissions(value: unknown): readonly string[] {\n if (!Array.isArray(value) || !value.every(isMiaixzModulePermission)) {\n throw bridgeError(\"BRIDGE_MESSAGE_INVALID\");\n }\n return Object.freeze([...value]);\n}\n\n/**\n * Validates and freezes a non-sensitive runtime Context payload.\n *\n * @param value - Context payload to validate.\n * @returns Frozen Context containing only registered string fields.\n * @throws MiaixzSdkError When the Context contains unknown or non-string fields.\n */\nfunction parseRuntimeContext(value: unknown): Readonly<MiaixzRuntimeContext> {\n if (\n !isPlainRecord(value) ||\n !hasOnlyKeys(value, contextKeys) ||\n Object.values(value).some((entry) => entry !== undefined && typeof entry !== \"string\")\n ) {\n throw bridgeError(\"BRIDGE_MESSAGE_INVALID\");\n }\n return Object.freeze(\n Object.fromEntries(Object.entries(value).filter((entry) => entry[1] !== undefined)),\n ) as Readonly<MiaixzRuntimeContext>;\n}\n\n/**\n * Validates and defensively freezes a project message catalog.\n *\n * @param namespace - Module namespace that must own every message key.\n * @param value - Catalog payload to validate.\n * @returns Frozen locale and message map.\n * @throws MiaixzSdkError When a locale or message collection is invalid.\n */\nfunction parseMessageCatalog(namespace: string, value: unknown): MiaixzMessageCatalog {\n if (!isPlainRecord(value)) throw bridgeError(\"BRIDGE_MESSAGE_INVALID\");\n const catalog: Record<string, Readonly<Record<string, string>>> = {};\n for (const [locale, messages] of Object.entries(value)) {\n try {\n if (Intl.getCanonicalLocales(locale)[0] !== locale) throw new Error(\"non-canonical locale\");\n } catch {\n throw bridgeError(\"BRIDGE_MESSAGE_INVALID\");\n }\n if (\n !isPlainRecord(messages) ||\n Object.entries(messages).some(\n ([key, message]) => !key.startsWith(`${namespace}.`) || typeof message !== \"string\",\n )\n ) {\n throw bridgeError(\"BRIDGE_MESSAGE_INVALID\");\n }\n catalog[locale] = Object.freeze({ ...messages }) as Readonly<Record<string, string>>;\n }\n return Object.freeze(catalog);\n}\n\n/**\n * Validates one module-owned Bridge event name.\n *\n * @param moduleId - Module owning the connection.\n * @param value - Event type candidate.\n * @returns Valid module event type.\n * @throws MiaixzSdkError When the event is malformed or belongs to another module.\n */\nfunction parseEventType(moduleId: string, value: unknown): string {\n if (typeof value !== \"string\") throw bridgeError(\"BRIDGE_MESSAGE_INVALID\");\n const separator = value.indexOf(\":\");\n if (\n separator < 0 ||\n value.indexOf(\":\", separator + 1) >= 0 ||\n value.slice(0, separator) !== moduleId ||\n !moduleIdentifierPattern.test(value.slice(separator + 1))\n ) {\n throw bridgeError(\"BRIDGE_MESSAGE_INVALID\");\n }\n return value;\n}\n\n/**\n * Determines the sorted capabilities actually present on one Host Adapter.\n *\n * @param adapter - Host Adapter to inspect.\n * @returns Sorted capability names.\n */\nfunction getCapabilities(adapter: MiaixzHostAdapter): readonly string[] {\n const capabilities = [\n [\"context\", adapter.getContext],\n [\"events\", adapter.emit && adapter.subscribe],\n [\"i18n\", adapter.registerMessages],\n [\"navigation\", adapter.navigate],\n [\"permissions\", adapter.hasPermissions],\n ] as const;\n return Object.freeze(\n capabilities\n .filter((entry) => typeof entry[1] === \"function\")\n .map((entry) => entry[0])\n .sort(),\n );\n}\n\n/**\n * Implements the Host half of a postMessage Bridge.\n */\nclass PostMessageHost implements MiaixzPostMessageHost {\n readonly ready: Promise<void>;\n readonly #runtimeWindow: Window;\n readonly #targetWindow: Window;\n readonly #targetOrigin: string;\n readonly #manifest: Readonly<MiaixzModuleManifest>;\n readonly #adapter: MiaixzHostAdapter;\n readonly #capabilities: readonly string[];\n readonly #incoming = new Map<string, CachedIncomingMessage>();\n readonly #subscriptions = new Map<string, () => Promise<void>>();\n readonly #requests = new Map<string, HostRequestState>();\n readonly #resolveReady: () => void;\n readonly #rejectReady: (error: MiaixzSdkError) => void;\n readonly #readyTimer: ReturnType<typeof setTimeout> | undefined;\n #readyState: \"pending\" | \"resolved\" | \"rejected\" = \"pending\";\n #disposed = false;\n\n /**\n * Creates and starts one Host-side handshake listener.\n *\n * @param options - Validated Host construction options.\n */\n constructor(options: MiaixzPostMessageHostOptions) {\n this.#runtimeWindow = getRuntimeWindow();\n this.#targetWindow = parseTargetWindow(options.targetWindow);\n this.#targetOrigin = parseTargetOrigin(options.targetOrigin);\n this.#manifest = parseMiaixzModuleManifest(options.manifest);\n if (this.#manifest.kind !== \"iframe\") throw bridgeError(\"BRIDGE_ORIGIN_INVALID\");\n let entryOrigin: string;\n try {\n entryOrigin = new URL(this.#manifest.entry).origin;\n } catch {\n throw bridgeError(\"BRIDGE_ORIGIN_INVALID\");\n }\n if (entryOrigin !== this.#targetOrigin) throw bridgeError(\"BRIDGE_ORIGIN_INVALID\");\n if (!isPlainRecord(options.adapter)) throw bridgeError(\"BRIDGE_MESSAGE_INVALID\");\n this.#adapter = options.adapter;\n this.#capabilities = getCapabilities(this.#adapter);\n const timeoutMs = parseTimeout(options.timeoutMs);\n let resolveReady!: () => void;\n let rejectReady!: (error: MiaixzSdkError) => void;\n this.ready = new Promise<void>((resolve, reject) => {\n resolveReady = resolve;\n rejectReady = reject;\n });\n this.#resolveReady = resolveReady;\n this.#rejectReady = rejectReady;\n if (\n this.#manifest.requiredCapabilities.some(\n (capability) => !this.#capabilities.includes(capability),\n )\n ) {\n this.#readyTimer = undefined;\n this.#rejectStartup(bridgeError(\"BRIDGE_CAPABILITY_UNAVAILABLE\"));\n return;\n }\n this.#runtimeWindow.addEventListener(\"message\", this.#onMessage);\n this.#readyTimer = setTimeout(() => {\n this.#rejectStartup(bridgeError(\"BRIDGE_TIMEOUT\"));\n this.dispose();\n }, timeoutMs);\n }\n\n /**\n * Releases the Host connection and all tracked subscriptions.\n */\n dispose(): void {\n if (this.#disposed) return;\n this.#disposed = true;\n if (this.#readyTimer !== undefined) clearTimeout(this.#readyTimer);\n this.#runtimeWindow.removeEventListener(\"message\", this.#onMessage);\n if (this.#readyState === \"pending\") this.#rejectStartup(bridgeError(\"BRIDGE_DISPOSED\"));\n for (const unsubscribe of this.#subscriptions.values()) {\n void unsubscribe().catch(() => undefined);\n }\n this.#subscriptions.clear();\n this.#requests.clear();\n this.#incoming.clear();\n }\n\n /**\n * Handles one Window message after exact source and origin filtering.\n *\n * @param event - Browser message event.\n */\n readonly #onMessage = (event: MessageEvent): void => {\n if (\n this.#disposed ||\n event.source !== this.#targetWindow ||\n event.origin !== this.#targetOrigin\n )\n return;\n const envelope = parseEnvelope(event.data);\n if (envelope === undefined || envelope.moduleId !== this.#manifest.id) return;\n compactCache(this.#incoming);\n if (envelope.kind === \"cancel\") {\n const request = this.#requests.get(envelope.messageId);\n if (request !== undefined) request.cancelled = true;\n return;\n }\n const duplicate = this.#incoming.get(envelope.messageId);\n if (duplicate !== undefined) {\n if (envelope.kind === \"request\") {\n if (duplicate.response !== undefined) this.#post(duplicate.response);\n else if (duplicate.request !== undefined) duplicate.request.replayRequested = true;\n }\n return;\n }\n this.#incoming.set(envelope.messageId, { timestamp: Date.now() });\n if (envelope.kind !== \"request\") return;\n if (!this.#isReady() && envelope.method !== \"bridge.handshake\") {\n this.#respondWithError(envelope, bridgeError(\"BRIDGE_NOT_READY\"));\n return;\n }\n const requestState: HostRequestState = { cancelled: false, replayRequested: false };\n this.#requests.set(envelope.messageId, requestState);\n const cached = this.#incoming.get(envelope.messageId);\n if (cached !== undefined) cached.request = requestState;\n void this.#handleRequest(envelope).then(\n (payload) => this.#completeRequest(envelope, payload),\n (error: unknown) => this.#completeRequest(envelope, undefined, error),\n );\n };\n\n /**\n * Reports whether the handshake has completed successfully.\n *\n * @returns Whether the Host accepts non-handshake requests.\n */\n #isReady(): boolean {\n return this.#readyState === \"resolved\";\n }\n\n /**\n * Handles one validated request method.\n *\n * @param envelope - Valid request envelope.\n * @returns Method response payload.\n */\n async #handleRequest(envelope: MiaixzBridgeEnvelope): Promise<unknown> {\n switch (envelope.method) {\n case \"bridge.handshake\":\n return this.#handleHandshake(envelope.payload);\n case \"context.get\":\n if (envelope.payload !== undefined) throw bridgeError(\"BRIDGE_MESSAGE_INVALID\");\n return parseRuntimeContext(await this.#requireCapability(\"getContext\")());\n case \"navigation.navigate\":\n await this.#requireCapability(\"navigate\")(parseNavigation(envelope.payload));\n return undefined;\n case \"permissions.has\": {\n if (\n !isPlainRecord(envelope.payload) ||\n !hasOnlyKeys(envelope.payload, new Set([\"permissions\"]))\n )\n throw bridgeError(\"BRIDGE_MESSAGE_INVALID\");\n const allowed = await this.#requireCapability(\"hasPermissions\")(\n parsePermissions(envelope.payload.permissions),\n );\n return Object.freeze({ allowed });\n }\n case \"i18n.register\": {\n if (\n !isPlainRecord(envelope.payload) ||\n !hasOnlyKeys(envelope.payload, new Set([\"namespace\", \"catalog\"])) ||\n envelope.payload.namespace !== this.#manifest.id\n )\n throw bridgeError(\"BRIDGE_MESSAGE_INVALID\");\n await this.#requireCapability(\"registerMessages\")(\n envelope.payload.namespace,\n parseMessageCatalog(envelope.payload.namespace, envelope.payload.catalog),\n );\n return undefined;\n }\n case \"events.emit\": {\n if (\n !isPlainRecord(envelope.payload) ||\n !hasOnlyKeys(envelope.payload, new Set([\"type\", \"payload\"]))\n )\n throw bridgeError(\"BRIDGE_MESSAGE_INVALID\");\n await this.#requireCapability(\"emit\")(\n parseEventType(this.#manifest.id, envelope.payload.type),\n envelope.payload.payload,\n );\n return undefined;\n }\n case \"events.subscribe\":\n return this.#subscribe(envelope.payload);\n case \"events.unsubscribe\":\n await this.#unsubscribe(envelope.payload);\n return undefined;\n case \"bridge.dispose\":\n if (envelope.payload !== undefined) throw bridgeError(\"BRIDGE_MESSAGE_INVALID\");\n return undefined;\n default:\n throw bridgeError(\"BRIDGE_MESSAGE_INVALID\");\n }\n }\n\n /**\n * Validates and accepts the only allowed handshake payload.\n *\n * @param payload - Handshake request payload.\n * @returns Accepted handshake response payload.\n */\n #handleHandshake(payload: unknown): Readonly<Record<string, unknown>> {\n if (\n this.#readyState !== \"pending\" ||\n !isPlainRecord(payload) ||\n !hasOnlyKeys(payload, new Set([\"moduleId\", \"moduleVersion\", \"protocolVersion\"])) ||\n payload.moduleId !== this.#manifest.id ||\n payload.moduleVersion !== this.#manifest.version ||\n payload.protocolVersion !== MIAIXZ_MODULE_PROTOCOL_VERSION\n ) {\n throw bridgeError(\"BRIDGE_MESSAGE_INVALID\");\n }\n return Object.freeze({\n accepted: true,\n protocolVersion: MIAIXZ_MODULE_PROTOCOL_VERSION,\n capabilities: this.#capabilities,\n });\n }\n\n /**\n * Registers one Host event subscription and returns its secure identifier.\n *\n * @param payload - Subscribe request payload.\n * @returns Subscription response payload.\n */\n async #subscribe(payload: unknown): Promise<Readonly<SubscriptionResponse>> {\n if (!isPlainRecord(payload) || !hasOnlyKeys(payload, new Set([\"type\"])))\n throw bridgeError(\"BRIDGE_MESSAGE_INVALID\");\n const type = parseEventType(this.#manifest.id, payload.type);\n const subscriptionId = createMessageId();\n let cancelled = false;\n const rawUnsubscribe = await this.#requireCapability(\"subscribe\")(type, (eventPayload) => {\n if (cancelled || this.#disposed) return;\n this.#post(\n createEnvelope(this.#manifest.id, \"event\", \"events.message\", createMessageId(), {\n subscriptionId,\n type,\n payload: eventPayload,\n }),\n );\n });\n if (typeof rawUnsubscribe !== \"function\") throw bridgeError(\"BRIDGE_MESSAGE_INVALID\");\n const unsubscribe = async (): Promise<void> => {\n if (cancelled) return;\n cancelled = true;\n this.#subscriptions.delete(subscriptionId);\n await Promise.resolve().then(rawUnsubscribe);\n };\n this.#subscriptions.set(subscriptionId, unsubscribe);\n return Object.freeze({ subscriptionId });\n }\n\n /**\n * Removes one previously registered Host event subscription.\n *\n * @param payload - Unsubscribe request payload.\n */\n async #unsubscribe(payload: unknown): Promise<void> {\n if (\n !isPlainRecord(payload) ||\n !hasOnlyKeys(payload, new Set([\"subscriptionId\"])) ||\n typeof payload.subscriptionId !== \"string\" ||\n !uuidPattern.test(payload.subscriptionId)\n )\n throw bridgeError(\"BRIDGE_MESSAGE_INVALID\");\n await this.#subscriptions.get(payload.subscriptionId)?.();\n }\n\n /**\n * Completes one Host request, caches its response, and performs final disposal when requested.\n *\n * @param request - Completed request envelope.\n * @param payload - Successful response payload.\n * @param error - Optional request failure.\n */\n #completeRequest(request: MiaixzBridgeEnvelope, payload?: unknown, error?: unknown): void {\n const state = this.#requests.get(request.messageId);\n this.#requests.delete(request.messageId);\n if (state?.cancelled === true || this.#disposed) return;\n const response = createEnvelope(\n this.#manifest.id,\n \"response\",\n request.method,\n request.messageId,\n payload,\n error === undefined ? undefined : serializeError(error),\n );\n const cached = this.#incoming.get(request.messageId);\n if (cached !== undefined) cached.response = response;\n this.#post(response);\n if (state?.replayRequested === true) this.#post(response);\n if (request.method === \"bridge.handshake\") {\n if (error === undefined) this.#resolveStartup();\n else {\n this.#rejectStartup(\n error instanceof MiaixzSdkError ? error : bridgeError(\"BRIDGE_MESSAGE_INVALID\"),\n );\n this.dispose();\n }\n }\n if (request.method === \"bridge.dispose\" && error === undefined) this.dispose();\n }\n\n /**\n * Sends one immediate error response for a valid request.\n *\n * @param request - Request being rejected.\n * @param error - Registered SDK error.\n */\n #respondWithError(request: MiaixzBridgeEnvelope, error: MiaixzSdkError): void {\n this.#post(\n createEnvelope(\n this.#manifest.id,\n \"response\",\n request.method,\n request.messageId,\n undefined,\n serializeError(error),\n ),\n );\n }\n\n /**\n * Posts one envelope to the single validated target.\n *\n * @param envelope - Envelope to send.\n */\n #post(envelope: MiaixzBridgeEnvelope): void {\n this.#targetWindow.postMessage(envelope, this.#targetOrigin);\n }\n\n /**\n * Resolves the Host startup Promise exactly once.\n */\n #resolveStartup(): void {\n if (this.#readyState !== \"pending\") return;\n this.#readyState = \"resolved\";\n if (this.#readyTimer !== undefined) clearTimeout(this.#readyTimer);\n this.#resolveReady();\n }\n\n /**\n * Rejects the Host startup Promise exactly once.\n *\n * @param error - Deterministic startup failure.\n */\n #rejectStartup(error: MiaixzSdkError): void {\n if (this.#readyState !== \"pending\") return;\n this.#readyState = \"rejected\";\n if (this.#readyTimer !== undefined) clearTimeout(this.#readyTimer);\n this.#rejectReady(error);\n }\n\n /**\n * Returns one injected Adapter capability or throws the frozen missing-capability error.\n *\n * @typeParam Name - Adapter capability name.\n * @param name - Capability to resolve.\n * @returns Injected Adapter function.\n */\n #requireCapability<Name extends keyof MiaixzHostAdapter>(\n name: Name,\n ): NonNullable<MiaixzHostAdapter[Name]> {\n const capability = this.#adapter[name];\n if (capability === undefined) throw bridgeError(\"BRIDGE_CAPABILITY_UNAVAILABLE\");\n return capability as NonNullable<MiaixzHostAdapter[Name]>;\n }\n}\n\n/**\n * Implements the Child half of a postMessage Host Bridge.\n */\nclass PostMessageChildBridge implements MiaixzHostBridge {\n /**\n * Micro-frontend protocol version implemented by the bridge.\n */\n readonly protocolVersion = MIAIXZ_MODULE_PROTOCOL_VERSION;\n\n readonly #runtimeWindow: Window;\n readonly #targetWindow: Window;\n readonly #targetOrigin: string;\n readonly #moduleId: string;\n readonly #moduleVersion: string;\n readonly #timeoutMs: number;\n readonly #pending = new Map<string, PendingRequest>();\n readonly #incoming = new Map<string, CachedIncomingMessage>();\n readonly #listeners = new Map<string, ChildEventListener>();\n #disposed = false;\n\n /**\n * Creates one Child Bridge before its handshake starts.\n *\n * @param options - Validated Child connection options.\n */\n constructor(options: MiaixzPostMessageChildOptions) {\n this.#runtimeWindow = getRuntimeWindow();\n this.#targetWindow = parseTargetWindow(options.targetWindow);\n this.#targetOrigin = parseTargetOrigin(options.targetOrigin);\n if (!moduleIdentifierPattern.test(options.moduleId))\n throw bridgeError(\"BRIDGE_MESSAGE_INVALID\");\n if (!semanticVersionPattern.test(options.moduleVersion))\n throw bridgeError(\"BRIDGE_MESSAGE_INVALID\");\n this.#moduleId = options.moduleId;\n this.#moduleVersion = options.moduleVersion;\n this.#timeoutMs = parseTimeout(options.timeoutMs);\n this.#runtimeWindow.addEventListener(\"message\", this.#onMessage);\n }\n\n /**\n * Performs the fixed Child-initiated handshake.\n *\n * @returns Connected Child Bridge.\n */\n async connect(): Promise<MiaixzHostBridge> {\n const payload = await this.#request(\"bridge.handshake\", {\n moduleId: this.#moduleId,\n moduleVersion: this.#moduleVersion,\n protocolVersion: MIAIXZ_MODULE_PROTOCOL_VERSION,\n });\n if (\n !isPlainRecord(payload) ||\n !hasOnlyKeys(payload, new Set([\"accepted\", \"protocolVersion\", \"capabilities\"])) ||\n payload.accepted !== true ||\n payload.protocolVersion !== MIAIXZ_MODULE_PROTOCOL_VERSION ||\n !Array.isArray(payload.capabilities) ||\n !payload.capabilities.every((value) => typeof value === \"string\")\n ) {\n this.dispose();\n throw bridgeError(\"BRIDGE_MESSAGE_INVALID\");\n }\n return this;\n }\n\n /**\n * Reads the current non-sensitive Host context.\n *\n * @returns Runtime context returned by the Host.\n */\n async getContext(): Promise<Readonly<MiaixzRuntimeContext>> {\n const payload = await this.#request(\"context.get\");\n return parseRuntimeContext(payload);\n }\n\n /**\n * Requests validated same-site Host navigation.\n *\n * @param request - Navigation request to validate and send.\n */\n async navigate(request: Readonly<MiaixzNavigationRequest>): Promise<void> {\n const payload = await this.#request(\"navigation.navigate\", parseNavigation(request));\n if (payload !== undefined) throw bridgeError(\"BRIDGE_MESSAGE_INVALID\");\n }\n\n /**\n * Checks whether all requested permissions are available.\n *\n * @param permissions - Non-wildcard permission list.\n * @returns Whether the Host allows every permission.\n */\n async hasPermissions(permissions: readonly string[]): Promise<boolean> {\n const payload = await this.#request(\"permissions.has\", {\n permissions: parsePermissions(permissions),\n });\n if (\n !isPlainRecord(payload) ||\n !hasOnlyKeys(payload, new Set([\"allowed\"])) ||\n typeof payload.allowed !== \"boolean\"\n )\n throw bridgeError(\"BRIDGE_MESSAGE_INVALID\");\n return payload.allowed;\n }\n\n /**\n * Registers one module-owned internationalization catalog.\n *\n * @param namespace - Namespace that must equal the module identifier.\n * @param catalog - Localized project messages.\n */\n async registerMessages(namespace: string, catalog: MiaixzMessageCatalog): Promise<void> {\n this.#assertActive();\n if (namespace !== this.#moduleId) throw bridgeError(\"BRIDGE_MESSAGE_INVALID\");\n const payload = await this.#request(\"i18n.register\", {\n namespace,\n catalog: parseMessageCatalog(namespace, catalog),\n });\n if (payload !== undefined) throw bridgeError(\"BRIDGE_MESSAGE_INVALID\");\n }\n\n /**\n * Emits one module-scoped event through the Host.\n *\n * @typeParam T - Event payload type.\n * @param type - Module-owned event type.\n * @param payload - Event payload.\n */\n async emit<T = unknown>(type: string, payload: T): Promise<void> {\n const response = await this.#request(\"events.emit\", {\n type: parseEventType(this.#moduleId, type),\n payload,\n });\n if (response !== undefined) throw bridgeError(\"BRIDGE_MESSAGE_INVALID\");\n }\n\n /**\n * Subscribes to one module-scoped Host event.\n *\n * @typeParam T - Event payload type.\n * @param type - Module-owned event type.\n * @param listener - Event listener.\n * @returns Idempotent asynchronous unsubscribe function.\n */\n async subscribe<T = unknown>(\n type: string,\n listener: (payload: T) => void,\n ): Promise<() => Promise<void>> {\n this.#assertActive();\n const parsedType = parseEventType(this.#moduleId, type);\n if (typeof listener !== \"function\") throw bridgeError(\"BRIDGE_MESSAGE_INVALID\");\n const payload = await this.#request(\"events.subscribe\", { type: parsedType });\n if (\n !isPlainRecord(payload) ||\n !hasOnlyKeys(payload, new Set([\"subscriptionId\"])) ||\n typeof payload.subscriptionId !== \"string\" ||\n !uuidPattern.test(payload.subscriptionId)\n )\n throw bridgeError(\"BRIDGE_MESSAGE_INVALID\");\n const subscriptionId = payload.subscriptionId;\n this.#listeners.set(subscriptionId, {\n type: parsedType,\n listener: (eventPayload) => listener(eventPayload as T),\n });\n let cancelled = false;\n return async () => {\n if (cancelled) return;\n cancelled = true;\n this.#listeners.delete(subscriptionId);\n if (this.#disposed) return;\n const response = await this.#request(\"events.unsubscribe\", { subscriptionId });\n if (response !== undefined) throw bridgeError(\"BRIDGE_MESSAGE_INVALID\");\n };\n }\n\n /**\n * Notifies the Host and immediately releases local requests and listeners.\n */\n dispose(): void {\n if (this.#disposed) return;\n try {\n this.#post(createEnvelope(this.#moduleId, \"request\", \"bridge.dispose\", createMessageId()));\n } catch {\n // Best-effort remote disposal cannot delay deterministic local cleanup.\n }\n this.#disposed = true;\n for (const [pendingId, pending] of this.#pending) {\n clearTimeout(pending.timer);\n this.#sendCancel(pendingId, pending);\n pending.reject(bridgeError(\"BRIDGE_DISPOSED\"));\n }\n this.#pending.clear();\n this.#listeners.clear();\n this.#incoming.clear();\n this.#runtimeWindow.removeEventListener(\"message\", this.#onMessage);\n }\n\n /**\n * Handles one exact-source Child response or event.\n *\n * @param event - Browser message event.\n */\n readonly #onMessage = (event: MessageEvent): void => {\n if (\n this.#disposed ||\n event.source !== this.#targetWindow ||\n event.origin !== this.#targetOrigin\n )\n return;\n const envelope = parseEnvelope(event.data);\n if (envelope === undefined || envelope.moduleId !== this.#moduleId) return;\n compactCache(this.#incoming);\n if (envelope.kind === \"event\") {\n if (this.#incoming.has(envelope.messageId)) return;\n this.#incoming.set(envelope.messageId, { timestamp: Date.now() });\n this.#handleEvent(envelope);\n return;\n }\n if (envelope.kind !== \"response\") return;\n const pending = this.#pending.get(envelope.messageId);\n if (pending === undefined || pending.method !== envelope.method) return;\n if (this.#incoming.has(envelope.messageId)) return;\n this.#incoming.set(envelope.messageId, { timestamp: Date.now() });\n this.#pending.delete(envelope.messageId);\n clearTimeout(pending.timer);\n if (envelope.error !== undefined) pending.reject(deserializeError(envelope.error));\n else pending.resolve(envelope.payload);\n };\n\n /**\n * Delivers one validated Host subscription event.\n *\n * @param envelope - Event envelope to validate.\n */\n #handleEvent(envelope: MiaixzBridgeEnvelope): void {\n if (\n envelope.method !== \"events.message\" ||\n !isPlainRecord(envelope.payload) ||\n !hasOnlyKeys(envelope.payload, new Set([\"subscriptionId\", \"type\", \"payload\"])) ||\n typeof envelope.payload.subscriptionId !== \"string\" ||\n typeof envelope.payload.type !== \"string\"\n )\n return;\n const registered = this.#listeners.get(envelope.payload.subscriptionId);\n if (registered === undefined || registered.type !== envelope.payload.type) return;\n try {\n registered.listener(envelope.payload.payload);\n } catch {\n // Consumer listener failures cannot corrupt the Bridge transport state.\n }\n }\n\n /**\n * Sends one correlated request and applies timeout cancellation.\n *\n * @param method - Allow-listed request method.\n * @param payload - Optional request payload.\n * @returns Promise resolving to the raw response payload.\n */\n #request(method: string, payload?: unknown): Promise<unknown> {\n this.#assertActive();\n const messageId = createMessageId();\n return new Promise<unknown>((resolve, reject) => {\n const timer = setTimeout(() => {\n const pending = this.#pending.get(messageId);\n if (pending === undefined) return;\n this.#pending.delete(messageId);\n this.#sendCancel(messageId, pending);\n reject(bridgeError(\"BRIDGE_TIMEOUT\"));\n }, this.#timeoutMs);\n const pending: PendingRequest = {\n method,\n resolve,\n reject,\n timer,\n cancelSent: false,\n };\n this.#pending.set(messageId, pending);\n try {\n this.#post(createEnvelope(this.#moduleId, \"request\", method, messageId, payload));\n } catch {\n clearTimeout(timer);\n this.#pending.delete(messageId);\n reject(bridgeError(\"BRIDGE_MESSAGE_INVALID\"));\n }\n });\n }\n\n /**\n * Sends at most one cancellation envelope for a pending request.\n *\n * @param messageId - Request identifier to cancel.\n * @param pending - Pending request state.\n */\n #sendCancel(messageId: string, pending: PendingRequest): void {\n if (pending.cancelSent) return;\n pending.cancelSent = true;\n try {\n this.#post(createEnvelope(this.#moduleId, \"cancel\", pending.method, messageId));\n } catch {\n // Cancellation is best-effort after the local result is already deterministic.\n }\n }\n\n /**\n * Posts one envelope to the single validated Host origin.\n *\n * @param envelope - Envelope to send.\n */\n #post(envelope: MiaixzBridgeEnvelope): void {\n this.#targetWindow.postMessage(envelope, this.#targetOrigin);\n }\n\n /**\n * Rejects calls made after the Child Bridge has been released.\n *\n * @throws MiaixzSdkError When the Bridge is disposed.\n */\n #assertActive(): void {\n if (this.#disposed) throw bridgeError(\"BRIDGE_DISPOSED\");\n }\n}\n\n/**\n * Creates the Host side of a validated iframe postMessage Bridge.\n *\n * @param options - Manifest, target, origin, Adapter, and timeout configuration.\n * @returns Host lifecycle whose ready Promise tracks the handshake.\n * @throws MiaixzSdkError When construction parameters or browser capabilities are invalid.\n * @public\n */\nexport function createMiaixzPostMessageHost(\n options: MiaixzPostMessageHostOptions,\n): MiaixzPostMessageHost {\n return new PostMessageHost(options);\n}\n\n/**\n * Creates and handshakes the Child side of an iframe postMessage Bridge.\n *\n * @param options - Module identity, target, origin, and timeout configuration.\n * @returns Promise resolving to the connected Host Bridge.\n * @throws MiaixzSdkError When construction, handshake, or browser capabilities are invalid.\n * @public\n */\nexport function createMiaixzPostMessageChildBridge(\n options: MiaixzPostMessageChildOptions,\n): Promise<MiaixzHostBridge> {\n const bridge = new PostMessageChildBridge(options);\n return bridge.connect().catch((error: unknown) => {\n bridge.dispose();\n throw error;\n });\n}\n"]}
package/dist/sdk.d.ts ADDED
@@ -0,0 +1,177 @@
1
+ import { type MiaixzAppearanceManager } from "./appearance/index.js";
2
+ import { type MiaixzApiClient, type MiaixzApiTelemetryHooks, type MiaixzCsrfTokenProvider } from "./api/index.js";
3
+ import { MiaixzAuthManager, type MiaixzPersistentAuthStorage, type MiaixzSessionRefresher } from "./auth/index.js";
4
+ import { MiaixzConfigStore } from "./config/index.js";
5
+ import { type MiaixzContextStore } from "./context/index.js";
6
+ import { type MiaixzEventBus, type MiaixzSdkEventMap } from "./events/index.js";
7
+ import { type MiaixzFileClient } from "./files/index.js";
8
+ import { type MiaixzI18n, type MiaixzI18nLoadError, type MiaixzLocale, type MiaixzMessageCatalog, type MiaixzMessageLoader } from "./i18n/index.js";
9
+ import { type MiaixzPermissionSet } from "./permissions/index.js";
10
+ import { type MiaixzKeyValueStorage } from "./storage/index.js";
11
+ import type { MiaixzPermissionSnapshot, MiaixzRuntimeContext, MiaixzSdkConfig } from "./types/index.js";
12
+ /**
13
+ * Selects the SDK authentication integration used for API requests.
14
+ *
15
+ * @public
16
+ */
17
+ export type MiaixzAuthMode = "cookie" | "bearer";
18
+ /**
19
+ * Configures a complete Miaixz SDK instance.
20
+ *
21
+ * @public
22
+ */
23
+ export interface MiaixzSdkOptions {
24
+ /**
25
+ * Identifies the consuming frontend application and its persistence namespace.
26
+ */
27
+ readonly appId: string;
28
+ /**
29
+ * Validated deployment configuration for the SDK.
30
+ */
31
+ readonly config: MiaixzSdkConfig;
32
+ /**
33
+ * Optional runtime Context fields merged over restored persistent state.
34
+ */
35
+ readonly initialContext?: MiaixzRuntimeContext;
36
+ /**
37
+ * Authentication integration; defaults to the Cookie/BFF mode.
38
+ *
39
+ * @defaultValue "cookie"
40
+ */
41
+ readonly authMode?: MiaixzAuthMode;
42
+ /**
43
+ * Explicitly acknowledged persistence used only by Bearer authentication.
44
+ */
45
+ readonly authPersistence?: MiaixzPersistentAuthStorage;
46
+ /**
47
+ * Session refresher used only by Bearer authentication.
48
+ */
49
+ readonly authRefresh?: MiaixzSessionRefresher;
50
+ /**
51
+ * Supplies the authoritative CSRF token for Cookie/BFF write requests.
52
+ */
53
+ readonly csrfTokenProvider?: MiaixzCsrfTokenProvider;
54
+ /**
55
+ * Optional initial locale.
56
+ */
57
+ readonly locale?: MiaixzLocale;
58
+ /**
59
+ * Optional locale used when a message is unavailable in the active locale.
60
+ */
61
+ readonly fallbackLocale?: MiaixzLocale;
62
+ /**
63
+ * Optional initial project message catalogs.
64
+ */
65
+ readonly messages?: MiaixzMessageCatalog;
66
+ /**
67
+ * Optional loader for project-owned language files.
68
+ */
69
+ readonly loadMessages?: MiaixzMessageLoader;
70
+ /**
71
+ * Optional callback invoked when a project language file cannot be loaded.
72
+ */
73
+ readonly onI18nLoadError?: (error: MiaixzI18nLoadError) => void;
74
+ /**
75
+ * Optional key-value storage shared by stateful SDK modules.
76
+ */
77
+ readonly storage?: MiaixzKeyValueStorage;
78
+ /**
79
+ * Optional Fetch implementation shared by API clients.
80
+ */
81
+ readonly fetch?: typeof fetch;
82
+ /**
83
+ * Optional observers shared by the primary and service API clients.
84
+ */
85
+ readonly telemetry?: MiaixzApiTelemetryHooks;
86
+ /**
87
+ * Optional preconfigured event bus shared by SDK modules.
88
+ */
89
+ readonly eventBus?: MiaixzEventBus<MiaixzSdkEventMap>;
90
+ /**
91
+ * Enables same-origin cross-tab events on the channel derived from `appId`.
92
+ *
93
+ * @defaultValue false
94
+ */
95
+ readonly eventChannel?: boolean;
96
+ /**
97
+ * Optional initial frontend permission snapshot.
98
+ */
99
+ readonly permissions?: MiaixzPermissionSnapshot;
100
+ }
101
+ /**
102
+ * Exposes the coordinated Miaixz runtime services used by a frontend application.
103
+ *
104
+ * @public
105
+ */
106
+ export interface MiaixzSdk {
107
+ /**
108
+ * Mutable validated SDK configuration store.
109
+ */
110
+ readonly config: MiaixzConfigStore;
111
+ /**
112
+ * Internationalization runtime and project catalog loader.
113
+ */
114
+ readonly i18n: MiaixzI18n;
115
+ /**
116
+ * Resolves after the initial project language files have loaded.
117
+ */
118
+ readonly ready: Promise<void>;
119
+ /**
120
+ * Shared local and cross-window event bus.
121
+ */
122
+ readonly events: MiaixzEventBus<MiaixzSdkEventMap>;
123
+ /**
124
+ * Authentication session manager.
125
+ */
126
+ readonly auth: MiaixzAuthManager;
127
+ /**
128
+ * Runtime-context store and request-header provider.
129
+ */
130
+ readonly context: MiaixzContextStore;
131
+ /**
132
+ * Theme and density appearance manager.
133
+ */
134
+ readonly appearance: MiaixzAppearanceManager;
135
+ /**
136
+ * API client for the primary configured endpoint.
137
+ */
138
+ readonly api: MiaixzApiClient;
139
+ /**
140
+ * High-level file client for the primary configured endpoint.
141
+ */
142
+ readonly files: MiaixzFileClient;
143
+ /**
144
+ * Current immutable frontend permission evaluator.
145
+ */
146
+ readonly permissions: MiaixzPermissionSet;
147
+ /**
148
+ * Replaces the current frontend permission snapshot.
149
+ *
150
+ * @param snapshot - Permission snapshot to validate and activate.
151
+ * @throws MiaixzSdkError When the permission snapshot is invalid.
152
+ */
153
+ setPermissions(snapshot: MiaixzPermissionSnapshot): void;
154
+ /**
155
+ * Creates an authenticated API client for a configured service endpoint.
156
+ *
157
+ * @param service - Configured service name to resolve.
158
+ * @returns An API client inheriting all SDK security and runtime options.
159
+ * @throws MiaixzSdkError When the service endpoint is missing or invalid.
160
+ */
161
+ createServiceClient(service: string): MiaixzApiClient;
162
+ /**
163
+ * Releases all subscriptions and browser resources owned by this SDK instance.
164
+ */
165
+ destroy(): void;
166
+ }
167
+ /**
168
+ * Composes the Miaixz API, auth, context, config, permissions, files, appearance,
169
+ * events, storage, and internationalization modules into one service SDK.
170
+ *
171
+ * @param options - Deployment configuration and runtime adapters.
172
+ * @returns A service-ready SDK instance. Await `ready` before rendering project translations.
173
+ * @throws MiaixzSdkError When application, configuration, authentication, or runtime options are invalid.
174
+ * @public
175
+ */
176
+ export declare function createMiaixzSdk(options: MiaixzSdkOptions): MiaixzSdk;
177
+ //# sourceMappingURL=sdk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../src/sdk.ts"],"names":[],"mappings":"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"}
package/dist/sdk.js ADDED
@@ -0,0 +1,214 @@
1
+ import { createMiaixzAppearanceManager } from "./appearance/index.js";
2
+ import { createApiClient, MiaixzSdkError, } from "./api/index.js";
3
+ import { createMiaixzAuthManager, MiaixzAuthManager, } from "./auth/index.js";
4
+ import { MiaixzConfigStore, getMiaixzServiceEndpoint } from "./config/index.js";
5
+ import { createMiaixzContextStore } from "./context/index.js";
6
+ import { createMiaixzEventBus, } from "./events/index.js";
7
+ import { createMiaixzFileClient } from "./files/index.js";
8
+ import { createMiaixzI18n, } from "./i18n/index.js";
9
+ import { createMiaixzPermissionSet } from "./permissions/index.js";
10
+ import { miaixzHeaders } from "./consts/index.js";
11
+ import { createMiaixzStorageKey, getMiaixzBrowserStorage, } from "./storage/index.js";
12
+ /**
13
+ * Creates the stable AuthManager-shaped object exposed by Cookie/BFF SDK instances.
14
+ *
15
+ * The implementation intentionally never creates or stores a token session.
16
+ */
17
+ class MiaixzCookieAuthManager extends MiaixzAuthManager {
18
+ #translate;
19
+ /**
20
+ * Creates a disabled token manager for a Cookie/BFF SDK instance.
21
+ *
22
+ * @param translate - Translator used for mode-mismatch errors.
23
+ * @param events - Shared SDK event bus.
24
+ */
25
+ constructor(translate, events) {
26
+ super({ translate, events });
27
+ this.#translate = translate;
28
+ }
29
+ /**
30
+ * Rejects token sessions because Cookie/BFF credentials are owned by the browser and server.
31
+ *
32
+ * @param _session - Rejected Bearer session.
33
+ * @throws MiaixzSdkError Always, because the SDK is using Cookie/BFF authentication.
34
+ */
35
+ setSession(_session) {
36
+ throw createAuthModeMismatchError(this.#translate);
37
+ }
38
+ /**
39
+ * Rejects access-token reads because HttpOnly Cookie credentials are not script-readable.
40
+ *
41
+ * @returns A rejected promise for structural compatibility with the public manager.
42
+ * @throws MiaixzSdkError Always, because the SDK is using Cookie/BFF authentication.
43
+ */
44
+ async getAccessToken() {
45
+ throw createAuthModeMismatchError(this.#translate);
46
+ }
47
+ }
48
+ /**
49
+ * Creates a localized authentication-mode mismatch error without credential details.
50
+ *
51
+ * @param translate - Translator used to resolve the public error message.
52
+ * @returns A safe SDK error describing an unavailable authentication operation.
53
+ */
54
+ function createAuthModeMismatchError(translate) {
55
+ return new MiaixzSdkError(translate("sdk.error.auth.modeMismatch"), {
56
+ code: "AUTH_MODE_MISMATCH",
57
+ });
58
+ }
59
+ /**
60
+ * Composes the Miaixz API, auth, context, config, permissions, files, appearance,
61
+ * events, storage, and internationalization modules into one service SDK.
62
+ *
63
+ * @param options - Deployment configuration and runtime adapters.
64
+ * @returns A service-ready SDK instance. Await `ready` before rendering project translations.
65
+ * @throws MiaixzSdkError When application, configuration, authentication, or runtime options are invalid.
66
+ * @public
67
+ */
68
+ export function createMiaixzSdk(options) {
69
+ createMiaixzStorageKey({ appId: options.appId }, "context");
70
+ const authMode = options.authMode ?? "cookie";
71
+ const i18n = createMiaixzI18n({
72
+ ...(options.locale === undefined ? {} : { locale: options.locale }),
73
+ ...(options.fallbackLocale === undefined ? {} : { fallbackLocale: options.fallbackLocale }),
74
+ ...(options.messages === undefined ? {} : { messages: options.messages }),
75
+ ...(options.loadMessages === undefined ? {} : { loadMessages: options.loadMessages }),
76
+ ...(options.onI18nLoadError === undefined ? {} : { onLoadError: options.onI18nLoadError }),
77
+ });
78
+ if (authMode === "cookie" &&
79
+ (options.authPersistence !== undefined || options.authRefresh !== undefined)) {
80
+ throw createAuthModeMismatchError(i18n.t);
81
+ }
82
+ if (options.eventBus !== undefined && options.eventChannel === true) {
83
+ throw new MiaixzSdkError(i18n.t("sdk.error.event.channelInvalid"), {
84
+ code: "EVENT_CHANNEL_INVALID",
85
+ });
86
+ }
87
+ const ownsEventBus = options.eventBus === undefined;
88
+ const events = options.eventBus ??
89
+ createMiaixzEventBus({
90
+ channelName: options.eventChannel === true ? `miaixz:v1:${options.appId}:events` : false,
91
+ });
92
+ const storage = options.storage ?? getMiaixzBrowserStorage();
93
+ const ready = i18n.initialize(["sdk"]);
94
+ const config = new MiaixzConfigStore(options.config, events, i18n.t);
95
+ const auth = authMode === "cookie"
96
+ ? new MiaixzCookieAuthManager(i18n.t, events)
97
+ : createMiaixzAuthManager({
98
+ events,
99
+ translate: i18n.t,
100
+ ...(options.authPersistence === undefined
101
+ ? {}
102
+ : { persistence: options.authPersistence }),
103
+ ...(options.authRefresh === undefined ? {} : { refresh: options.authRefresh }),
104
+ });
105
+ const context = createMiaixzContextStore({
106
+ appId: options.appId,
107
+ events,
108
+ translate: i18n.t,
109
+ ...(storage === undefined ? {} : { storage }),
110
+ ...(options.initialContext === undefined ? {} : { initialContext: options.initialContext }),
111
+ });
112
+ if (context.getSnapshot().locale !== i18n.locale) {
113
+ context.patch({ locale: i18n.locale });
114
+ }
115
+ let appearanceTenantId = context.getSnapshot().tenantId;
116
+ const appearance = createMiaixzAppearanceManager({
117
+ appId: options.appId,
118
+ ...(appearanceTenantId === undefined ? {} : { tenantId: appearanceTenantId }),
119
+ events,
120
+ translate: i18n.t,
121
+ ...(storage === undefined ? {} : { storage }),
122
+ ...(config.getSnapshot().appearance === undefined
123
+ ? {}
124
+ : { initialAppearance: config.getSnapshot().appearance }),
125
+ });
126
+ const stopAppearanceScopeSync = context.subscribe((snapshot) => {
127
+ if (snapshot.tenantId === appearanceTenantId)
128
+ return;
129
+ appearanceTenantId = snapshot.tenantId;
130
+ appearance.setScope(appearanceTenantId);
131
+ });
132
+ const createClient = (baseUrl, environment) => createApiClient({
133
+ baseUrl,
134
+ environment,
135
+ credentials: authMode === "cookie" ? "include" : "same-origin",
136
+ ...(authMode === "bearer" ? { authorizationProvider: auth.authorizationProvider } : {}),
137
+ csrf: authMode === "cookie"
138
+ ? {
139
+ required: true,
140
+ ...(options.csrfTokenProvider === undefined
141
+ ? {}
142
+ : { tokenProvider: options.csrfTokenProvider }),
143
+ }
144
+ : { required: false },
145
+ contextHeadersProvider: () => {
146
+ const headers = context.headersProvider();
147
+ if (!headers.has(miaixzHeaders.locale))
148
+ headers.set(miaixzHeaders.locale, i18n.locale);
149
+ return headers;
150
+ },
151
+ translate: i18n.t,
152
+ ...(options.telemetry === undefined ? {} : { telemetry: options.telemetry }),
153
+ ...(options.fetch === undefined ? {} : { fetch: options.fetch }),
154
+ ...(config.getSnapshot().requestTimeoutMs === undefined
155
+ ? {}
156
+ : { timeoutMs: config.getSnapshot().requestTimeoutMs }),
157
+ });
158
+ let api = createClient(config.getSnapshot().apiBaseUrl, config.getSnapshot().environment);
159
+ let files = createMiaixzFileClient(api, { translate: i18n.t });
160
+ let permissions = createMiaixzPermissionSet(options.permissions ?? { allowed: [] }, i18n.t);
161
+ const stopClientConfigSync = config.subscribe((nextConfig) => {
162
+ api = createClient(nextConfig.apiBaseUrl, nextConfig.environment);
163
+ files = createMiaixzFileClient(api, { translate: i18n.t });
164
+ });
165
+ const stopLocaleBroadcast = i18n.subscribe((snapshot) => {
166
+ if (context.getSnapshot().locale !== snapshot.locale) {
167
+ context.patch({ locale: snapshot.locale });
168
+ events.emit("locale:changed", Object.freeze({ locale: snapshot.locale }));
169
+ }
170
+ });
171
+ const stopLocaleSync = events.on("locale:changed", ({ locale }) => {
172
+ if (locale !== i18n.locale) {
173
+ void i18n.changeLocale(locale).catch(() => undefined);
174
+ }
175
+ });
176
+ const sdk = {
177
+ config,
178
+ i18n,
179
+ ready,
180
+ events,
181
+ auth,
182
+ context,
183
+ appearance,
184
+ get api() {
185
+ return api;
186
+ },
187
+ get files() {
188
+ return files;
189
+ },
190
+ get permissions() {
191
+ return permissions;
192
+ },
193
+ setPermissions(snapshot) {
194
+ permissions = createMiaixzPermissionSet(snapshot, i18n.t);
195
+ },
196
+ createServiceClient(service) {
197
+ return createClient(getMiaixzServiceEndpoint(config.getSnapshot(), service, i18n.t), config.getSnapshot().environment);
198
+ },
199
+ destroy() {
200
+ stopAppearanceScopeSync();
201
+ stopLocaleBroadcast();
202
+ stopLocaleSync();
203
+ stopClientConfigSync();
204
+ auth.destroy();
205
+ context.destroy();
206
+ appearance.destroy();
207
+ config.destroy();
208
+ if (ownsEventBus)
209
+ events.close();
210
+ },
211
+ };
212
+ return sdk;
213
+ }
214
+ //# sourceMappingURL=sdk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdk.js","sourceRoot":"","sources":["../src/sdk.ts"],"names":[],"mappings":"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","sourcesContent":["import { createMiaixzAppearanceManager, type MiaixzAppearanceManager } from \"./appearance/index.js\";\nimport {\n createApiClient,\n MiaixzSdkError,\n type MiaixzApiClient,\n type MiaixzApiTelemetryHooks,\n type MiaixzCsrfTokenProvider,\n} from \"./api/index.js\";\nimport {\n createMiaixzAuthManager,\n MiaixzAuthManager,\n type MiaixzAuthSession,\n type MiaixzPersistentAuthStorage,\n type MiaixzSessionRefresher,\n} from \"./auth/index.js\";\nimport { MiaixzConfigStore, getMiaixzServiceEndpoint } from \"./config/index.js\";\nimport { createMiaixzContextStore, type MiaixzContextStore } from \"./context/index.js\";\nimport {\n createMiaixzEventBus,\n type MiaixzEventBus,\n type MiaixzSdkEventMap,\n} from \"./events/index.js\";\nimport { createMiaixzFileClient, type MiaixzFileClient } from \"./files/index.js\";\nimport {\n createMiaixzI18n,\n type MiaixzI18n,\n type MiaixzI18nLoadError,\n type MiaixzLocale,\n type MiaixzMessageCatalog,\n type MiaixzMessageLoader,\n} from \"./i18n/index.js\";\nimport { createMiaixzPermissionSet, type MiaixzPermissionSet } from \"./permissions/index.js\";\nimport { miaixzHeaders } from \"./consts/index.js\";\nimport {\n createMiaixzStorageKey,\n getMiaixzBrowserStorage,\n type MiaixzKeyValueStorage,\n} from \"./storage/index.js\";\nimport type {\n MiaixzPermissionSnapshot,\n MiaixzRuntimeContext,\n MiaixzSdkConfig,\n} from \"./types/index.js\";\n\n/**\n * Selects the SDK authentication integration used for API requests.\n *\n * @public\n */\nexport type MiaixzAuthMode = \"cookie\" | \"bearer\";\n\n/**\n * Configures a complete Miaixz SDK instance.\n *\n * @public\n */\nexport interface MiaixzSdkOptions {\n /**\n * Identifies the consuming frontend application and its persistence namespace.\n */\n readonly appId: string;\n\n /**\n * Validated deployment configuration for the SDK.\n */\n readonly config: MiaixzSdkConfig;\n\n /**\n * Optional runtime Context fields merged over restored persistent state.\n */\n readonly initialContext?: MiaixzRuntimeContext;\n\n /**\n * Authentication integration; defaults to the Cookie/BFF mode.\n *\n * @defaultValue \"cookie\"\n */\n readonly authMode?: MiaixzAuthMode;\n\n /**\n * Explicitly acknowledged persistence used only by Bearer authentication.\n */\n readonly authPersistence?: MiaixzPersistentAuthStorage;\n\n /**\n * Session refresher used only by Bearer authentication.\n */\n readonly authRefresh?: MiaixzSessionRefresher;\n\n /**\n * Supplies the authoritative CSRF token for Cookie/BFF write requests.\n */\n readonly csrfTokenProvider?: MiaixzCsrfTokenProvider;\n\n /**\n * Optional initial locale.\n */\n readonly locale?: MiaixzLocale;\n\n /**\n * Optional locale used when a message is unavailable in the active locale.\n */\n readonly fallbackLocale?: MiaixzLocale;\n\n /**\n * Optional initial project message catalogs.\n */\n readonly messages?: MiaixzMessageCatalog;\n\n /**\n * Optional loader for project-owned language files.\n */\n readonly loadMessages?: MiaixzMessageLoader;\n\n /**\n * Optional callback invoked when a project language file cannot be loaded.\n */\n readonly onI18nLoadError?: (error: MiaixzI18nLoadError) => void;\n\n /**\n * Optional key-value storage shared by stateful SDK modules.\n */\n readonly storage?: MiaixzKeyValueStorage;\n\n /**\n * Optional Fetch implementation shared by API clients.\n */\n readonly fetch?: typeof fetch;\n\n /**\n * Optional observers shared by the primary and service API clients.\n */\n readonly telemetry?: MiaixzApiTelemetryHooks;\n\n /**\n * Optional preconfigured event bus shared by SDK modules.\n */\n readonly eventBus?: MiaixzEventBus<MiaixzSdkEventMap>;\n\n /**\n * Enables same-origin cross-tab events on the channel derived from `appId`.\n *\n * @defaultValue false\n */\n readonly eventChannel?: boolean;\n\n /**\n * Optional initial frontend permission snapshot.\n */\n readonly permissions?: MiaixzPermissionSnapshot;\n}\n\n/**\n * Creates the stable AuthManager-shaped object exposed by Cookie/BFF SDK instances.\n *\n * The implementation intentionally never creates or stores a token session.\n */\nclass MiaixzCookieAuthManager extends MiaixzAuthManager {\n readonly #translate: MiaixzI18n[\"t\"];\n\n /**\n * Creates a disabled token manager for a Cookie/BFF SDK instance.\n *\n * @param translate - Translator used for mode-mismatch errors.\n * @param events - Shared SDK event bus.\n */\n constructor(translate: MiaixzI18n[\"t\"], events: MiaixzEventBus<MiaixzSdkEventMap>) {\n super({ translate, events });\n this.#translate = translate;\n }\n\n /**\n * Rejects token sessions because Cookie/BFF credentials are owned by the browser and server.\n *\n * @param _session - Rejected Bearer session.\n * @throws MiaixzSdkError Always, because the SDK is using Cookie/BFF authentication.\n */\n override setSession(_session: MiaixzAuthSession): void {\n throw createAuthModeMismatchError(this.#translate);\n }\n\n /**\n * Rejects access-token reads because HttpOnly Cookie credentials are not script-readable.\n *\n * @returns A rejected promise for structural compatibility with the public manager.\n * @throws MiaixzSdkError Always, because the SDK is using Cookie/BFF authentication.\n */\n override async getAccessToken(): Promise<undefined> {\n throw createAuthModeMismatchError(this.#translate);\n }\n}\n\n/**\n * Creates a localized authentication-mode mismatch error without credential details.\n *\n * @param translate - Translator used to resolve the public error message.\n * @returns A safe SDK error describing an unavailable authentication operation.\n */\nfunction createAuthModeMismatchError(translate: MiaixzI18n[\"t\"]): MiaixzSdkError {\n return new MiaixzSdkError(translate(\"sdk.error.auth.modeMismatch\"), {\n code: \"AUTH_MODE_MISMATCH\",\n });\n}\n\n/**\n * Exposes the coordinated Miaixz runtime services used by a frontend application.\n *\n * @public\n */\nexport interface MiaixzSdk {\n /**\n * Mutable validated SDK configuration store.\n */\n readonly config: MiaixzConfigStore;\n\n /**\n * Internationalization runtime and project catalog loader.\n */\n readonly i18n: MiaixzI18n;\n /**\n * Resolves after the initial project language files have loaded.\n */\n readonly ready: Promise<void>;\n\n /**\n * Shared local and cross-window event bus.\n */\n readonly events: MiaixzEventBus<MiaixzSdkEventMap>;\n\n /**\n * Authentication session manager.\n */\n readonly auth: MiaixzAuthManager;\n\n /**\n * Runtime-context store and request-header provider.\n */\n readonly context: MiaixzContextStore;\n\n /**\n * Theme and density appearance manager.\n */\n readonly appearance: MiaixzAppearanceManager;\n\n /**\n * API client for the primary configured endpoint.\n */\n readonly api: MiaixzApiClient;\n\n /**\n * High-level file client for the primary configured endpoint.\n */\n readonly files: MiaixzFileClient;\n\n /**\n * Current immutable frontend permission evaluator.\n */\n readonly permissions: MiaixzPermissionSet;\n /**\n * Replaces the current frontend permission snapshot.\n *\n * @param snapshot - Permission snapshot to validate and activate.\n * @throws MiaixzSdkError When the permission snapshot is invalid.\n */\n setPermissions(snapshot: MiaixzPermissionSnapshot): void;\n /**\n * Creates an authenticated API client for a configured service endpoint.\n *\n * @param service - Configured service name to resolve.\n * @returns An API client inheriting all SDK security and runtime options.\n * @throws MiaixzSdkError When the service endpoint is missing or invalid.\n */\n createServiceClient(service: string): MiaixzApiClient;\n /**\n * Releases all subscriptions and browser resources owned by this SDK instance.\n */\n destroy(): void;\n}\n\n/**\n * Composes the Miaixz API, auth, context, config, permissions, files, appearance,\n * events, storage, and internationalization modules into one service SDK.\n *\n * @param options - Deployment configuration and runtime adapters.\n * @returns A service-ready SDK instance. Await `ready` before rendering project translations.\n * @throws MiaixzSdkError When application, configuration, authentication, or runtime options are invalid.\n * @public\n */\nexport function createMiaixzSdk(options: MiaixzSdkOptions): MiaixzSdk {\n createMiaixzStorageKey({ appId: options.appId }, \"context\");\n const authMode = options.authMode ?? \"cookie\";\n const i18n = createMiaixzI18n({\n ...(options.locale === undefined ? {} : { locale: options.locale }),\n ...(options.fallbackLocale === undefined ? {} : { fallbackLocale: options.fallbackLocale }),\n ...(options.messages === undefined ? {} : { messages: options.messages }),\n ...(options.loadMessages === undefined ? {} : { loadMessages: options.loadMessages }),\n ...(options.onI18nLoadError === undefined ? {} : { onLoadError: options.onI18nLoadError }),\n });\n if (\n authMode === \"cookie\" &&\n (options.authPersistence !== undefined || options.authRefresh !== undefined)\n ) {\n throw createAuthModeMismatchError(i18n.t);\n }\n if (options.eventBus !== undefined && options.eventChannel === true) {\n throw new MiaixzSdkError(i18n.t(\"sdk.error.event.channelInvalid\"), {\n code: \"EVENT_CHANNEL_INVALID\",\n });\n }\n const ownsEventBus = options.eventBus === undefined;\n const events =\n options.eventBus ??\n createMiaixzEventBus({\n channelName: options.eventChannel === true ? `miaixz:v1:${options.appId}:events` : false,\n });\n const storage = options.storage ?? getMiaixzBrowserStorage();\n const ready = i18n.initialize([\"sdk\"]);\n const config = new MiaixzConfigStore(options.config, events, i18n.t);\n const auth: MiaixzAuthManager =\n authMode === \"cookie\"\n ? new MiaixzCookieAuthManager(i18n.t, events)\n : createMiaixzAuthManager({\n events,\n translate: i18n.t,\n ...(options.authPersistence === undefined\n ? {}\n : { persistence: options.authPersistence }),\n ...(options.authRefresh === undefined ? {} : { refresh: options.authRefresh }),\n });\n const context = createMiaixzContextStore({\n appId: options.appId,\n events,\n translate: i18n.t,\n ...(storage === undefined ? {} : { storage }),\n ...(options.initialContext === undefined ? {} : { initialContext: options.initialContext }),\n });\n if (context.getSnapshot().locale !== i18n.locale) {\n context.patch({ locale: i18n.locale });\n }\n let appearanceTenantId = context.getSnapshot().tenantId;\n const appearance = createMiaixzAppearanceManager({\n appId: options.appId,\n ...(appearanceTenantId === undefined ? {} : { tenantId: appearanceTenantId }),\n events,\n translate: i18n.t,\n ...(storage === undefined ? {} : { storage }),\n ...(config.getSnapshot().appearance === undefined\n ? {}\n : { initialAppearance: config.getSnapshot().appearance }),\n });\n const stopAppearanceScopeSync = context.subscribe((snapshot) => {\n if (snapshot.tenantId === appearanceTenantId) return;\n appearanceTenantId = snapshot.tenantId;\n appearance.setScope(appearanceTenantId);\n });\n\n const createClient = (\n baseUrl: string,\n environment: MiaixzSdkConfig[\"environment\"],\n ): MiaixzApiClient =>\n createApiClient({\n baseUrl,\n environment,\n credentials: authMode === \"cookie\" ? \"include\" : \"same-origin\",\n ...(authMode === \"bearer\" ? { authorizationProvider: auth.authorizationProvider } : {}),\n csrf:\n authMode === \"cookie\"\n ? {\n required: true,\n ...(options.csrfTokenProvider === undefined\n ? {}\n : { tokenProvider: options.csrfTokenProvider }),\n }\n : { required: false },\n contextHeadersProvider: () => {\n const headers = context.headersProvider();\n if (!headers.has(miaixzHeaders.locale)) headers.set(miaixzHeaders.locale, i18n.locale);\n return headers;\n },\n translate: i18n.t,\n ...(options.telemetry === undefined ? {} : { telemetry: options.telemetry }),\n ...(options.fetch === undefined ? {} : { fetch: options.fetch }),\n ...(config.getSnapshot().requestTimeoutMs === undefined\n ? {}\n : { timeoutMs: config.getSnapshot().requestTimeoutMs }),\n });\n\n let api = createClient(config.getSnapshot().apiBaseUrl, config.getSnapshot().environment);\n let files = createMiaixzFileClient(api, { translate: i18n.t });\n let permissions = createMiaixzPermissionSet(options.permissions ?? { allowed: [] }, i18n.t);\n\n const stopClientConfigSync = config.subscribe((nextConfig) => {\n api = createClient(nextConfig.apiBaseUrl, nextConfig.environment);\n files = createMiaixzFileClient(api, { translate: i18n.t });\n });\n\n const stopLocaleBroadcast = i18n.subscribe((snapshot) => {\n if (context.getSnapshot().locale !== snapshot.locale) {\n context.patch({ locale: snapshot.locale });\n events.emit(\"locale:changed\", Object.freeze({ locale: snapshot.locale }));\n }\n });\n const stopLocaleSync = events.on(\"locale:changed\", ({ locale }) => {\n if (locale !== i18n.locale) {\n void i18n.changeLocale(locale).catch(() => undefined);\n }\n });\n\n const sdk: MiaixzSdk = {\n config,\n i18n,\n ready,\n events,\n auth,\n context,\n appearance,\n get api() {\n return api;\n },\n get files() {\n return files;\n },\n get permissions() {\n return permissions;\n },\n setPermissions(snapshot) {\n permissions = createMiaixzPermissionSet(snapshot, i18n.t);\n },\n createServiceClient(service) {\n return createClient(\n getMiaixzServiceEndpoint(config.getSnapshot(), service, i18n.t),\n config.getSnapshot().environment,\n );\n },\n destroy() {\n stopAppearanceScopeSync();\n stopLocaleBroadcast();\n stopLocaleSync();\n stopClientConfigSync();\n auth.destroy();\n context.destroy();\n appearance.destroy();\n config.destroy();\n if (ownsEventBus) events.close();\n },\n };\n\n return sdk;\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export * from "./storage.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC"}