@strivacity/sdk-core 3.0.3 → 4.0.0-beta.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 (327) hide show
  1. package/README.md +1873 -340
  2. package/dist/assets/oidc.cjs +2 -0
  3. package/dist/assets/oidc.cjs.map +1 -0
  4. package/dist/assets/oidc.mjs +2 -0
  5. package/dist/assets/oidc.mjs.map +1 -0
  6. package/dist/assets/server.cjs +2 -0
  7. package/dist/assets/server.cjs.map +1 -0
  8. package/dist/assets/server.mjs +2 -0
  9. package/dist/assets/server.mjs.map +1 -0
  10. package/dist/flows/base.cjs +2 -0
  11. package/dist/flows/base.cjs.map +1 -0
  12. package/dist/flows/base.d.ts +26 -0
  13. package/dist/flows/base.mjs +2 -0
  14. package/dist/flows/base.mjs.map +1 -0
  15. package/dist/flows/embedded.cjs +2 -0
  16. package/dist/flows/embedded.cjs.map +1 -0
  17. package/dist/flows/embedded.d.ts +9 -0
  18. package/dist/flows/embedded.mjs +2 -0
  19. package/dist/flows/embedded.mjs.map +1 -0
  20. package/dist/flows/index.cjs +1 -0
  21. package/dist/flows/index.d.ts +5 -0
  22. package/dist/flows/index.mjs +1 -0
  23. package/dist/flows/native.cjs +2 -0
  24. package/dist/flows/native.cjs.map +1 -0
  25. package/dist/flows/native.d.ts +9 -0
  26. package/dist/flows/native.mjs +2 -0
  27. package/dist/flows/native.mjs.map +1 -0
  28. package/dist/flows/popup.cjs +2 -0
  29. package/dist/flows/popup.cjs.map +1 -0
  30. package/dist/flows/popup.d.ts +9 -0
  31. package/dist/flows/popup.mjs +2 -0
  32. package/dist/flows/popup.mjs.map +1 -0
  33. package/dist/flows/redirect.cjs +2 -0
  34. package/dist/flows/redirect.cjs.map +1 -0
  35. package/dist/flows/redirect.d.ts +9 -0
  36. package/dist/flows/redirect.mjs +2 -0
  37. package/dist/flows/redirect.mjs.map +1 -0
  38. package/dist/handlers/embedded.cjs +2 -0
  39. package/dist/handlers/embedded.cjs.map +1 -0
  40. package/dist/handlers/embedded.d.ts +37 -0
  41. package/dist/handlers/embedded.mjs +2 -0
  42. package/dist/handlers/embedded.mjs.map +1 -0
  43. package/dist/handlers/index.cjs +1 -0
  44. package/dist/handlers/index.d.ts +2 -0
  45. package/dist/handlers/index.mjs +1 -0
  46. package/dist/handlers/native.cjs +2 -0
  47. package/dist/handlers/native.cjs.map +1 -0
  48. package/dist/handlers/native.d.ts +56 -0
  49. package/dist/handlers/native.mjs +2 -0
  50. package/dist/handlers/native.mjs.map +1 -0
  51. package/dist/handlers/popup.cjs +2 -0
  52. package/dist/handlers/popup.cjs.map +1 -0
  53. package/dist/handlers/popup.d.ts +21 -0
  54. package/dist/handlers/popup.mjs +2 -0
  55. package/dist/handlers/popup.mjs.map +1 -0
  56. package/dist/handlers/redirect.cjs +2 -0
  57. package/dist/handlers/redirect.cjs.map +1 -0
  58. package/dist/handlers/redirect.d.ts +18 -0
  59. package/dist/handlers/redirect.mjs +2 -0
  60. package/dist/handlers/redirect.mjs.map +1 -0
  61. package/dist/index.cjs +2 -2
  62. package/dist/index.cjs.map +1 -1
  63. package/dist/index.d.ts +16 -21
  64. package/dist/index.mjs +2 -2
  65. package/dist/index.mjs.map +1 -1
  66. package/dist/server/base.cjs +2 -0
  67. package/dist/server/base.cjs.map +1 -0
  68. package/dist/server/base.d.ts +15 -0
  69. package/dist/server/base.mjs +2 -0
  70. package/dist/server/base.mjs.map +1 -0
  71. package/dist/server/index.cjs +1 -0
  72. package/dist/server/index.d.ts +1 -0
  73. package/dist/server/index.mjs +1 -0
  74. package/dist/storages/cache.cjs +2 -0
  75. package/dist/storages/cache.cjs.map +1 -0
  76. package/dist/storages/cache.d.ts +11 -0
  77. package/dist/storages/cache.mjs +2 -0
  78. package/dist/storages/cache.mjs.map +1 -0
  79. package/dist/storages/index.cjs +1 -0
  80. package/dist/storages/index.d.ts +7 -0
  81. package/dist/storages/index.mjs +1 -0
  82. package/dist/storages/indexeddb.cjs +2 -0
  83. package/dist/storages/indexeddb.cjs.map +1 -0
  84. package/dist/storages/indexeddb.d.ts +10 -0
  85. package/dist/storages/indexeddb.mjs +2 -0
  86. package/dist/storages/indexeddb.mjs.map +1 -0
  87. package/dist/storages/local.cjs +2 -0
  88. package/dist/storages/local.cjs.map +1 -0
  89. package/dist/storages/local.d.ts +7 -0
  90. package/dist/storages/local.mjs +2 -0
  91. package/dist/storages/local.mjs.map +1 -0
  92. package/dist/storages/memory.cjs +2 -0
  93. package/dist/storages/memory.cjs.map +1 -0
  94. package/dist/storages/memory.d.ts +8 -0
  95. package/dist/storages/memory.mjs +2 -0
  96. package/dist/storages/memory.mjs.map +1 -0
  97. package/dist/storages/server.cjs +1 -0
  98. package/dist/storages/server.d.ts +39 -0
  99. package/dist/storages/server.mjs +1 -0
  100. package/dist/storages/session.cjs +2 -0
  101. package/dist/storages/session.cjs.map +1 -0
  102. package/dist/storages/session.d.ts +7 -0
  103. package/dist/storages/session.mjs +2 -0
  104. package/dist/storages/session.mjs.map +1 -0
  105. package/dist/storages/worker.cjs +2 -0
  106. package/dist/storages/worker.cjs.map +1 -0
  107. package/dist/storages/worker.d.ts +46 -0
  108. package/dist/storages/worker.mjs +2 -0
  109. package/dist/storages/worker.mjs.map +1 -0
  110. package/dist/types/common.cjs +0 -0
  111. package/dist/types/common.d.ts +145 -0
  112. package/dist/types/common.mjs +0 -0
  113. package/dist/types/embedded.cjs +0 -0
  114. package/dist/types/embedded.d.ts +103 -0
  115. package/dist/types/embedded.mjs +0 -0
  116. package/dist/types/index.cjs +1 -0
  117. package/dist/types/index.d.ts +7 -0
  118. package/dist/types/index.mjs +1 -0
  119. package/dist/types/native.cjs +0 -0
  120. package/dist/types/native.d.ts +385 -0
  121. package/dist/types/native.mjs +0 -0
  122. package/dist/types/oidc.cjs +2 -0
  123. package/dist/types/oidc.cjs.map +1 -0
  124. package/dist/types/oidc.d.ts +768 -0
  125. package/dist/types/oidc.mjs +2 -0
  126. package/dist/types/oidc.mjs.map +1 -0
  127. package/dist/types/popup.cjs +0 -0
  128. package/dist/types/popup.d.ts +69 -0
  129. package/dist/types/popup.mjs +0 -0
  130. package/dist/types/redirect.cjs +0 -0
  131. package/dist/types/redirect.d.ts +21 -0
  132. package/dist/types/redirect.mjs +0 -0
  133. package/dist/types/server.cjs +0 -0
  134. package/dist/types/server.d.ts +200 -0
  135. package/dist/types/server.mjs +0 -0
  136. package/dist/utils/base64url.cjs +2 -0
  137. package/dist/utils/base64url.cjs.map +1 -0
  138. package/dist/utils/base64url.d.ts +14 -0
  139. package/dist/utils/base64url.mjs +2 -0
  140. package/dist/utils/base64url.mjs.map +1 -0
  141. package/dist/utils/common.cjs +2 -0
  142. package/dist/utils/common.cjs.map +1 -0
  143. package/dist/utils/common.d.ts +23 -0
  144. package/dist/utils/common.mjs +2 -0
  145. package/dist/utils/common.mjs.map +1 -0
  146. package/dist/utils/credentials.cjs +2 -2
  147. package/dist/utils/credentials.cjs.map +1 -1
  148. package/dist/utils/credentials.d.ts +19 -3
  149. package/dist/utils/credentials.mjs +2 -2
  150. package/dist/utils/credentials.mjs.map +1 -1
  151. package/dist/utils/crypto.cjs +2 -2
  152. package/dist/utils/crypto.cjs.map +1 -1
  153. package/dist/utils/crypto.d.ts +16 -26
  154. package/dist/utils/crypto.mjs +2 -2
  155. package/dist/utils/crypto.mjs.map +1 -1
  156. package/dist/utils/dom.cjs +2 -0
  157. package/dist/utils/dom.cjs.map +1 -0
  158. package/dist/utils/dom.d.ts +7 -0
  159. package/dist/utils/dom.mjs +2 -0
  160. package/dist/utils/dom.mjs.map +1 -0
  161. package/dist/utils/errors.cjs +2 -2
  162. package/dist/utils/errors.cjs.map +1 -1
  163. package/dist/utils/errors.d.ts +62 -1
  164. package/dist/utils/errors.mjs +2 -2
  165. package/dist/utils/errors.mjs.map +1 -1
  166. package/dist/utils/httpClient.cjs +2 -0
  167. package/dist/utils/httpClient.cjs.map +1 -0
  168. package/dist/utils/httpClient.d.ts +2 -0
  169. package/dist/utils/httpClient.mjs +2 -0
  170. package/dist/utils/httpClient.mjs.map +1 -0
  171. package/dist/utils/index.cjs +1 -0
  172. package/dist/utils/index.d.ts +12 -0
  173. package/dist/utils/index.mjs +1 -0
  174. package/dist/utils/logging.cjs +2 -0
  175. package/dist/utils/logging.cjs.map +1 -0
  176. package/dist/utils/logging.d.ts +2 -0
  177. package/dist/utils/logging.mjs +2 -0
  178. package/dist/utils/logging.mjs.map +1 -0
  179. package/dist/utils/oidc.cjs +1 -0
  180. package/dist/utils/oidc.d.ts +264 -0
  181. package/dist/utils/oidc.mjs +1 -0
  182. package/dist/utils/server.cjs +1 -0
  183. package/dist/utils/server.d.ts +72 -0
  184. package/dist/utils/server.mjs +1 -0
  185. package/dist/utils/session.cjs +2 -0
  186. package/dist/utils/session.cjs.map +1 -0
  187. package/dist/utils/session.d.ts +29 -0
  188. package/dist/utils/session.mjs +2 -0
  189. package/dist/utils/session.mjs.map +1 -0
  190. package/dist/utils/state.cjs +1 -0
  191. package/dist/utils/state.d.ts +23 -0
  192. package/dist/utils/state.mjs +1 -0
  193. package/package.json +53 -1
  194. package/testing/tests/flows/base.spec.ts +1030 -0
  195. package/testing/tests/flows/embedded.spec.ts +443 -0
  196. package/testing/tests/flows/index.spec.ts +8 -0
  197. package/testing/tests/flows/native.spec.ts +487 -0
  198. package/testing/tests/flows/popup.spec.ts +400 -0
  199. package/testing/tests/flows/redirect.spec.ts +369 -0
  200. package/testing/tests/handlers/embedded.spec.ts +199 -0
  201. package/testing/tests/handlers/index.spec.ts +8 -0
  202. package/testing/tests/handlers/native.spec.ts +283 -0
  203. package/testing/tests/handlers/popup.spec.ts +206 -0
  204. package/testing/tests/handlers/redirect.spec.ts +70 -0
  205. package/testing/tests/index.spec.ts +78 -0
  206. package/testing/tests/server/base.spec.ts +846 -0
  207. package/testing/tests/server/index.spec.ts +15 -0
  208. package/testing/tests/storages/cache.spec.ts +107 -0
  209. package/testing/tests/storages/index.spec.ts +22 -0
  210. package/testing/tests/storages/indexeddb.spec.ts +113 -0
  211. package/testing/tests/storages/local.spec.ts +46 -0
  212. package/testing/tests/storages/memory.spec.ts +51 -0
  213. package/testing/tests/storages/server.spec.ts +435 -0
  214. package/testing/tests/storages/session.spec.ts +46 -0
  215. package/testing/tests/storages/worker.spec.ts +106 -0
  216. package/testing/tests/utils/common.spec.ts +77 -0
  217. package/testing/tests/utils/credentials.spec.ts +195 -0
  218. package/testing/tests/utils/dom.spec.ts +37 -0
  219. package/testing/tests/utils/index.spec.ts +71 -0
  220. package/testing/tests/utils/logging.spec.ts +82 -0
  221. package/testing/tests/utils/oidc.spec.ts +744 -0
  222. package/testing/tests/utils/server.spec.ts +235 -0
  223. package/dist/flows/BaseFlow.cjs +0 -2
  224. package/dist/flows/BaseFlow.cjs.map +0 -1
  225. package/dist/flows/BaseFlow.d.ts +0 -191
  226. package/dist/flows/BaseFlow.mjs +0 -2
  227. package/dist/flows/BaseFlow.mjs.map +0 -1
  228. package/dist/flows/EmbeddedFlow.cjs +0 -2
  229. package/dist/flows/EmbeddedFlow.cjs.map +0 -1
  230. package/dist/flows/EmbeddedFlow.d.ts +0 -26
  231. package/dist/flows/EmbeddedFlow.mjs +0 -2
  232. package/dist/flows/EmbeddedFlow.mjs.map +0 -1
  233. package/dist/flows/NativeFlow.cjs +0 -2
  234. package/dist/flows/NativeFlow.cjs.map +0 -1
  235. package/dist/flows/NativeFlow.d.ts +0 -34
  236. package/dist/flows/NativeFlow.mjs +0 -2
  237. package/dist/flows/NativeFlow.mjs.map +0 -1
  238. package/dist/flows/PopupFlow.cjs +0 -2
  239. package/dist/flows/PopupFlow.cjs.map +0 -1
  240. package/dist/flows/PopupFlow.d.ts +0 -36
  241. package/dist/flows/PopupFlow.mjs +0 -2
  242. package/dist/flows/PopupFlow.mjs.map +0 -1
  243. package/dist/flows/RedirectFlow.cjs +0 -2
  244. package/dist/flows/RedirectFlow.cjs.map +0 -1
  245. package/dist/flows/RedirectFlow.d.ts +0 -38
  246. package/dist/flows/RedirectFlow.mjs +0 -2
  247. package/dist/flows/RedirectFlow.mjs.map +0 -1
  248. package/dist/handlers/BaseFlowHandler.cjs +0 -2
  249. package/dist/handlers/BaseFlowHandler.cjs.map +0 -1
  250. package/dist/handlers/BaseFlowHandler.d.ts +0 -61
  251. package/dist/handlers/BaseFlowHandler.mjs +0 -2
  252. package/dist/handlers/BaseFlowHandler.mjs.map +0 -1
  253. package/dist/handlers/EmbeddedFlowHandler.cjs +0 -2
  254. package/dist/handlers/EmbeddedFlowHandler.cjs.map +0 -1
  255. package/dist/handlers/EmbeddedFlowHandler.d.ts +0 -28
  256. package/dist/handlers/EmbeddedFlowHandler.mjs +0 -2
  257. package/dist/handlers/EmbeddedFlowHandler.mjs.map +0 -1
  258. package/dist/handlers/NativeFlowHandler.cjs +0 -2
  259. package/dist/handlers/NativeFlowHandler.cjs.map +0 -1
  260. package/dist/handlers/NativeFlowHandler.d.ts +0 -31
  261. package/dist/handlers/NativeFlowHandler.mjs +0 -2
  262. package/dist/handlers/NativeFlowHandler.mjs.map +0 -1
  263. package/dist/storages/LocalStorage.cjs +0 -2
  264. package/dist/storages/LocalStorage.cjs.map +0 -1
  265. package/dist/storages/LocalStorage.d.ts +0 -23
  266. package/dist/storages/LocalStorage.mjs +0 -2
  267. package/dist/storages/LocalStorage.mjs.map +0 -1
  268. package/dist/storages/SessionStorage.cjs +0 -2
  269. package/dist/storages/SessionStorage.cjs.map +0 -1
  270. package/dist/storages/SessionStorage.d.ts +0 -23
  271. package/dist/storages/SessionStorage.mjs +0 -2
  272. package/dist/storages/SessionStorage.mjs.map +0 -1
  273. package/dist/types.cjs +0 -2
  274. package/dist/types.cjs.map +0 -1
  275. package/dist/types.d.ts +0 -1263
  276. package/dist/types.mjs +0 -2
  277. package/dist/types.mjs.map +0 -1
  278. package/dist/utils/HttpClient.cjs +0 -2
  279. package/dist/utils/HttpClient.cjs.map +0 -1
  280. package/dist/utils/HttpClient.d.ts +0 -4
  281. package/dist/utils/HttpClient.mjs +0 -2
  282. package/dist/utils/HttpClient.mjs.map +0 -1
  283. package/dist/utils/Logging.cjs +0 -2
  284. package/dist/utils/Logging.cjs.map +0 -1
  285. package/dist/utils/Logging.d.ts +0 -8
  286. package/dist/utils/Logging.mjs +0 -2
  287. package/dist/utils/Logging.mjs.map +0 -1
  288. package/dist/utils/Metadata.cjs +0 -2
  289. package/dist/utils/Metadata.cjs.map +0 -1
  290. package/dist/utils/Metadata.d.ts +0 -98
  291. package/dist/utils/Metadata.mjs +0 -2
  292. package/dist/utils/Metadata.mjs.map +0 -1
  293. package/dist/utils/Session.cjs +0 -2
  294. package/dist/utils/Session.cjs.map +0 -1
  295. package/dist/utils/Session.d.ts +0 -82
  296. package/dist/utils/Session.mjs +0 -2
  297. package/dist/utils/Session.mjs.map +0 -1
  298. package/dist/utils/State.cjs +0 -2
  299. package/dist/utils/State.cjs.map +0 -1
  300. package/dist/utils/State.d.ts +0 -43
  301. package/dist/utils/State.mjs +0 -2
  302. package/dist/utils/State.mjs.map +0 -1
  303. package/dist/utils/base64Url.cjs +0 -2
  304. package/dist/utils/base64Url.cjs.map +0 -1
  305. package/dist/utils/base64Url.d.ts +0 -27
  306. package/dist/utils/base64Url.mjs +0 -2
  307. package/dist/utils/base64Url.mjs.map +0 -1
  308. package/dist/utils/date.cjs +0 -2
  309. package/dist/utils/date.cjs.map +0 -1
  310. package/dist/utils/date.d.ts +0 -6
  311. package/dist/utils/date.mjs +0 -2
  312. package/dist/utils/date.mjs.map +0 -1
  313. package/dist/utils/handlers.cjs +0 -2
  314. package/dist/utils/handlers.cjs.map +0 -1
  315. package/dist/utils/handlers.d.ts +0 -35
  316. package/dist/utils/handlers.mjs +0 -2
  317. package/dist/utils/handlers.mjs.map +0 -1
  318. package/dist/utils/jwt.cjs +0 -2
  319. package/dist/utils/jwt.cjs.map +0 -1
  320. package/dist/utils/jwt.d.ts +0 -34
  321. package/dist/utils/jwt.mjs +0 -2
  322. package/dist/utils/jwt.mjs.map +0 -1
  323. package/dist/utils/object.cjs +0 -2
  324. package/dist/utils/object.cjs.map +0 -1
  325. package/dist/utils/object.d.ts +0 -1
  326. package/dist/utils/object.mjs +0 -2
  327. package/dist/utils/object.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.mjs","names":[],"sources":["../../src/flows/base.ts"],"sourcesContent":["import type { EventFunctions, ExtraRequestArgs, FlowState, SDK, SDKOptions, SessionData } from '../types/oidc';\nimport { buildEndSessionUrl, exchangeCode, getDiscoveryDocument, refreshToken, revokeToken, verifyIdToken } from '../utils/oidc';\nimport { loadSession, serializeSession, isSessionExpired } from '../utils/session';\nimport { ConfigurationError, NetworkError, ProtocolError, ServerError } from '../utils/errors';\n\n/**\n * Creates a base flow for the Strivacity SDK, providing common functionality for managing authentication sessions.\n *\n * @param flowState - The initial state of the flow, including session data and initialization status.\n * @param options - The SDK options, including issuer, clientId, redirectUri, scopes, and storage configuration.\n * @template URLHandlerParams - The type of additional request arguments for URL handling.\n * @returns An object implementing the SDK interface, with methods for initializing the flow, managing sessions, and handling authentication events.\n */\nexport function createBaseFlow<URLHandlerParams extends ExtraRequestArgs = ExtraRequestArgs>(flowState: FlowState, options: SDKOptions) {\n\tconst promises: Record<'init' | 'refresh' | 'revoke' | 'logout', Promise<void> | null> & { tokenExchange: Map<string, Promise<void>> } = {\n\t\tinit: null,\n\t\trefresh: null,\n\t\trevoke: null,\n\t\tlogout: null,\n\t\ttokenExchange: new Map(),\n\t};\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tconst eventCallbacks: Record<keyof EventFunctions, Set<(...args: Array<any>) => Promise<void> | void>> = {\n\t\taccessTokenExpired: new Set(),\n\t\tinit: new Set(),\n\t\tloggedIn: new Set(),\n\t\tsessionUpdated: new Set(),\n\t\tsessionCleared: new Set(),\n\t\tloginInitiated: new Set(),\n\t\tflowInitiated: new Set(),\n\t\tlogoutInitiated: new Set(),\n\t\tsessionLoaded: new Set(),\n\t\ttokenRefreshed: new Set(),\n\t\ttokenRefreshFailed: new Set(),\n\t\ttokenRevoked: new Set(),\n\t\ttokenRevokeFailed: new Set(),\n\t};\n\n\tfunction dispatchEvent<T extends keyof EventFunctions>(eventName: T, args: Parameters<EventFunctions[T]>): void {\n\t\tfor (const fn of eventCallbacks[eventName]) {\n\t\t\tvoid fn(...args);\n\t\t}\n\t}\n\n\tfunction subscribeToEvent<T extends keyof EventFunctions>(\n\t\teventName: T,\n\t\tcallbackFn: (...params: Parameters<EventFunctions[T]>) => Promise<void> | void,\n\t): ReturnType<SDK<URLHandlerParams>['subscribeToEvent']> {\n\t\teventCallbacks[eventName].add(callbackFn);\n\t\treturn { dispose: () => eventCallbacks[eventName].delete(callbackFn) };\n\t}\n\n\tfunction subscribeToAllEvents(callbackFn: (...params: Array<unknown>) => Promise<void> | void): ReturnType<SDK<URLHandlerParams>['subscribeToAllEvents']> {\n\t\tfor (const eventName in eventCallbacks) {\n\t\t\teventCallbacks[eventName as keyof EventFunctions].add(callbackFn);\n\t\t}\n\n\t\treturn {\n\t\t\tdispose: () => {\n\t\t\t\tfor (const eventName in eventCallbacks) {\n\t\t\t\t\teventCallbacks[eventName as keyof EventFunctions].delete(callbackFn);\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t}\n\n\tasync function getSession(): Promise<SessionData | null> {\n\t\tawait init();\n\n\t\treturn flowState.session;\n\t}\n\n\tasync function updateSession(newData: SessionData): ReturnType<SDK<URLHandlerParams>['updateSession']> {\n\t\tawait init();\n\n\t\t// NOTE: only unverified callers (e.g. direct API use) need validating here\n\t\tif (newData.id_token && !newData.claims) {\n\t\t\tnewData.claims = await verifyIdToken({ idToken: newData.id_token, options });\n\t\t}\n\n\t\tif (!options.serverSessionUri) {\n\t\t\tawait options.storage.set(options.storageTokenName, serializeSession(newData));\n\t\t}\n\n\t\tflowState.session = newData;\n\n\t\tdispatchEvent('sessionUpdated', [\n\t\t\t{\n\t\t\t\tidToken: flowState.session.id_token,\n\t\t\t\taccessToken: flowState.session.access_token,\n\t\t\t\trefreshToken: flowState.session.refresh_token,\n\t\t\t\tclaims: flowState.session.claims,\n\t\t\t},\n\t\t]);\n\t}\n\n\tasync function cleanupSession(): ReturnType<SDK<URLHandlerParams>['cleanupSession']> {\n\t\tawait init();\n\n\t\tif (!options.serverSessionUri) {\n\t\t\tawait options.storage.delete(options.storageTokenName);\n\t\t}\n\n\t\tflowState.session = null;\n\n\t\tdispatchEvent('sessionCleared', []);\n\t}\n\n\tasync function checkAuthentication(\n\t\tparams: { autoRefresh: boolean } = { autoRefresh: options.autoRefresh },\n\t): ReturnType<SDK<URLHandlerParams>['checkAuthentication']> {\n\t\tif (flowState.session?.access_token && !isSessionExpired(flowState.session)) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (params?.autoRefresh && flowState.session?.refresh_token) {\n\t\t\ttry {\n\t\t\t\tawait refresh();\n\t\t\t} catch {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn !isSessionExpired(flowState.session);\n\t}\n\n\tasync function init(): ReturnType<SDK<URLHandlerParams>['init']> {\n\t\tif (flowState.initialized) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (promises.init) {\n\t\t\treturn promises.init;\n\t\t}\n\n\t\tpromises.init = (async () => {\n\t\t\ttry {\n\t\t\t\tif (!options.issuer) {\n\t\t\t\t\tconst error = new ConfigurationError('Missing option: issuer');\n\t\t\t\t\toptions.logging?.error('Required option missing', error);\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\tif (!options.clientId) {\n\t\t\t\t\tconst error = new ConfigurationError('Missing option: clientId');\n\t\t\t\t\toptions.logging?.error('Required option missing', error);\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\tif (!options.redirectUri) {\n\t\t\t\t\tconst error = new ConfigurationError('Missing option: redirectUri');\n\t\t\t\t\toptions.logging?.error('Required option missing', error);\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\tif (options.scopes && !Array.isArray(options.scopes)) {\n\t\t\t\t\tconst error = new ConfigurationError('Invalid option: scopes');\n\t\t\t\t\toptions.logging?.error('Invalid option provided', error);\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\n\t\t\t\tif (!options.serverSessionUri) {\n\t\t\t\t\tflowState.session = loadSession(await options.storage.get(options.storageTokenName));\n\t\t\t\t}\n\n\t\t\t\tflowState.initialized = true;\n\n\t\t\t\tdispatchEvent('init', []);\n\t\t\t\toptions.logging?.debug('SDK initialized');\n\n\t\t\t\tif (!flowState.session && !options.serverSessionUri) {\n\t\t\t\t\toptions.logging?.debug('No session found in storage');\n\t\t\t\t}\n\n\t\t\t\tif (flowState.session?.access_token) {\n\t\t\t\t\tdispatchEvent('sessionLoaded', [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tidToken: flowState.session.id_token,\n\t\t\t\t\t\t\taccessToken: flowState.session.access_token,\n\t\t\t\t\t\t\trefreshToken: flowState.session.refresh_token,\n\t\t\t\t\t\t\tclaims: flowState.session.claims,\n\t\t\t\t\t\t},\n\t\t\t\t\t]);\n\t\t\t\t\toptions.logging?.debug('Session loaded from storage');\n\t\t\t\t}\n\n\t\t\t\tif (flowState.session?.access_token && isSessionExpired(flowState.session)) {\n\t\t\t\t\tdispatchEvent('accessTokenExpired', [{ accessToken: flowState.session.access_token, refreshToken: flowState.session.refresh_token }]);\n\t\t\t\t\toptions.logging?.debug('Access token has expired');\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tpromises.init = null;\n\t\t\t}\n\t\t})();\n\n\t\treturn promises.init;\n\t}\n\n\tasync function tokenExchange(params: Parameters<SDK<URLHandlerParams>['tokenExchange']>[0] = {}): ReturnType<SDK<URLHandlerParams>['tokenExchange']> {\n\t\tawait init();\n\n\t\tconst exchangeKey = params.state ?? '';\n\t\tconst inFlight = promises.tokenExchange.get(exchangeKey);\n\n\t\tif (inFlight) {\n\t\t\treturn inFlight;\n\t\t}\n\n\t\tconst exchangePromise = (async () => {\n\t\t\toptions.logging?.debug('Exchanging authorization code for tokens');\n\n\t\t\ttry {\n\t\t\t\tconst session = await exchangeCode({ params, options });\n\n\t\t\t\tif (!session.access_token) {\n\t\t\t\t\tthrow new ProtocolError('Missing access_token');\n\t\t\t\t}\n\n\t\t\t\tawait updateSession(session);\n\n\t\t\t\toptions.logging?.debug('Token exchange successful');\n\n\t\t\t\tdispatchEvent('loggedIn', [\n\t\t\t\t\t{ idToken: session.id_token, accessToken: session.access_token, refreshToken: session.refresh_token, claims: session.claims },\n\t\t\t\t]);\n\n\t\t\t\tif (options.logging) {\n\t\t\t\t\toptions.logging.xEventId = undefined;\n\t\t\t\t\toptions.logging.info('Login successful');\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\toptions.logging?.error('Token exchange failed', error);\n\t\t\t\tthrow error;\n\t\t\t} finally {\n\t\t\t\tpromises.tokenExchange.delete(exchangeKey);\n\t\t\t}\n\t\t})();\n\n\t\tpromises.tokenExchange.set(exchangeKey, exchangePromise);\n\n\t\treturn exchangePromise;\n\t}\n\n\tasync function handleCallback(url?: string | URL): ReturnType<SDK<URLHandlerParams>['handleCallback']> {\n\t\tawait init();\n\n\t\tconst callbackUrl = url ?? globalThis.window?.location.href;\n\t\tconst params = (await options.callbackHandler(callbackUrl, options.responseMode)) as Record<string, string>;\n\n\t\tawait tokenExchange(params);\n\t}\n\n\tasync function refresh(): ReturnType<SDK<URLHandlerParams>['refresh']> {\n\t\tawait init();\n\n\t\tif (promises.refresh) {\n\t\t\treturn promises.refresh;\n\t\t}\n\n\t\tif (promises.revoke) {\n\t\t\ttry {\n\t\t\t\tawait promises.revoke;\n\t\t\t} catch {}\n\t\t}\n\n\t\tif (promises.logout) {\n\t\t\ttry {\n\t\t\t\tawait promises.logout;\n\t\t\t} catch {}\n\t\t}\n\n\t\toptions.logging?.debug('Attempting to refresh session');\n\n\t\tif (typeof flowState.session?.refresh_token !== 'string') {\n\t\t\toptions.logging?.debug('Refresh called without refresh token');\n\t\t\treturn;\n\t\t}\n\n\t\tpromises.refresh = (async () => {\n\t\t\ttry {\n\t\t\t\tconst session = await refreshToken({ refreshToken: flowState.session!.refresh_token!, options, expectedSub: flowState.session?.claims?.sub });\n\t\t\t\tawait updateSession(session);\n\n\t\t\t\tdispatchEvent('tokenRefreshed', [\n\t\t\t\t\t{\n\t\t\t\t\t\tidToken: flowState.session?.id_token,\n\t\t\t\t\t\taccessToken: flowState.session?.access_token,\n\t\t\t\t\t\trefreshToken: flowState.session?.refresh_token,\n\t\t\t\t\t\tclaims: flowState.session?.claims,\n\t\t\t\t\t},\n\t\t\t\t]);\n\t\t\t\toptions.logging?.debug('Session refresh successful');\n\t\t\t} catch (error) {\n\t\t\t\tconst failedRefreshToken = flowState.session?.refresh_token;\n\n\t\t\t\t// NOTE: Transient Network/Server failures must not destroy a session that could still be refreshed later.\n\t\t\t\tif (!(error instanceof NetworkError) && !(error instanceof ServerError)) {\n\t\t\t\t\tawait cleanupSession();\n\t\t\t\t}\n\n\t\t\t\tdispatchEvent('tokenRefreshFailed', [{ refreshToken: failedRefreshToken }]);\n\t\t\t\toptions.logging?.error('Session refresh failed', error);\n\n\t\t\t\tthrow error;\n\t\t\t} finally {\n\t\t\t\tpromises.refresh = null;\n\t\t\t}\n\t\t})();\n\n\t\treturn promises.refresh;\n\t}\n\n\tasync function revoke(): ReturnType<SDK<URLHandlerParams>['revoke']> {\n\t\tawait init();\n\n\t\tif (promises.revoke) {\n\t\t\treturn promises.revoke;\n\t\t}\n\n\t\tif (promises.refresh) {\n\t\t\ttry {\n\t\t\t\tawait promises.refresh;\n\t\t\t} catch {}\n\t\t}\n\n\t\tif (promises.logout) {\n\t\t\ttry {\n\t\t\t\tawait promises.logout;\n\t\t\t} catch {}\n\t\t}\n\n\t\tpromises.revoke = (async () => {\n\t\t\ttry {\n\t\t\t\tif (flowState.session?.refresh_token) {\n\t\t\t\t\toptions.logging?.debug('Attempting to revoke refresh token');\n\t\t\t\t} else if (flowState.session?.access_token) {\n\t\t\t\t\toptions.logging?.debug('Attempting to revoke access token');\n\t\t\t\t}\n\n\t\t\t\t// NOTE: Cleanup session before revocation\n\t\t\t\tconst currentSession = flowState.session;\n\t\t\t\tawait cleanupSession();\n\n\t\t\t\tif (!currentSession?.access_token && !currentSession?.refresh_token) {\n\t\t\t\t\toptions.logging?.debug('Revoke called without session');\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst tokenTypeHint = currentSession.refresh_token ? 'refresh_token' : 'access_token';\n\t\t\t\tconst token = (tokenTypeHint === 'refresh_token' ? currentSession.refresh_token : currentSession.access_token)!;\n\n\t\t\t\ttry {\n\t\t\t\t\tawait revokeToken({ tokenTypeHint, token, options });\n\n\t\t\t\t\tif (tokenTypeHint === 'refresh_token') {\n\t\t\t\t\t\tdispatchEvent('tokenRevoked', [{ token: currentSession.refresh_token, tokenTypeHint: 'refresh_token' }]);\n\t\t\t\t\t\toptions.logging?.info('Refresh token successfully revoked');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdispatchEvent('tokenRevoked', [{ token: currentSession.access_token, tokenTypeHint: 'access_token' }]);\n\t\t\t\t\t\toptions.logging?.info('Access token successfully revoked');\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (tokenTypeHint === 'refresh_token') {\n\t\t\t\t\t\tdispatchEvent('tokenRevokeFailed', [{ token: currentSession.refresh_token, tokenTypeHint: 'refresh_token' }]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdispatchEvent('tokenRevokeFailed', [{ token: currentSession.access_token, tokenTypeHint: 'access_token' }]);\n\t\t\t\t\t}\n\n\t\t\t\t\toptions.logging?.error('Token revocation failed', error);\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tpromises.revoke = null;\n\t\t\t}\n\t\t})();\n\n\t\treturn promises.revoke;\n\t}\n\n\tasync function logout(params?: Parameters<SDK<URLHandlerParams>['logout']>[0]): ReturnType<SDK<URLHandlerParams>['logout']> {\n\t\tawait init();\n\n\t\tif (promises.logout) {\n\t\t\treturn promises.logout;\n\t\t}\n\n\t\tif (promises.revoke) {\n\t\t\ttry {\n\t\t\t\tawait promises.revoke;\n\t\t\t} catch {}\n\t\t}\n\n\t\tif (promises.refresh) {\n\t\t\ttry {\n\t\t\t\tawait promises.refresh;\n\t\t\t} catch {}\n\t\t}\n\n\t\tpromises.logout = (async () => {\n\t\t\ttry {\n\t\t\t\toptions.logging?.debug('Attempting to logout');\n\n\t\t\t\t// NOTE: Cleanup session before logout\n\t\t\t\tconst currentSession = flowState.session;\n\t\t\t\tawait cleanupSession();\n\n\t\t\t\tdispatchEvent('logoutInitiated', [{ idToken: currentSession?.id_token, claims: currentSession?.claims }]);\n\t\t\t\toptions.logging?.debug('Logout initiated');\n\n\t\t\t\tif (!currentSession?.id_token) {\n\t\t\t\t\toptions.logging?.debug('Logout called without id token');\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tconst metadata = await getDiscoveryDocument(options);\n\t\t\t\t\tconst logoutUrl = buildEndSessionUrl({\n\t\t\t\t\t\turl: metadata.end_session_endpoint,\n\t\t\t\t\t\tidToken: currentSession.id_token,\n\t\t\t\t\t\tpostLogoutRedirectUri: params?.postLogoutRedirectUri,\n\t\t\t\t\t});\n\n\t\t\t\t\tawait options.urlHandler(logoutUrl, params);\n\t\t\t\t} catch (error) {\n\t\t\t\t\toptions.logging?.error('Unable to redirect to the end-session endpoint', error);\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tpromises.logout = null;\n\t\t\t}\n\t\t})();\n\n\t\treturn promises.logout;\n\t}\n\n\treturn {\n\t\tdispatchEvent,\n\t\tsubscribeToEvent,\n\t\tsubscribeToAllEvents,\n\t\tgetSession,\n\t\tupdateSession,\n\t\tcleanupSession,\n\t\tcheckAuthentication,\n\t\tinit,\n\t\ttokenExchange,\n\t\thandleCallback,\n\t\trefresh,\n\t\trevoke,\n\t\tlogout,\n\t};\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../utils/session.cjs"),t=require("../assets/oidc.cjs"),n=require("./base.cjs"),r=require("../handlers/embedded.cjs");var i;function a(e){globalThis.sty??={},i=e,!globalThis.sty.oidcService&&Object.defineProperty(globalThis.sty,"oidcService",{value:new Proxy({},{get:(e,t)=>Reflect.get(i,t,i),has:(e,t)=>Reflect.has(i,t),ownKeys:()=>Reflect.ownKeys(i),getOwnPropertyDescriptor:(e,t)=>Reflect.getOwnPropertyDescriptor(i,t),set:()=>!1,defineProperty:()=>!1,deleteProperty:()=>!1,setPrototypeOf:()=>!1}),writable:!1,configurable:!1,enumerable:!0})}function o(i){let o=t.f(),s=t.m(i),c=n.createBaseFlow(o,s),{dispatchEvent:l,...u}=c;async function d(e={}){return await c.init(),r.startSessionHandler({base:c,options:s,flowState:o,params:e})}async function f(e){return await c.init(),r.finalizeSessionHandler({base:c,options:s,flowState:o,url:e})}function p(e={}){return{get shortAppId(){return o.shortAppId},set shortAppId(e){o.shortAppId=e},get sessionId(){return o.sessionId},set sessionId(e){o.sessionId=e},get language(){return o.language},set language(e){o.language=e},startSession:async(t={})=>d({...e,...t}),finalizeSession:f}}function m(e={}){return p({...e,prompt:`create`})}async function h(e){await c.init();let n=new URL(e??globalThis.window?.location.href);s.logging?.debug(`Attempting entry request`);try{let e=new URL(`/provider/flow/entry`,s.issuer),r=await t.o({url:e,params:n.searchParams,sdkMode:`web-embedded`,options:s});return s.logging?.debug(`Entry request successful - ${JSON.stringify(r)}`),r}catch(e){throw s.logging?.error(`Entry request failed`,e),e}}let g={...u,get options(){return s},get initialized(){return o.initialized},get storage(){return s.storage},get httpClient(){return s.httpClient},get logging(){return s.logging},get shortAppId(){return o.shortAppId},set shortAppId(e){o.shortAppId=e},get sessionId(){return o.sessionId},set sessionId(e){o.sessionId=e},get session(){return o.session},set session(e){o.session=e},get language(){return o.language},set language(e){o.language=e},get isAuthenticated(){return c.checkAuthentication()},get isAuthenticatedSync(){return!!o.session&&!e.isSessionExpired(o.session)},get accessToken(){return o.session?.access_token??null},get accessTokenExpired(){return!o.session||e.isSessionExpired(o.session)},get accessTokenExpirationDate(){return o.session?.expires_at??null},get refreshToken(){return o.session?.refresh_token??null},get idToken(){return o.session?.id_token??null},get idTokenClaims(){return o.session?.claims??null},startSession:d,finalizeSession:f,login:p,register:m,entry:h};return s.lazyLoad||g.init(),globalThis.window&&a(g),g}exports.createEmbeddedFlow=o;
2
+ //# sourceMappingURL=embedded.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedded.cjs","names":[],"sources":["../../src/flows/embedded.ts"],"sourcesContent":["import type { SDKInitConfig } from '../types/oidc';\nimport type { EmbeddedFlow, EmbeddedParams } from '../types/embedded';\nimport { getDefaultFlowState, getSDKOptions, fetchFlowEntry } from '../utils/oidc';\nimport { isSessionExpired } from '../utils/session';\nimport { startSessionHandler, finalizeSessionHandler } from '../handlers/embedded';\nimport { createBaseFlow } from './base';\n\nlet activeFlow: EmbeddedFlow | undefined;\n\n/**\n * Publishes the embedded flow on `globalThis.sty.oidcService` behind a tamper-resistant proxy.\n *\n * The proxy is created only once per page and locked down with `writable: false, configurable: false`,\n * so no other script can replace it or redefine/override its members (e.g. hijack `login`) to exfiltrate\n * credentials or tokens. Re-initialization (calling `createEmbeddedFlow` again) still works, since reads\n * are always forwarded to the current `activeFlow` closure variable.\n *\n * @param flow - The embedded flow instance to expose.\n */\nfunction publishGlobalBridge(flow: EmbeddedFlow): void {\n\tglobalThis.sty ??= {};\n\tactiveFlow = flow;\n\n\tif (globalThis.sty.oidcService) {\n\t\treturn;\n\t}\n\n\tObject.defineProperty(globalThis.sty, 'oidcService', {\n\t\tvalue: new Proxy({} as EmbeddedFlow, {\n\t\t\tget: (_target, prop) => Reflect.get(activeFlow as object, prop, activeFlow),\n\t\t\thas: (_target, prop) => Reflect.has(activeFlow as object, prop),\n\t\t\townKeys: () => Reflect.ownKeys(activeFlow as object),\n\t\t\tgetOwnPropertyDescriptor: (_target, prop) => Reflect.getOwnPropertyDescriptor(activeFlow as object, prop),\n\t\t\tset: () => false,\n\t\t\tdefineProperty: () => false,\n\t\t\tdeleteProperty: () => false,\n\t\t\tsetPrototypeOf: () => false,\n\t\t}),\n\t\twritable: false,\n\t\tconfigurable: false,\n\t\tenumerable: true,\n\t});\n}\n\n/**\n * Creates an embedded flow for the Strivacity SDK, providing functionality for managing authentication sessions in an embedded context.\n *\n * @param initConfig - The initial configuration for the SDK, including issuer, clientId, redirectUri, and other options.\n * @returns An object implementing the EmbeddedFlow interface, with methods for starting and finalizing sessions, as well as login and registration flows.\n */\nexport function createEmbeddedFlow(initConfig: SDKInitConfig): EmbeddedFlow {\n\tconst flowState = getDefaultFlowState();\n\tconst options = getSDKOptions(initConfig);\n\tconst base = createBaseFlow(flowState, options);\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tconst { dispatchEvent: _, ...exposedBase } = base;\n\n\tasync function startSession(params: EmbeddedParams = {}): ReturnType<EmbeddedFlow['startSession']> {\n\t\tawait base.init();\n\n\t\treturn startSessionHandler({ base, options, flowState, params });\n\t}\n\n\tasync function finalizeSession(url: string | URL): ReturnType<EmbeddedFlow['finalizeSession']> {\n\t\tawait base.init();\n\n\t\treturn finalizeSessionHandler({ base, options, flowState, url });\n\t}\n\n\tfunction login(params: EmbeddedParams = {}): ReturnType<EmbeddedFlow['login']> {\n\t\treturn {\n\t\t\t// NOTE: For backward compatibility\n\t\t\tget shortAppId() {\n\t\t\t\treturn flowState.shortAppId;\n\t\t\t},\n\t\t\tset shortAppId(value) {\n\t\t\t\tflowState.shortAppId = value;\n\t\t\t},\n\t\t\tget sessionId() {\n\t\t\t\treturn flowState.sessionId;\n\t\t\t},\n\t\t\tset sessionId(value) {\n\t\t\t\tflowState.sessionId = value;\n\t\t\t},\n\t\t\tget language() {\n\t\t\t\treturn flowState.language;\n\t\t\t},\n\t\t\tset language(lang) {\n\t\t\t\tflowState.language = lang;\n\t\t\t},\n\t\t\tstartSession: async (loginParams: EmbeddedParams = {}) => {\n\t\t\t\treturn startSession({ ...params, ...loginParams });\n\t\t\t},\n\t\t\tfinalizeSession,\n\t\t};\n\t}\n\n\tfunction register(params: EmbeddedParams = {}): ReturnType<EmbeddedFlow['register']> {\n\t\treturn login({ ...params, prompt: 'create' });\n\t}\n\n\tasync function entry(url?: string | URL): ReturnType<EmbeddedFlow['entry']> {\n\t\tawait base.init();\n\n\t\tconst targetUrl = new URL(url ?? globalThis.window?.location.href);\n\n\t\toptions.logging?.debug('Attempting entry request');\n\n\t\ttry {\n\t\t\tconst url = new URL('/provider/flow/entry', options.issuer);\n\t\t\tconst data = await fetchFlowEntry({ url, params: targetUrl.searchParams, sdkMode: 'web-embedded', options });\n\n\t\t\toptions.logging?.debug(`Entry request successful - ${JSON.stringify(data)}`);\n\n\t\t\treturn data;\n\t\t} catch (error) {\n\t\t\toptions.logging?.error('Entry request failed', error);\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tconst flow = {\n\t\t...exposedBase,\n\t\tget options() {\n\t\t\treturn options;\n\t\t},\n\t\tget initialized() {\n\t\t\treturn flowState.initialized;\n\t\t},\n\t\tget storage() {\n\t\t\treturn options.storage;\n\t\t},\n\t\tget httpClient() {\n\t\t\treturn options.httpClient;\n\t\t},\n\t\tget logging() {\n\t\t\treturn options.logging;\n\t\t},\n\t\tget shortAppId() {\n\t\t\treturn flowState.shortAppId;\n\t\t},\n\t\tset shortAppId(shortAppId: string | null) {\n\t\t\tflowState.shortAppId = shortAppId;\n\t\t},\n\t\tget sessionId() {\n\t\t\treturn flowState.sessionId;\n\t\t},\n\t\tset sessionId(sessionId: string | null) {\n\t\t\tflowState.sessionId = sessionId;\n\t\t},\n\t\tget session() {\n\t\t\treturn flowState.session;\n\t\t},\n\t\tset session(session) {\n\t\t\tflowState.session = session;\n\t\t},\n\t\tget language() {\n\t\t\treturn flowState.language;\n\t\t},\n\t\tset language(lang) {\n\t\t\tflowState.language = lang;\n\t\t},\n\t\tget isAuthenticated() {\n\t\t\treturn base.checkAuthentication();\n\t\t},\n\t\tget isAuthenticatedSync() {\n\t\t\treturn !!flowState.session && !isSessionExpired(flowState.session);\n\t\t},\n\t\tget accessToken() {\n\t\t\treturn flowState.session?.access_token ?? null;\n\t\t},\n\t\tget accessTokenExpired() {\n\t\t\treturn !flowState.session || isSessionExpired(flowState.session);\n\t\t},\n\t\tget accessTokenExpirationDate() {\n\t\t\treturn flowState.session?.expires_at ?? null;\n\t\t},\n\t\tget refreshToken() {\n\t\t\treturn flowState.session?.refresh_token ?? null;\n\t\t},\n\t\tget idToken() {\n\t\t\treturn flowState.session?.id_token ?? null;\n\t\t},\n\t\tget idTokenClaims() {\n\t\t\treturn flowState.session?.claims ?? null;\n\t\t},\n\t\tstartSession,\n\t\tfinalizeSession,\n\t\tlogin,\n\t\tregister,\n\t\tentry,\n\t} satisfies EmbeddedFlow;\n\n\tif (!options.lazyLoad) {\n\t\tvoid flow.init();\n\t}\n\n\tif (globalThis.window) {\n\t\tpublishGlobalBridge(flow);\n\t}\n\n\treturn flow;\n}\n"],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { SDKInitConfig } from '../types/oidc';
2
+ import { EmbeddedFlow } from '../types/embedded';
3
+ /**
4
+ * Creates an embedded flow for the Strivacity SDK, providing functionality for managing authentication sessions in an embedded context.
5
+ *
6
+ * @param initConfig - The initial configuration for the SDK, including issuer, clientId, redirectUri, and other options.
7
+ * @returns An object implementing the EmbeddedFlow interface, with methods for starting and finalizing sessions, as well as login and registration flows.
8
+ */
9
+ export declare function createEmbeddedFlow(initConfig: SDKInitConfig): EmbeddedFlow;
@@ -0,0 +1,2 @@
1
+ import{isSessionExpired as e}from"../utils/session.mjs";import{f as t,m as n,o as r}from"../assets/oidc.mjs";import{createBaseFlow as i}from"./base.mjs";import{finalizeSessionHandler as a,startSessionHandler as o}from"../handlers/embedded.mjs";var s;function c(e){globalThis.sty??={},s=e,!globalThis.sty.oidcService&&Object.defineProperty(globalThis.sty,"oidcService",{value:new Proxy({},{get:(e,t)=>Reflect.get(s,t,s),has:(e,t)=>Reflect.has(s,t),ownKeys:()=>Reflect.ownKeys(s),getOwnPropertyDescriptor:(e,t)=>Reflect.getOwnPropertyDescriptor(s,t),set:()=>!1,defineProperty:()=>!1,deleteProperty:()=>!1,setPrototypeOf:()=>!1}),writable:!1,configurable:!1,enumerable:!0})}function l(s){let l=t(),u=n(s),d=i(l,u),{dispatchEvent:f,...p}=d;async function m(e={}){return await d.init(),o({base:d,options:u,flowState:l,params:e})}async function h(e){return await d.init(),a({base:d,options:u,flowState:l,url:e})}function g(e={}){return{get shortAppId(){return l.shortAppId},set shortAppId(e){l.shortAppId=e},get sessionId(){return l.sessionId},set sessionId(e){l.sessionId=e},get language(){return l.language},set language(e){l.language=e},startSession:async(t={})=>m({...e,...t}),finalizeSession:h}}function _(e={}){return g({...e,prompt:`create`})}async function v(e){await d.init();let t=new URL(e??globalThis.window?.location.href);u.logging?.debug(`Attempting entry request`);try{let e=new URL(`/provider/flow/entry`,u.issuer),n=await r({url:e,params:t.searchParams,sdkMode:`web-embedded`,options:u});return u.logging?.debug(`Entry request successful - ${JSON.stringify(n)}`),n}catch(e){throw u.logging?.error(`Entry request failed`,e),e}}let y={...p,get options(){return u},get initialized(){return l.initialized},get storage(){return u.storage},get httpClient(){return u.httpClient},get logging(){return u.logging},get shortAppId(){return l.shortAppId},set shortAppId(e){l.shortAppId=e},get sessionId(){return l.sessionId},set sessionId(e){l.sessionId=e},get session(){return l.session},set session(e){l.session=e},get language(){return l.language},set language(e){l.language=e},get isAuthenticated(){return d.checkAuthentication()},get isAuthenticatedSync(){return!!l.session&&!e(l.session)},get accessToken(){return l.session?.access_token??null},get accessTokenExpired(){return!l.session||e(l.session)},get accessTokenExpirationDate(){return l.session?.expires_at??null},get refreshToken(){return l.session?.refresh_token??null},get idToken(){return l.session?.id_token??null},get idTokenClaims(){return l.session?.claims??null},startSession:m,finalizeSession:h,login:g,register:_,entry:v};return u.lazyLoad||y.init(),globalThis.window&&c(y),y}export{l as createEmbeddedFlow};
2
+ //# sourceMappingURL=embedded.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedded.mjs","names":[],"sources":["../../src/flows/embedded.ts"],"sourcesContent":["import type { SDKInitConfig } from '../types/oidc';\nimport type { EmbeddedFlow, EmbeddedParams } from '../types/embedded';\nimport { getDefaultFlowState, getSDKOptions, fetchFlowEntry } from '../utils/oidc';\nimport { isSessionExpired } from '../utils/session';\nimport { startSessionHandler, finalizeSessionHandler } from '../handlers/embedded';\nimport { createBaseFlow } from './base';\n\nlet activeFlow: EmbeddedFlow | undefined;\n\n/**\n * Publishes the embedded flow on `globalThis.sty.oidcService` behind a tamper-resistant proxy.\n *\n * The proxy is created only once per page and locked down with `writable: false, configurable: false`,\n * so no other script can replace it or redefine/override its members (e.g. hijack `login`) to exfiltrate\n * credentials or tokens. Re-initialization (calling `createEmbeddedFlow` again) still works, since reads\n * are always forwarded to the current `activeFlow` closure variable.\n *\n * @param flow - The embedded flow instance to expose.\n */\nfunction publishGlobalBridge(flow: EmbeddedFlow): void {\n\tglobalThis.sty ??= {};\n\tactiveFlow = flow;\n\n\tif (globalThis.sty.oidcService) {\n\t\treturn;\n\t}\n\n\tObject.defineProperty(globalThis.sty, 'oidcService', {\n\t\tvalue: new Proxy({} as EmbeddedFlow, {\n\t\t\tget: (_target, prop) => Reflect.get(activeFlow as object, prop, activeFlow),\n\t\t\thas: (_target, prop) => Reflect.has(activeFlow as object, prop),\n\t\t\townKeys: () => Reflect.ownKeys(activeFlow as object),\n\t\t\tgetOwnPropertyDescriptor: (_target, prop) => Reflect.getOwnPropertyDescriptor(activeFlow as object, prop),\n\t\t\tset: () => false,\n\t\t\tdefineProperty: () => false,\n\t\t\tdeleteProperty: () => false,\n\t\t\tsetPrototypeOf: () => false,\n\t\t}),\n\t\twritable: false,\n\t\tconfigurable: false,\n\t\tenumerable: true,\n\t});\n}\n\n/**\n * Creates an embedded flow for the Strivacity SDK, providing functionality for managing authentication sessions in an embedded context.\n *\n * @param initConfig - The initial configuration for the SDK, including issuer, clientId, redirectUri, and other options.\n * @returns An object implementing the EmbeddedFlow interface, with methods for starting and finalizing sessions, as well as login and registration flows.\n */\nexport function createEmbeddedFlow(initConfig: SDKInitConfig): EmbeddedFlow {\n\tconst flowState = getDefaultFlowState();\n\tconst options = getSDKOptions(initConfig);\n\tconst base = createBaseFlow(flowState, options);\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tconst { dispatchEvent: _, ...exposedBase } = base;\n\n\tasync function startSession(params: EmbeddedParams = {}): ReturnType<EmbeddedFlow['startSession']> {\n\t\tawait base.init();\n\n\t\treturn startSessionHandler({ base, options, flowState, params });\n\t}\n\n\tasync function finalizeSession(url: string | URL): ReturnType<EmbeddedFlow['finalizeSession']> {\n\t\tawait base.init();\n\n\t\treturn finalizeSessionHandler({ base, options, flowState, url });\n\t}\n\n\tfunction login(params: EmbeddedParams = {}): ReturnType<EmbeddedFlow['login']> {\n\t\treturn {\n\t\t\t// NOTE: For backward compatibility\n\t\t\tget shortAppId() {\n\t\t\t\treturn flowState.shortAppId;\n\t\t\t},\n\t\t\tset shortAppId(value) {\n\t\t\t\tflowState.shortAppId = value;\n\t\t\t},\n\t\t\tget sessionId() {\n\t\t\t\treturn flowState.sessionId;\n\t\t\t},\n\t\t\tset sessionId(value) {\n\t\t\t\tflowState.sessionId = value;\n\t\t\t},\n\t\t\tget language() {\n\t\t\t\treturn flowState.language;\n\t\t\t},\n\t\t\tset language(lang) {\n\t\t\t\tflowState.language = lang;\n\t\t\t},\n\t\t\tstartSession: async (loginParams: EmbeddedParams = {}) => {\n\t\t\t\treturn startSession({ ...params, ...loginParams });\n\t\t\t},\n\t\t\tfinalizeSession,\n\t\t};\n\t}\n\n\tfunction register(params: EmbeddedParams = {}): ReturnType<EmbeddedFlow['register']> {\n\t\treturn login({ ...params, prompt: 'create' });\n\t}\n\n\tasync function entry(url?: string | URL): ReturnType<EmbeddedFlow['entry']> {\n\t\tawait base.init();\n\n\t\tconst targetUrl = new URL(url ?? globalThis.window?.location.href);\n\n\t\toptions.logging?.debug('Attempting entry request');\n\n\t\ttry {\n\t\t\tconst url = new URL('/provider/flow/entry', options.issuer);\n\t\t\tconst data = await fetchFlowEntry({ url, params: targetUrl.searchParams, sdkMode: 'web-embedded', options });\n\n\t\t\toptions.logging?.debug(`Entry request successful - ${JSON.stringify(data)}`);\n\n\t\t\treturn data;\n\t\t} catch (error) {\n\t\t\toptions.logging?.error('Entry request failed', error);\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tconst flow = {\n\t\t...exposedBase,\n\t\tget options() {\n\t\t\treturn options;\n\t\t},\n\t\tget initialized() {\n\t\t\treturn flowState.initialized;\n\t\t},\n\t\tget storage() {\n\t\t\treturn options.storage;\n\t\t},\n\t\tget httpClient() {\n\t\t\treturn options.httpClient;\n\t\t},\n\t\tget logging() {\n\t\t\treturn options.logging;\n\t\t},\n\t\tget shortAppId() {\n\t\t\treturn flowState.shortAppId;\n\t\t},\n\t\tset shortAppId(shortAppId: string | null) {\n\t\t\tflowState.shortAppId = shortAppId;\n\t\t},\n\t\tget sessionId() {\n\t\t\treturn flowState.sessionId;\n\t\t},\n\t\tset sessionId(sessionId: string | null) {\n\t\t\tflowState.sessionId = sessionId;\n\t\t},\n\t\tget session() {\n\t\t\treturn flowState.session;\n\t\t},\n\t\tset session(session) {\n\t\t\tflowState.session = session;\n\t\t},\n\t\tget language() {\n\t\t\treturn flowState.language;\n\t\t},\n\t\tset language(lang) {\n\t\t\tflowState.language = lang;\n\t\t},\n\t\tget isAuthenticated() {\n\t\t\treturn base.checkAuthentication();\n\t\t},\n\t\tget isAuthenticatedSync() {\n\t\t\treturn !!flowState.session && !isSessionExpired(flowState.session);\n\t\t},\n\t\tget accessToken() {\n\t\t\treturn flowState.session?.access_token ?? null;\n\t\t},\n\t\tget accessTokenExpired() {\n\t\t\treturn !flowState.session || isSessionExpired(flowState.session);\n\t\t},\n\t\tget accessTokenExpirationDate() {\n\t\t\treturn flowState.session?.expires_at ?? null;\n\t\t},\n\t\tget refreshToken() {\n\t\t\treturn flowState.session?.refresh_token ?? null;\n\t\t},\n\t\tget idToken() {\n\t\t\treturn flowState.session?.id_token ?? null;\n\t\t},\n\t\tget idTokenClaims() {\n\t\t\treturn flowState.session?.claims ?? null;\n\t\t},\n\t\tstartSession,\n\t\tfinalizeSession,\n\t\tlogin,\n\t\tregister,\n\t\tentry,\n\t} satisfies EmbeddedFlow;\n\n\tif (!options.lazyLoad) {\n\t\tvoid flow.init();\n\t}\n\n\tif (globalThis.window) {\n\t\tpublishGlobalBridge(flow);\n\t}\n\n\treturn flow;\n}\n"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./base.cjs"),t=require("./redirect.cjs"),n=require("./popup.cjs"),r=require("./embedded.cjs"),i=require("./native.cjs");exports.createBaseFlow=e.createBaseFlow,exports.createEmbeddedFlow=r.createEmbeddedFlow,exports.createNativeFlow=i.createNativeFlow,exports.createPopupFlow=n.createPopupFlow,exports.createRedirectFlow=t.createRedirectFlow;
@@ -0,0 +1,5 @@
1
+ export * from './base';
2
+ export * from './embedded';
3
+ export * from './native';
4
+ export * from './popup';
5
+ export * from './redirect';
@@ -0,0 +1 @@
1
+ import{createBaseFlow as e}from"./base.mjs";import{createRedirectFlow as t}from"./redirect.mjs";import{createPopupFlow as n}from"./popup.mjs";import{createEmbeddedFlow as r}from"./embedded.mjs";import{createNativeFlow as i}from"./native.mjs";export{e as createBaseFlow,r as createEmbeddedFlow,i as createNativeFlow,n as createPopupFlow,t as createRedirectFlow};
@@ -0,0 +1,2 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../utils/session.cjs"),t=require("../assets/oidc.cjs"),n=require("./base.cjs"),r=require("../handlers/native.cjs");function i(i){let a=t.f(),o=t.m(i),s=n.createBaseFlow(a,o),{dispatchEvent:c,...l}=s;async function u(e,t={}){return await s.init(),r.submitFormHandler({base:s,options:o,flowState:a,formId:e,body:t})}async function d(e={}){return await s.init(),r.startSessionHandler({base:s,options:o,flowState:a,params:e})}async function f(e){return await s.init(),r.finalizeSessionHandler({base:s,options:o,flowState:a,url:e})}function p(e={}){return{get shortAppId(){return a.shortAppId},set shortAppId(e){a.shortAppId=e},get sessionId(){return a.sessionId},set sessionId(e){a.sessionId=e},get language(){return a.language},set language(e){a.language=e},startSession:async(t={})=>d({...e,...t}),finalizeSession:f,submitForm:u}}function m(e={}){return p({...e,prompt:`create`})}async function h(e){await s.init();let n=new URL(e??globalThis.window?.location.href);o.logging?.debug(`Attempting entry flow`);try{let e=new URL(`/provider/flow/entry`,o.issuer),r=await t.o({url:e,params:n.searchParams,sdkMode:`web`,options:o});return o.logging?.debug(`Entry request successful - ${JSON.stringify(r)}`),r}catch(e){throw o.logging?.error(`Entry request failed`,e),e}}let g={...l,get options(){return o},get initialized(){return a.initialized},get storage(){return o.storage},get httpClient(){return o.httpClient},get logging(){return o.logging},get shortAppId(){return a.shortAppId},set shortAppId(e){a.shortAppId=e},get sessionId(){return a.sessionId},set sessionId(e){a.sessionId=e},get session(){return a.session},set session(e){a.session=e},get language(){return a.language},set language(e){a.language=e},get isAuthenticated(){return s.checkAuthentication()},get isAuthenticatedSync(){return!!a.session&&!e.isSessionExpired(a.session)},get accessToken(){return a.session?.access_token??null},get accessTokenExpired(){return!a.session||e.isSessionExpired(a.session)},get accessTokenExpirationDate(){return a.session?.expires_at??null},get refreshToken(){return a.session?.refresh_token??null},get idToken(){return a.session?.id_token??null},get idTokenClaims(){return a.session?.claims??null},startSession:d,finalizeSession:f,submitForm:u,login:p,register:m,entry:h};return o.lazyLoad||g.init(),g}exports.createNativeFlow=i;
2
+ //# sourceMappingURL=native.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native.cjs","names":[],"sources":["../../src/flows/native.ts"],"sourcesContent":["import type { SDKInitConfig } from '../types/oidc';\nimport type { NativeFlow, NativeParams } from '../types/native';\nimport { getDefaultFlowState, getSDKOptions, fetchFlowEntry } from '../utils/oidc';\nimport { isSessionExpired } from '../utils/session';\nimport { startSessionHandler, finalizeSessionHandler, submitFormHandler } from '../handlers/native';\nimport { createBaseFlow } from './base';\n\n/**\n * Creates a native flow for the Strivacity SDK, providing functionality for managing authentication sessions in a native context.\n *\n * @param initConfig - The initial configuration for the SDK, including issuer, clientId, redirectUri, and other options.\n * @returns An object implementing the NativeFlow interface, with methods for starting and finalizing sessions, as well as login and registration flows.\n */\nexport function createNativeFlow(initConfig: SDKInitConfig): NativeFlow {\n\tconst flowState = getDefaultFlowState();\n\tconst options = getSDKOptions(initConfig);\n\tconst base = createBaseFlow(flowState, options);\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tconst { dispatchEvent: _, ...exposedBase } = base;\n\n\tasync function submitForm(formId?: string, body: Record<string, unknown> = {}): ReturnType<NativeFlow['submitForm']> {\n\t\tawait base.init();\n\t\treturn submitFormHandler({ base, options, flowState, formId, body });\n\t}\n\n\tasync function startSession(params: NativeParams = {}): ReturnType<NativeFlow['startSession']> {\n\t\tawait base.init();\n\n\t\treturn startSessionHandler({ base, options, flowState, params });\n\t}\n\n\tasync function finalizeSession(url: string | URL): ReturnType<NativeFlow['finalizeSession']> {\n\t\tawait base.init();\n\n\t\treturn finalizeSessionHandler({ base, options, flowState, url });\n\t}\n\n\t/**\n\t * @deprecated Use `startSession` and `finalizeSession` instead.\n\t */\n\tfunction login(params: NativeParams = {}): ReturnType<NativeFlow['login']> {\n\t\treturn {\n\t\t\t// NOTE: For backward compatibility\n\t\t\tget shortAppId() {\n\t\t\t\treturn flowState.shortAppId;\n\t\t\t},\n\t\t\tset shortAppId(value) {\n\t\t\t\tflowState.shortAppId = value;\n\t\t\t},\n\t\t\tget sessionId() {\n\t\t\t\treturn flowState.sessionId;\n\t\t\t},\n\t\t\tset sessionId(value) {\n\t\t\t\tflowState.sessionId = value;\n\t\t\t},\n\t\t\tget language() {\n\t\t\t\treturn flowState.language;\n\t\t\t},\n\t\t\tset language(lang) {\n\t\t\t\tflowState.language = lang;\n\t\t\t},\n\t\t\tstartSession: async (loginParams: NativeParams = {}) => {\n\t\t\t\treturn startSession({ ...params, ...loginParams });\n\t\t\t},\n\t\t\tfinalizeSession,\n\t\t\tsubmitForm,\n\t\t};\n\t}\n\n\t/**\n\t * @deprecated Use `startSession` and `finalizeSession` instead.\n\t */\n\tfunction register(params: NativeParams = {}): ReturnType<NativeFlow['register']> {\n\t\treturn login({ ...params, prompt: 'create' });\n\t}\n\n\tasync function entry(url?: string | URL): ReturnType<NativeFlow['entry']> {\n\t\tawait base.init();\n\n\t\tconst targetUrl = new URL(url ?? globalThis.window?.location.href);\n\n\t\toptions.logging?.debug('Attempting entry flow');\n\n\t\ttry {\n\t\t\tconst url = new URL('/provider/flow/entry', options.issuer);\n\t\t\tconst data = await fetchFlowEntry({ url, params: targetUrl.searchParams, sdkMode: 'web', options });\n\n\t\t\toptions.logging?.debug(`Entry request successful - ${JSON.stringify(data)}`);\n\n\t\t\treturn data;\n\t\t} catch (error) {\n\t\t\toptions.logging?.error('Entry request failed', error);\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tconst flow = {\n\t\t...exposedBase,\n\t\tget options() {\n\t\t\treturn options;\n\t\t},\n\t\tget initialized() {\n\t\t\treturn flowState.initialized;\n\t\t},\n\t\tget storage() {\n\t\t\treturn options.storage;\n\t\t},\n\t\tget httpClient() {\n\t\t\treturn options.httpClient;\n\t\t},\n\t\tget logging() {\n\t\t\treturn options.logging;\n\t\t},\n\t\tget shortAppId() {\n\t\t\treturn flowState.shortAppId;\n\t\t},\n\t\tset shortAppId(shortAppId: string | null) {\n\t\t\tflowState.shortAppId = shortAppId;\n\t\t},\n\t\tget sessionId() {\n\t\t\treturn flowState.sessionId;\n\t\t},\n\t\tset sessionId(sessionId: string | null) {\n\t\t\tflowState.sessionId = sessionId;\n\t\t},\n\t\tget session() {\n\t\t\treturn flowState.session;\n\t\t},\n\t\tset session(session) {\n\t\t\tflowState.session = session;\n\t\t},\n\t\tget language() {\n\t\t\treturn flowState.language;\n\t\t},\n\t\tset language(lang) {\n\t\t\tflowState.language = lang;\n\t\t},\n\t\tget isAuthenticated() {\n\t\t\treturn base.checkAuthentication();\n\t\t},\n\t\tget isAuthenticatedSync() {\n\t\t\treturn !!flowState.session && !isSessionExpired(flowState.session);\n\t\t},\n\t\tget accessToken() {\n\t\t\treturn flowState.session?.access_token ?? null;\n\t\t},\n\t\tget accessTokenExpired() {\n\t\t\treturn !flowState.session || isSessionExpired(flowState.session);\n\t\t},\n\t\tget accessTokenExpirationDate() {\n\t\t\treturn flowState.session?.expires_at ?? null;\n\t\t},\n\t\tget refreshToken() {\n\t\t\treturn flowState.session?.refresh_token ?? null;\n\t\t},\n\t\tget idToken() {\n\t\t\treturn flowState.session?.id_token ?? null;\n\t\t},\n\t\tget idTokenClaims() {\n\t\t\treturn flowState.session?.claims ?? null;\n\t\t},\n\t\tstartSession,\n\t\tfinalizeSession,\n\t\tsubmitForm,\n\t\tlogin,\n\t\tregister,\n\t\tentry,\n\t} satisfies NativeFlow;\n\n\tif (!options.lazyLoad) {\n\t\tvoid flow.init();\n\t}\n\n\treturn flow;\n}\n"],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { SDKInitConfig } from '../types/oidc';
2
+ import { NativeFlow } from '../types/native';
3
+ /**
4
+ * Creates a native flow for the Strivacity SDK, providing functionality for managing authentication sessions in a native context.
5
+ *
6
+ * @param initConfig - The initial configuration for the SDK, including issuer, clientId, redirectUri, and other options.
7
+ * @returns An object implementing the NativeFlow interface, with methods for starting and finalizing sessions, as well as login and registration flows.
8
+ */
9
+ export declare function createNativeFlow(initConfig: SDKInitConfig): NativeFlow;
@@ -0,0 +1,2 @@
1
+ import{isSessionExpired as e}from"../utils/session.mjs";import{f as t,m as n,o as r}from"../assets/oidc.mjs";import{createBaseFlow as i}from"./base.mjs";import{finalizeSessionHandler as a,startSessionHandler as o,submitFormHandler as s}from"../handlers/native.mjs";function c(c){let l=t(),u=n(c),d=i(l,u),{dispatchEvent:f,...p}=d;async function m(e,t={}){return await d.init(),s({base:d,options:u,flowState:l,formId:e,body:t})}async function h(e={}){return await d.init(),o({base:d,options:u,flowState:l,params:e})}async function g(e){return await d.init(),a({base:d,options:u,flowState:l,url:e})}function _(e={}){return{get shortAppId(){return l.shortAppId},set shortAppId(e){l.shortAppId=e},get sessionId(){return l.sessionId},set sessionId(e){l.sessionId=e},get language(){return l.language},set language(e){l.language=e},startSession:async(t={})=>h({...e,...t}),finalizeSession:g,submitForm:m}}function v(e={}){return _({...e,prompt:`create`})}async function y(e){await d.init();let t=new URL(e??globalThis.window?.location.href);u.logging?.debug(`Attempting entry flow`);try{let e=new URL(`/provider/flow/entry`,u.issuer),n=await r({url:e,params:t.searchParams,sdkMode:`web`,options:u});return u.logging?.debug(`Entry request successful - ${JSON.stringify(n)}`),n}catch(e){throw u.logging?.error(`Entry request failed`,e),e}}let b={...p,get options(){return u},get initialized(){return l.initialized},get storage(){return u.storage},get httpClient(){return u.httpClient},get logging(){return u.logging},get shortAppId(){return l.shortAppId},set shortAppId(e){l.shortAppId=e},get sessionId(){return l.sessionId},set sessionId(e){l.sessionId=e},get session(){return l.session},set session(e){l.session=e},get language(){return l.language},set language(e){l.language=e},get isAuthenticated(){return d.checkAuthentication()},get isAuthenticatedSync(){return!!l.session&&!e(l.session)},get accessToken(){return l.session?.access_token??null},get accessTokenExpired(){return!l.session||e(l.session)},get accessTokenExpirationDate(){return l.session?.expires_at??null},get refreshToken(){return l.session?.refresh_token??null},get idToken(){return l.session?.id_token??null},get idTokenClaims(){return l.session?.claims??null},startSession:h,finalizeSession:g,submitForm:m,login:_,register:v,entry:y};return u.lazyLoad||b.init(),b}export{c as createNativeFlow};
2
+ //# sourceMappingURL=native.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native.mjs","names":[],"sources":["../../src/flows/native.ts"],"sourcesContent":["import type { SDKInitConfig } from '../types/oidc';\nimport type { NativeFlow, NativeParams } from '../types/native';\nimport { getDefaultFlowState, getSDKOptions, fetchFlowEntry } from '../utils/oidc';\nimport { isSessionExpired } from '../utils/session';\nimport { startSessionHandler, finalizeSessionHandler, submitFormHandler } from '../handlers/native';\nimport { createBaseFlow } from './base';\n\n/**\n * Creates a native flow for the Strivacity SDK, providing functionality for managing authentication sessions in a native context.\n *\n * @param initConfig - The initial configuration for the SDK, including issuer, clientId, redirectUri, and other options.\n * @returns An object implementing the NativeFlow interface, with methods for starting and finalizing sessions, as well as login and registration flows.\n */\nexport function createNativeFlow(initConfig: SDKInitConfig): NativeFlow {\n\tconst flowState = getDefaultFlowState();\n\tconst options = getSDKOptions(initConfig);\n\tconst base = createBaseFlow(flowState, options);\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tconst { dispatchEvent: _, ...exposedBase } = base;\n\n\tasync function submitForm(formId?: string, body: Record<string, unknown> = {}): ReturnType<NativeFlow['submitForm']> {\n\t\tawait base.init();\n\t\treturn submitFormHandler({ base, options, flowState, formId, body });\n\t}\n\n\tasync function startSession(params: NativeParams = {}): ReturnType<NativeFlow['startSession']> {\n\t\tawait base.init();\n\n\t\treturn startSessionHandler({ base, options, flowState, params });\n\t}\n\n\tasync function finalizeSession(url: string | URL): ReturnType<NativeFlow['finalizeSession']> {\n\t\tawait base.init();\n\n\t\treturn finalizeSessionHandler({ base, options, flowState, url });\n\t}\n\n\t/**\n\t * @deprecated Use `startSession` and `finalizeSession` instead.\n\t */\n\tfunction login(params: NativeParams = {}): ReturnType<NativeFlow['login']> {\n\t\treturn {\n\t\t\t// NOTE: For backward compatibility\n\t\t\tget shortAppId() {\n\t\t\t\treturn flowState.shortAppId;\n\t\t\t},\n\t\t\tset shortAppId(value) {\n\t\t\t\tflowState.shortAppId = value;\n\t\t\t},\n\t\t\tget sessionId() {\n\t\t\t\treturn flowState.sessionId;\n\t\t\t},\n\t\t\tset sessionId(value) {\n\t\t\t\tflowState.sessionId = value;\n\t\t\t},\n\t\t\tget language() {\n\t\t\t\treturn flowState.language;\n\t\t\t},\n\t\t\tset language(lang) {\n\t\t\t\tflowState.language = lang;\n\t\t\t},\n\t\t\tstartSession: async (loginParams: NativeParams = {}) => {\n\t\t\t\treturn startSession({ ...params, ...loginParams });\n\t\t\t},\n\t\t\tfinalizeSession,\n\t\t\tsubmitForm,\n\t\t};\n\t}\n\n\t/**\n\t * @deprecated Use `startSession` and `finalizeSession` instead.\n\t */\n\tfunction register(params: NativeParams = {}): ReturnType<NativeFlow['register']> {\n\t\treturn login({ ...params, prompt: 'create' });\n\t}\n\n\tasync function entry(url?: string | URL): ReturnType<NativeFlow['entry']> {\n\t\tawait base.init();\n\n\t\tconst targetUrl = new URL(url ?? globalThis.window?.location.href);\n\n\t\toptions.logging?.debug('Attempting entry flow');\n\n\t\ttry {\n\t\t\tconst url = new URL('/provider/flow/entry', options.issuer);\n\t\t\tconst data = await fetchFlowEntry({ url, params: targetUrl.searchParams, sdkMode: 'web', options });\n\n\t\t\toptions.logging?.debug(`Entry request successful - ${JSON.stringify(data)}`);\n\n\t\t\treturn data;\n\t\t} catch (error) {\n\t\t\toptions.logging?.error('Entry request failed', error);\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tconst flow = {\n\t\t...exposedBase,\n\t\tget options() {\n\t\t\treturn options;\n\t\t},\n\t\tget initialized() {\n\t\t\treturn flowState.initialized;\n\t\t},\n\t\tget storage() {\n\t\t\treturn options.storage;\n\t\t},\n\t\tget httpClient() {\n\t\t\treturn options.httpClient;\n\t\t},\n\t\tget logging() {\n\t\t\treturn options.logging;\n\t\t},\n\t\tget shortAppId() {\n\t\t\treturn flowState.shortAppId;\n\t\t},\n\t\tset shortAppId(shortAppId: string | null) {\n\t\t\tflowState.shortAppId = shortAppId;\n\t\t},\n\t\tget sessionId() {\n\t\t\treturn flowState.sessionId;\n\t\t},\n\t\tset sessionId(sessionId: string | null) {\n\t\t\tflowState.sessionId = sessionId;\n\t\t},\n\t\tget session() {\n\t\t\treturn flowState.session;\n\t\t},\n\t\tset session(session) {\n\t\t\tflowState.session = session;\n\t\t},\n\t\tget language() {\n\t\t\treturn flowState.language;\n\t\t},\n\t\tset language(lang) {\n\t\t\tflowState.language = lang;\n\t\t},\n\t\tget isAuthenticated() {\n\t\t\treturn base.checkAuthentication();\n\t\t},\n\t\tget isAuthenticatedSync() {\n\t\t\treturn !!flowState.session && !isSessionExpired(flowState.session);\n\t\t},\n\t\tget accessToken() {\n\t\t\treturn flowState.session?.access_token ?? null;\n\t\t},\n\t\tget accessTokenExpired() {\n\t\t\treturn !flowState.session || isSessionExpired(flowState.session);\n\t\t},\n\t\tget accessTokenExpirationDate() {\n\t\t\treturn flowState.session?.expires_at ?? null;\n\t\t},\n\t\tget refreshToken() {\n\t\t\treturn flowState.session?.refresh_token ?? null;\n\t\t},\n\t\tget idToken() {\n\t\t\treturn flowState.session?.id_token ?? null;\n\t\t},\n\t\tget idTokenClaims() {\n\t\t\treturn flowState.session?.claims ?? null;\n\t\t},\n\t\tstartSession,\n\t\tfinalizeSession,\n\t\tsubmitForm,\n\t\tlogin,\n\t\tregister,\n\t\tentry,\n\t} satisfies NativeFlow;\n\n\tif (!options.lazyLoad) {\n\t\tvoid flow.init();\n\t}\n\n\treturn flow;\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../utils/session.cjs"),t=require("../assets/oidc.cjs"),n=require("./base.cjs"),r=require("../handlers/popup.cjs");function i(i){i.urlHandler||=r.popupUrlHandler,i.callbackHandler||=r.popupCallbackHandler;let a=t.f(),o=t.m(i),s=n.createBaseFlow(a,o),{dispatchEvent:c,...l}=s;async function u(e={}){await s.init(),e??={},e.display=`popup`;let n=typeof o.serverSessionUri==`boolean`?void 0:o.serverSessionUri,r=await t.t({url:n,includeOAuthParams:!n,persistState:!n,params:e,options:o});s.dispatchEvent(`loginInitiated`,[]),o.logging?.debug(`Attempting to redirect for login`);let i=await o.urlHandler(r,e);o.serverSessionUri||await s.tokenExchange(i)}async function d(e={}){return await u({...e,prompt:`create`})}async function f(e,t){await s.init();let n=new URL(e??globalThis.window?.location.href);o.logging?.debug(`Attempting to redirect for entry`),await o.urlHandler(new URL(`/provider/entry?${n.searchParams.toString()}`,o.issuer),t)}let p={...l,get options(){return o},get initialized(){return a.initialized},get storage(){return o.storage},get httpClient(){return o.httpClient},get logging(){return o.logging},get shortAppId(){return a.shortAppId},set shortAppId(e){a.shortAppId=e},get sessionId(){return a.sessionId},set sessionId(e){a.sessionId=e},get session(){return a.session},set session(e){a.session=e},get language(){return a.language},set language(e){a.language=e},get isAuthenticated(){return s.checkAuthentication()},get isAuthenticatedSync(){return!!a.session&&!e.isSessionExpired(a.session)},get accessToken(){return a.session?.access_token??null},get accessTokenExpired(){return!a.session||e.isSessionExpired(a.session)},get accessTokenExpirationDate(){return a.session?.expires_at??null},get refreshToken(){return a.session?.refresh_token??null},get idToken(){return a.session?.id_token??null},get idTokenClaims(){return a.session?.claims??null},login:u,register:d,entry:f};return o.lazyLoad||p.init(),p}exports.createPopupFlow=i;
2
+ //# sourceMappingURL=popup.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"popup.cjs","names":[],"sources":["../../src/flows/popup.ts"],"sourcesContent":["import type { SDKInitConfig } from '../types/oidc';\nimport type { RedirectOptions } from '../types/redirect';\nimport type { PopupFlow } from '../types/popup';\nimport { getDefaultFlowState, getSDKOptions, buildAuthorizationUrl } from '../utils/oidc';\nimport { isSessionExpired } from '../utils/session';\nimport { popupCallbackHandler, popupUrlHandler } from '../handlers/popup';\nimport { createBaseFlow } from './base';\n\n/**\n * Creates a popup flow for the Strivacity SDK, providing functionality for managing authentication sessions in a popup context.\n *\n * @param initConfig - The initial configuration for the SDK, including issuer, clientId, redirectUri, and other options.\n * @returns An object implementing the PopupFlow interface, with methods for login, registration, and entry flows.\n */\nexport function createPopupFlow(initConfig: SDKInitConfig): PopupFlow {\n\tif (!initConfig.urlHandler) {\n\t\tinitConfig.urlHandler = popupUrlHandler;\n\t}\n\tif (!initConfig.callbackHandler) {\n\t\tinitConfig.callbackHandler = popupCallbackHandler;\n\t}\n\n\tconst flowState = getDefaultFlowState();\n\tconst options = getSDKOptions(initConfig);\n\tconst base = createBaseFlow(flowState, options);\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tconst { dispatchEvent: _, ...exposedBase } = base;\n\n\tasync function login(params: Parameters<PopupFlow['login']>[0] = {}): ReturnType<PopupFlow['login']> {\n\t\tawait base.init();\n\n\t\tparams ??= {};\n\t\tparams.display = 'popup';\n\n\t\tconst serverSessionUri = typeof options.serverSessionUri !== 'boolean' ? options.serverSessionUri : undefined;\n\t\tconst url = await buildAuthorizationUrl({\n\t\t\turl: serverSessionUri,\n\t\t\tincludeOAuthParams: !serverSessionUri,\n\t\t\tpersistState: !serverSessionUri,\n\t\t\tparams,\n\t\t\toptions,\n\t\t});\n\n\t\tbase.dispatchEvent('loginInitiated', []);\n\t\toptions.logging?.debug('Attempting to redirect for login');\n\n\t\tconst data = (await options.urlHandler(url, params)) as Record<string, string>;\n\n\t\tif (!options.serverSessionUri) {\n\t\t\tawait base.tokenExchange(data);\n\t\t}\n\t}\n\n\tasync function register(params: Parameters<PopupFlow['register']>[0] = {}): ReturnType<PopupFlow['register']> {\n\t\treturn await login({ ...params, prompt: 'create' });\n\t}\n\n\tasync function entry(url?: string | URL, params?: RedirectOptions): ReturnType<PopupFlow['entry']> {\n\t\tawait base.init();\n\n\t\tconst entryUrl = new URL(url ?? globalThis.window?.location.href);\n\n\t\toptions.logging?.debug('Attempting to redirect for entry');\n\n\t\tawait options.urlHandler(new URL(`/provider/entry?${entryUrl.searchParams.toString()}`, options.issuer), params);\n\t}\n\n\tconst flow = {\n\t\t...exposedBase,\n\t\tget options() {\n\t\t\treturn options;\n\t\t},\n\t\tget initialized() {\n\t\t\treturn flowState.initialized;\n\t\t},\n\t\tget storage() {\n\t\t\treturn options.storage;\n\t\t},\n\t\tget httpClient() {\n\t\t\treturn options.httpClient;\n\t\t},\n\t\tget logging() {\n\t\t\treturn options.logging;\n\t\t},\n\t\tget shortAppId() {\n\t\t\treturn flowState.shortAppId;\n\t\t},\n\t\tset shortAppId(shortAppId: string | null) {\n\t\t\tflowState.shortAppId = shortAppId;\n\t\t},\n\t\tget sessionId() {\n\t\t\treturn flowState.sessionId;\n\t\t},\n\t\tset sessionId(sessionId: string | null) {\n\t\t\tflowState.sessionId = sessionId;\n\t\t},\n\t\tget session() {\n\t\t\treturn flowState.session;\n\t\t},\n\t\tset session(session) {\n\t\t\tflowState.session = session;\n\t\t},\n\t\tget language() {\n\t\t\treturn flowState.language;\n\t\t},\n\t\tset language(lang) {\n\t\t\tflowState.language = lang;\n\t\t},\n\t\tget isAuthenticated() {\n\t\t\treturn base.checkAuthentication();\n\t\t},\n\t\tget isAuthenticatedSync() {\n\t\t\treturn !!flowState.session && !isSessionExpired(flowState.session);\n\t\t},\n\t\tget accessToken() {\n\t\t\treturn flowState.session?.access_token ?? null;\n\t\t},\n\t\tget accessTokenExpired() {\n\t\t\treturn !flowState.session || isSessionExpired(flowState.session);\n\t\t},\n\t\tget accessTokenExpirationDate() {\n\t\t\treturn flowState.session?.expires_at ?? null;\n\t\t},\n\t\tget refreshToken() {\n\t\t\treturn flowState.session?.refresh_token ?? null;\n\t\t},\n\t\tget idToken() {\n\t\t\treturn flowState.session?.id_token ?? null;\n\t\t},\n\t\tget idTokenClaims() {\n\t\t\treturn flowState.session?.claims ?? null;\n\t\t},\n\t\tlogin,\n\t\tregister,\n\t\tentry,\n\t} satisfies PopupFlow;\n\n\tif (!options.lazyLoad) {\n\t\tvoid flow.init();\n\t}\n\n\treturn flow;\n}\n"],"mappings":"sMAcA,SAAgB,EAAgB,EAAsC,CACrE,AACC,EAAW,aAAa,EAAA,gBAEzB,AACC,EAAW,kBAAkB,EAAA,qBAG9B,IAAM,EAAY,EAAA,EAAoB,EAChC,EAAU,EAAA,EAAc,CAAU,EAClC,EAAO,EAAA,eAAe,EAAW,CAAO,EAExC,CAAE,cAAe,EAAG,GAAG,GAAgB,EAE7C,eAAe,EAAM,EAA4C,CAAC,EAAmC,CACpG,MAAM,EAAK,KAAK,EAEhB,IAAW,CAAC,EACZ,EAAO,QAAU,QAEjB,IAAM,EAAmB,OAAO,EAAQ,kBAAqB,UAAuC,IAAA,GAA3B,EAAQ,iBAC3E,EAAM,MAAM,EAAA,EAAsB,CACvC,IAAK,EACL,mBAAoB,CAAC,EACrB,aAAc,CAAC,EACf,SACA,SACD,CAAC,EAED,EAAK,cAAc,iBAAkB,CAAC,CAAC,EACvC,EAAQ,SAAS,MAAM,kCAAkC,EAEzD,IAAM,EAAQ,MAAM,EAAQ,WAAW,EAAK,CAAM,EAE7C,EAAQ,kBACZ,MAAM,EAAK,cAAc,CAAI,CAE/B,CAEA,eAAe,EAAS,EAA+C,CAAC,EAAsC,CAC7G,OAAO,MAAM,EAAM,CAAE,GAAG,EAAQ,OAAQ,QAAS,CAAC,CACnD,CAEA,eAAe,EAAM,EAAoB,EAA0D,CAClG,MAAM,EAAK,KAAK,EAEhB,IAAM,EAAW,IAAI,IAAI,GAAO,WAAW,QAAQ,SAAS,IAAI,EAEhE,EAAQ,SAAS,MAAM,kCAAkC,EAEzD,MAAM,EAAQ,WAAW,IAAI,IAAI,mBAAmB,EAAS,aAAa,SAAS,IAAK,EAAQ,MAAM,EAAG,CAAM,CAChH,CAEA,IAAM,EAAO,CACZ,GAAG,EACH,IAAI,SAAU,CACb,OAAO,CACR,EACA,IAAI,aAAc,CACjB,OAAO,EAAU,WAClB,EACA,IAAI,SAAU,CACb,OAAO,EAAQ,OAChB,EACA,IAAI,YAAa,CAChB,OAAO,EAAQ,UAChB,EACA,IAAI,SAAU,CACb,OAAO,EAAQ,OAChB,EACA,IAAI,YAAa,CAChB,OAAO,EAAU,UAClB,EACA,IAAI,WAAW,EAA2B,CACzC,EAAU,WAAa,CACxB,EACA,IAAI,WAAY,CACf,OAAO,EAAU,SAClB,EACA,IAAI,UAAU,EAA0B,CACvC,EAAU,UAAY,CACvB,EACA,IAAI,SAAU,CACb,OAAO,EAAU,OAClB,EACA,IAAI,QAAQ,EAAS,CACpB,EAAU,QAAU,CACrB,EACA,IAAI,UAAW,CACd,OAAO,EAAU,QAClB,EACA,IAAI,SAAS,EAAM,CAClB,EAAU,SAAW,CACtB,EACA,IAAI,iBAAkB,CACrB,OAAO,EAAK,oBAAoB,CACjC,EACA,IAAI,qBAAsB,CACzB,MAAO,CAAC,CAAC,EAAU,SAAW,CAAC,EAAA,iBAAiB,EAAU,OAAO,CAClE,EACA,IAAI,aAAc,CACjB,OAAO,EAAU,SAAS,cAAgB,IAC3C,EACA,IAAI,oBAAqB,CACxB,MAAO,CAAC,EAAU,SAAW,EAAA,iBAAiB,EAAU,OAAO,CAChE,EACA,IAAI,2BAA4B,CAC/B,OAAO,EAAU,SAAS,YAAc,IACzC,EACA,IAAI,cAAe,CAClB,OAAO,EAAU,SAAS,eAAiB,IAC5C,EACA,IAAI,SAAU,CACb,OAAO,EAAU,SAAS,UAAY,IACvC,EACA,IAAI,eAAgB,CACnB,OAAO,EAAU,SAAS,QAAU,IACrC,EACA,QACA,WACA,OACD,EAMA,OAJK,EAAQ,UACZ,EAAU,KAAK,EAGT,CACR"}
@@ -0,0 +1,9 @@
1
+ import { SDKInitConfig } from '../types/oidc';
2
+ import { PopupFlow } from '../types/popup';
3
+ /**
4
+ * Creates a popup flow for the Strivacity SDK, providing functionality for managing authentication sessions in a popup context.
5
+ *
6
+ * @param initConfig - The initial configuration for the SDK, including issuer, clientId, redirectUri, and other options.
7
+ * @returns An object implementing the PopupFlow interface, with methods for login, registration, and entry flows.
8
+ */
9
+ export declare function createPopupFlow(initConfig: SDKInitConfig): PopupFlow;
@@ -0,0 +1,2 @@
1
+ import{isSessionExpired as e}from"../utils/session.mjs";import{f as t,m as n,t as r}from"../assets/oidc.mjs";import{createBaseFlow as i}from"./base.mjs";import{popupCallbackHandler as a,popupUrlHandler as o}from"../handlers/popup.mjs";function s(s){s.urlHandler||=o,s.callbackHandler||=a;let c=t(),l=n(s),u=i(c,l),{dispatchEvent:d,...f}=u;async function p(e={}){await u.init(),e??={},e.display=`popup`;let t=typeof l.serverSessionUri==`boolean`?void 0:l.serverSessionUri,n=await r({url:t,includeOAuthParams:!t,persistState:!t,params:e,options:l});u.dispatchEvent(`loginInitiated`,[]),l.logging?.debug(`Attempting to redirect for login`);let i=await l.urlHandler(n,e);l.serverSessionUri||await u.tokenExchange(i)}async function m(e={}){return await p({...e,prompt:`create`})}async function h(e,t){await u.init();let n=new URL(e??globalThis.window?.location.href);l.logging?.debug(`Attempting to redirect for entry`),await l.urlHandler(new URL(`/provider/entry?${n.searchParams.toString()}`,l.issuer),t)}let g={...f,get options(){return l},get initialized(){return c.initialized},get storage(){return l.storage},get httpClient(){return l.httpClient},get logging(){return l.logging},get shortAppId(){return c.shortAppId},set shortAppId(e){c.shortAppId=e},get sessionId(){return c.sessionId},set sessionId(e){c.sessionId=e},get session(){return c.session},set session(e){c.session=e},get language(){return c.language},set language(e){c.language=e},get isAuthenticated(){return u.checkAuthentication()},get isAuthenticatedSync(){return!!c.session&&!e(c.session)},get accessToken(){return c.session?.access_token??null},get accessTokenExpired(){return!c.session||e(c.session)},get accessTokenExpirationDate(){return c.session?.expires_at??null},get refreshToken(){return c.session?.refresh_token??null},get idToken(){return c.session?.id_token??null},get idTokenClaims(){return c.session?.claims??null},login:p,register:m,entry:h};return l.lazyLoad||g.init(),g}export{s as createPopupFlow};
2
+ //# sourceMappingURL=popup.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"popup.mjs","names":[],"sources":["../../src/flows/popup.ts"],"sourcesContent":["import type { SDKInitConfig } from '../types/oidc';\nimport type { RedirectOptions } from '../types/redirect';\nimport type { PopupFlow } from '../types/popup';\nimport { getDefaultFlowState, getSDKOptions, buildAuthorizationUrl } from '../utils/oidc';\nimport { isSessionExpired } from '../utils/session';\nimport { popupCallbackHandler, popupUrlHandler } from '../handlers/popup';\nimport { createBaseFlow } from './base';\n\n/**\n * Creates a popup flow for the Strivacity SDK, providing functionality for managing authentication sessions in a popup context.\n *\n * @param initConfig - The initial configuration for the SDK, including issuer, clientId, redirectUri, and other options.\n * @returns An object implementing the PopupFlow interface, with methods for login, registration, and entry flows.\n */\nexport function createPopupFlow(initConfig: SDKInitConfig): PopupFlow {\n\tif (!initConfig.urlHandler) {\n\t\tinitConfig.urlHandler = popupUrlHandler;\n\t}\n\tif (!initConfig.callbackHandler) {\n\t\tinitConfig.callbackHandler = popupCallbackHandler;\n\t}\n\n\tconst flowState = getDefaultFlowState();\n\tconst options = getSDKOptions(initConfig);\n\tconst base = createBaseFlow(flowState, options);\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tconst { dispatchEvent: _, ...exposedBase } = base;\n\n\tasync function login(params: Parameters<PopupFlow['login']>[0] = {}): ReturnType<PopupFlow['login']> {\n\t\tawait base.init();\n\n\t\tparams ??= {};\n\t\tparams.display = 'popup';\n\n\t\tconst serverSessionUri = typeof options.serverSessionUri !== 'boolean' ? options.serverSessionUri : undefined;\n\t\tconst url = await buildAuthorizationUrl({\n\t\t\turl: serverSessionUri,\n\t\t\tincludeOAuthParams: !serverSessionUri,\n\t\t\tpersistState: !serverSessionUri,\n\t\t\tparams,\n\t\t\toptions,\n\t\t});\n\n\t\tbase.dispatchEvent('loginInitiated', []);\n\t\toptions.logging?.debug('Attempting to redirect for login');\n\n\t\tconst data = (await options.urlHandler(url, params)) as Record<string, string>;\n\n\t\tif (!options.serverSessionUri) {\n\t\t\tawait base.tokenExchange(data);\n\t\t}\n\t}\n\n\tasync function register(params: Parameters<PopupFlow['register']>[0] = {}): ReturnType<PopupFlow['register']> {\n\t\treturn await login({ ...params, prompt: 'create' });\n\t}\n\n\tasync function entry(url?: string | URL, params?: RedirectOptions): ReturnType<PopupFlow['entry']> {\n\t\tawait base.init();\n\n\t\tconst entryUrl = new URL(url ?? globalThis.window?.location.href);\n\n\t\toptions.logging?.debug('Attempting to redirect for entry');\n\n\t\tawait options.urlHandler(new URL(`/provider/entry?${entryUrl.searchParams.toString()}`, options.issuer), params);\n\t}\n\n\tconst flow = {\n\t\t...exposedBase,\n\t\tget options() {\n\t\t\treturn options;\n\t\t},\n\t\tget initialized() {\n\t\t\treturn flowState.initialized;\n\t\t},\n\t\tget storage() {\n\t\t\treturn options.storage;\n\t\t},\n\t\tget httpClient() {\n\t\t\treturn options.httpClient;\n\t\t},\n\t\tget logging() {\n\t\t\treturn options.logging;\n\t\t},\n\t\tget shortAppId() {\n\t\t\treturn flowState.shortAppId;\n\t\t},\n\t\tset shortAppId(shortAppId: string | null) {\n\t\t\tflowState.shortAppId = shortAppId;\n\t\t},\n\t\tget sessionId() {\n\t\t\treturn flowState.sessionId;\n\t\t},\n\t\tset sessionId(sessionId: string | null) {\n\t\t\tflowState.sessionId = sessionId;\n\t\t},\n\t\tget session() {\n\t\t\treturn flowState.session;\n\t\t},\n\t\tset session(session) {\n\t\t\tflowState.session = session;\n\t\t},\n\t\tget language() {\n\t\t\treturn flowState.language;\n\t\t},\n\t\tset language(lang) {\n\t\t\tflowState.language = lang;\n\t\t},\n\t\tget isAuthenticated() {\n\t\t\treturn base.checkAuthentication();\n\t\t},\n\t\tget isAuthenticatedSync() {\n\t\t\treturn !!flowState.session && !isSessionExpired(flowState.session);\n\t\t},\n\t\tget accessToken() {\n\t\t\treturn flowState.session?.access_token ?? null;\n\t\t},\n\t\tget accessTokenExpired() {\n\t\t\treturn !flowState.session || isSessionExpired(flowState.session);\n\t\t},\n\t\tget accessTokenExpirationDate() {\n\t\t\treturn flowState.session?.expires_at ?? null;\n\t\t},\n\t\tget refreshToken() {\n\t\t\treturn flowState.session?.refresh_token ?? null;\n\t\t},\n\t\tget idToken() {\n\t\t\treturn flowState.session?.id_token ?? null;\n\t\t},\n\t\tget idTokenClaims() {\n\t\t\treturn flowState.session?.claims ?? null;\n\t\t},\n\t\tlogin,\n\t\tregister,\n\t\tentry,\n\t} satisfies PopupFlow;\n\n\tif (!options.lazyLoad) {\n\t\tvoid flow.init();\n\t}\n\n\treturn flow;\n}\n"],"mappings":"2OAcA,SAAgB,EAAgB,EAAsC,CACrE,AACC,EAAW,aAAa,EAEzB,AACC,EAAW,kBAAkB,EAG9B,IAAM,EAAY,EAAoB,EAChC,EAAU,EAAc,CAAU,EAClC,EAAO,EAAe,EAAW,CAAO,EAExC,CAAE,cAAe,EAAG,GAAG,GAAgB,EAE7C,eAAe,EAAM,EAA4C,CAAC,EAAmC,CACpG,MAAM,EAAK,KAAK,EAEhB,IAAW,CAAC,EACZ,EAAO,QAAU,QAEjB,IAAM,EAAmB,OAAO,EAAQ,kBAAqB,UAAuC,IAAA,GAA3B,EAAQ,iBAC3E,EAAM,MAAM,EAAsB,CACvC,IAAK,EACL,mBAAoB,CAAC,EACrB,aAAc,CAAC,EACf,SACA,SACD,CAAC,EAED,EAAK,cAAc,iBAAkB,CAAC,CAAC,EACvC,EAAQ,SAAS,MAAM,kCAAkC,EAEzD,IAAM,EAAQ,MAAM,EAAQ,WAAW,EAAK,CAAM,EAE7C,EAAQ,kBACZ,MAAM,EAAK,cAAc,CAAI,CAE/B,CAEA,eAAe,EAAS,EAA+C,CAAC,EAAsC,CAC7G,OAAO,MAAM,EAAM,CAAE,GAAG,EAAQ,OAAQ,QAAS,CAAC,CACnD,CAEA,eAAe,EAAM,EAAoB,EAA0D,CAClG,MAAM,EAAK,KAAK,EAEhB,IAAM,EAAW,IAAI,IAAI,GAAO,WAAW,QAAQ,SAAS,IAAI,EAEhE,EAAQ,SAAS,MAAM,kCAAkC,EAEzD,MAAM,EAAQ,WAAW,IAAI,IAAI,mBAAmB,EAAS,aAAa,SAAS,IAAK,EAAQ,MAAM,EAAG,CAAM,CAChH,CAEA,IAAM,EAAO,CACZ,GAAG,EACH,IAAI,SAAU,CACb,OAAO,CACR,EACA,IAAI,aAAc,CACjB,OAAO,EAAU,WAClB,EACA,IAAI,SAAU,CACb,OAAO,EAAQ,OAChB,EACA,IAAI,YAAa,CAChB,OAAO,EAAQ,UAChB,EACA,IAAI,SAAU,CACb,OAAO,EAAQ,OAChB,EACA,IAAI,YAAa,CAChB,OAAO,EAAU,UAClB,EACA,IAAI,WAAW,EAA2B,CACzC,EAAU,WAAa,CACxB,EACA,IAAI,WAAY,CACf,OAAO,EAAU,SAClB,EACA,IAAI,UAAU,EAA0B,CACvC,EAAU,UAAY,CACvB,EACA,IAAI,SAAU,CACb,OAAO,EAAU,OAClB,EACA,IAAI,QAAQ,EAAS,CACpB,EAAU,QAAU,CACrB,EACA,IAAI,UAAW,CACd,OAAO,EAAU,QAClB,EACA,IAAI,SAAS,EAAM,CAClB,EAAU,SAAW,CACtB,EACA,IAAI,iBAAkB,CACrB,OAAO,EAAK,oBAAoB,CACjC,EACA,IAAI,qBAAsB,CACzB,MAAO,CAAC,CAAC,EAAU,SAAW,CAAC,EAAiB,EAAU,OAAO,CAClE,EACA,IAAI,aAAc,CACjB,OAAO,EAAU,SAAS,cAAgB,IAC3C,EACA,IAAI,oBAAqB,CACxB,MAAO,CAAC,EAAU,SAAW,EAAiB,EAAU,OAAO,CAChE,EACA,IAAI,2BAA4B,CAC/B,OAAO,EAAU,SAAS,YAAc,IACzC,EACA,IAAI,cAAe,CAClB,OAAO,EAAU,SAAS,eAAiB,IAC5C,EACA,IAAI,SAAU,CACb,OAAO,EAAU,SAAS,UAAY,IACvC,EACA,IAAI,eAAgB,CACnB,OAAO,EAAU,SAAS,QAAU,IACrC,EACA,QACA,WACA,OACD,EAMA,OAJK,EAAQ,UACZ,EAAU,KAAK,EAGT,CACR"}
@@ -0,0 +1,2 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../utils/session.cjs"),t=require("../assets/oidc.cjs"),n=require("./base.cjs");function r(r){let i=t.f(),a=t.m(r),o=n.createBaseFlow(i,a),{dispatchEvent:s,...c}=o;async function l(e={}){await o.init();let n=typeof a.serverSessionUri==`boolean`?void 0:a.serverSessionUri,r=await t.t({url:n,includeOAuthParams:!n,persistState:!n,params:e,options:a});o.dispatchEvent(`loginInitiated`,[]),a.logging?.debug(`Attempting to redirect for login`),await a.urlHandler(r,e)}async function u(e={}){return await l({...e,prompt:`create`})}async function d(e,t){await o.init();let n=new URL(e??globalThis.window?.location.href);a.logging?.debug(`Attempting to redirect for entry`),await a.urlHandler(new URL(`/provider/entry?${n.searchParams.toString()}`,a.issuer),t)}let f={...c,get options(){return a},get initialized(){return i.initialized},get storage(){return a.storage},get httpClient(){return a.httpClient},get logging(){return a.logging},get shortAppId(){return i.shortAppId},set shortAppId(e){i.shortAppId=e},get sessionId(){return i.sessionId},set sessionId(e){i.sessionId=e},get session(){return i.session},set session(e){i.session=e},get language(){return i.language},set language(e){i.language=e},get isAuthenticated(){return o.checkAuthentication()},get isAuthenticatedSync(){return!!i.session&&!e.isSessionExpired(i.session)},get accessToken(){return i.session?.access_token??null},get accessTokenExpired(){return!i.session||e.isSessionExpired(i.session)},get accessTokenExpirationDate(){return i.session?.expires_at??null},get refreshToken(){return i.session?.refresh_token??null},get idToken(){return i.session?.id_token??null},get idTokenClaims(){return i.session?.claims??null},login:l,register:u,entry:d};return a.lazyLoad||f.init(),f}exports.createRedirectFlow=r;
2
+ //# sourceMappingURL=redirect.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redirect.cjs","names":[],"sources":["../../src/flows/redirect.ts"],"sourcesContent":["import type { SDKInitConfig } from '../types/oidc';\nimport type { RedirectOptions, RedirectFlow } from '../types/redirect';\nimport { getDefaultFlowState, getSDKOptions, buildAuthorizationUrl } from '../utils/oidc';\nimport { isSessionExpired } from '../utils/session';\nimport { createBaseFlow } from './base';\n\n/**\n * Creates a redirect flow for the Strivacity SDK, providing functionality for managing authentication sessions in a redirect context.\n *\n * @param initConfig - The initial configuration for the SDK, including issuer, clientId, redirectUri, and other options.\n * @returns An object implementing the RedirectFlow interface, with methods for login, registration, and entry flows.\n */\nexport function createRedirectFlow(initConfig: SDKInitConfig): RedirectFlow {\n\tconst flowState = getDefaultFlowState();\n\tconst options = getSDKOptions(initConfig);\n\tconst base = createBaseFlow(flowState, options);\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tconst { dispatchEvent: _, ...exposedBase } = base;\n\n\tasync function login(params: Parameters<RedirectFlow['login']>[0] = {}): ReturnType<RedirectFlow['login']> {\n\t\tawait base.init();\n\n\t\tconst serverSessionUri = typeof options.serverSessionUri !== 'boolean' ? options.serverSessionUri : undefined;\n\t\tconst url = await buildAuthorizationUrl({\n\t\t\turl: serverSessionUri,\n\t\t\tincludeOAuthParams: !serverSessionUri,\n\t\t\tpersistState: !serverSessionUri,\n\t\t\tparams,\n\t\t\toptions,\n\t\t});\n\n\t\tbase.dispatchEvent('loginInitiated', []);\n\t\toptions.logging?.debug('Attempting to redirect for login');\n\n\t\tawait options.urlHandler(url, params);\n\t}\n\n\tasync function register(params: Parameters<RedirectFlow['register']>[0] = {}): ReturnType<RedirectFlow['register']> {\n\t\treturn await login({ ...params, prompt: 'create' });\n\t}\n\n\tasync function entry(url?: string | URL, params?: RedirectOptions): ReturnType<RedirectFlow['entry']> {\n\t\tawait base.init();\n\n\t\tconst entryUrl = new URL(url ?? globalThis.window?.location.href);\n\n\t\toptions.logging?.debug('Attempting to redirect for entry');\n\n\t\tawait options.urlHandler(new URL(`/provider/entry?${entryUrl.searchParams.toString()}`, options.issuer), params);\n\t}\n\n\tconst flow = {\n\t\t...exposedBase,\n\t\tget options() {\n\t\t\treturn options;\n\t\t},\n\t\tget initialized() {\n\t\t\treturn flowState.initialized;\n\t\t},\n\t\tget storage() {\n\t\t\treturn options.storage;\n\t\t},\n\t\tget httpClient() {\n\t\t\treturn options.httpClient;\n\t\t},\n\t\tget logging() {\n\t\t\treturn options.logging;\n\t\t},\n\t\tget shortAppId() {\n\t\t\treturn flowState.shortAppId;\n\t\t},\n\t\tset shortAppId(shortAppId: string | null) {\n\t\t\tflowState.shortAppId = shortAppId;\n\t\t},\n\t\tget sessionId() {\n\t\t\treturn flowState.sessionId;\n\t\t},\n\t\tset sessionId(sessionId: string | null) {\n\t\t\tflowState.sessionId = sessionId;\n\t\t},\n\t\tget session() {\n\t\t\treturn flowState.session;\n\t\t},\n\t\tset session(session) {\n\t\t\tflowState.session = session;\n\t\t},\n\t\tget language() {\n\t\t\treturn flowState.language;\n\t\t},\n\t\tset language(lang) {\n\t\t\tflowState.language = lang;\n\t\t},\n\t\tget isAuthenticated() {\n\t\t\treturn base.checkAuthentication();\n\t\t},\n\t\tget isAuthenticatedSync() {\n\t\t\treturn !!flowState.session && !isSessionExpired(flowState.session);\n\t\t},\n\t\tget accessToken() {\n\t\t\treturn flowState.session?.access_token ?? null;\n\t\t},\n\t\tget accessTokenExpired() {\n\t\t\treturn !flowState.session || isSessionExpired(flowState.session);\n\t\t},\n\t\tget accessTokenExpirationDate() {\n\t\t\treturn flowState.session?.expires_at ?? null;\n\t\t},\n\t\tget refreshToken() {\n\t\t\treturn flowState.session?.refresh_token ?? null;\n\t\t},\n\t\tget idToken() {\n\t\t\treturn flowState.session?.id_token ?? null;\n\t\t},\n\t\tget idTokenClaims() {\n\t\t\treturn flowState.session?.claims ?? null;\n\t\t},\n\t\tlogin,\n\t\tregister,\n\t\tentry,\n\t} satisfies RedirectFlow;\n\n\tif (!options.lazyLoad) {\n\t\tvoid flow.init();\n\t}\n\n\treturn flow;\n}\n"],"mappings":"mKAYA,SAAgB,EAAmB,EAAyC,CAC3E,IAAM,EAAY,EAAA,EAAoB,EAChC,EAAU,EAAA,EAAc,CAAU,EAClC,EAAO,EAAA,eAAe,EAAW,CAAO,EAExC,CAAE,cAAe,EAAG,GAAG,GAAgB,EAE7C,eAAe,EAAM,EAA+C,CAAC,EAAsC,CAC1G,MAAM,EAAK,KAAK,EAEhB,IAAM,EAAmB,OAAO,EAAQ,kBAAqB,UAAuC,IAAA,GAA3B,EAAQ,iBAC3E,EAAM,MAAM,EAAA,EAAsB,CACvC,IAAK,EACL,mBAAoB,CAAC,EACrB,aAAc,CAAC,EACf,SACA,SACD,CAAC,EAED,EAAK,cAAc,iBAAkB,CAAC,CAAC,EACvC,EAAQ,SAAS,MAAM,kCAAkC,EAEzD,MAAM,EAAQ,WAAW,EAAK,CAAM,CACrC,CAEA,eAAe,EAAS,EAAkD,CAAC,EAAyC,CACnH,OAAO,MAAM,EAAM,CAAE,GAAG,EAAQ,OAAQ,QAAS,CAAC,CACnD,CAEA,eAAe,EAAM,EAAoB,EAA6D,CACrG,MAAM,EAAK,KAAK,EAEhB,IAAM,EAAW,IAAI,IAAI,GAAO,WAAW,QAAQ,SAAS,IAAI,EAEhE,EAAQ,SAAS,MAAM,kCAAkC,EAEzD,MAAM,EAAQ,WAAW,IAAI,IAAI,mBAAmB,EAAS,aAAa,SAAS,IAAK,EAAQ,MAAM,EAAG,CAAM,CAChH,CAEA,IAAM,EAAO,CACZ,GAAG,EACH,IAAI,SAAU,CACb,OAAO,CACR,EACA,IAAI,aAAc,CACjB,OAAO,EAAU,WAClB,EACA,IAAI,SAAU,CACb,OAAO,EAAQ,OAChB,EACA,IAAI,YAAa,CAChB,OAAO,EAAQ,UAChB,EACA,IAAI,SAAU,CACb,OAAO,EAAQ,OAChB,EACA,IAAI,YAAa,CAChB,OAAO,EAAU,UAClB,EACA,IAAI,WAAW,EAA2B,CACzC,EAAU,WAAa,CACxB,EACA,IAAI,WAAY,CACf,OAAO,EAAU,SAClB,EACA,IAAI,UAAU,EAA0B,CACvC,EAAU,UAAY,CACvB,EACA,IAAI,SAAU,CACb,OAAO,EAAU,OAClB,EACA,IAAI,QAAQ,EAAS,CACpB,EAAU,QAAU,CACrB,EACA,IAAI,UAAW,CACd,OAAO,EAAU,QAClB,EACA,IAAI,SAAS,EAAM,CAClB,EAAU,SAAW,CACtB,EACA,IAAI,iBAAkB,CACrB,OAAO,EAAK,oBAAoB,CACjC,EACA,IAAI,qBAAsB,CACzB,MAAO,CAAC,CAAC,EAAU,SAAW,CAAC,EAAA,iBAAiB,EAAU,OAAO,CAClE,EACA,IAAI,aAAc,CACjB,OAAO,EAAU,SAAS,cAAgB,IAC3C,EACA,IAAI,oBAAqB,CACxB,MAAO,CAAC,EAAU,SAAW,EAAA,iBAAiB,EAAU,OAAO,CAChE,EACA,IAAI,2BAA4B,CAC/B,OAAO,EAAU,SAAS,YAAc,IACzC,EACA,IAAI,cAAe,CAClB,OAAO,EAAU,SAAS,eAAiB,IAC5C,EACA,IAAI,SAAU,CACb,OAAO,EAAU,SAAS,UAAY,IACvC,EACA,IAAI,eAAgB,CACnB,OAAO,EAAU,SAAS,QAAU,IACrC,EACA,QACA,WACA,OACD,EAMA,OAJK,EAAQ,UACZ,EAAU,KAAK,EAGT,CACR"}
@@ -0,0 +1,9 @@
1
+ import { SDKInitConfig } from '../types/oidc';
2
+ import { RedirectFlow } from '../types/redirect';
3
+ /**
4
+ * Creates a redirect flow for the Strivacity SDK, providing functionality for managing authentication sessions in a redirect context.
5
+ *
6
+ * @param initConfig - The initial configuration for the SDK, including issuer, clientId, redirectUri, and other options.
7
+ * @returns An object implementing the RedirectFlow interface, with methods for login, registration, and entry flows.
8
+ */
9
+ export declare function createRedirectFlow(initConfig: SDKInitConfig): RedirectFlow;
@@ -0,0 +1,2 @@
1
+ import{isSessionExpired as e}from"../utils/session.mjs";import{f as t,m as n,t as r}from"../assets/oidc.mjs";import{createBaseFlow as i}from"./base.mjs";function a(a){let o=t(),s=n(a),c=i(o,s),{dispatchEvent:l,...u}=c;async function d(e={}){await c.init();let t=typeof s.serverSessionUri==`boolean`?void 0:s.serverSessionUri,n=await r({url:t,includeOAuthParams:!t,persistState:!t,params:e,options:s});c.dispatchEvent(`loginInitiated`,[]),s.logging?.debug(`Attempting to redirect for login`),await s.urlHandler(n,e)}async function f(e={}){return await d({...e,prompt:`create`})}async function p(e,t){await c.init();let n=new URL(e??globalThis.window?.location.href);s.logging?.debug(`Attempting to redirect for entry`),await s.urlHandler(new URL(`/provider/entry?${n.searchParams.toString()}`,s.issuer),t)}let m={...u,get options(){return s},get initialized(){return o.initialized},get storage(){return s.storage},get httpClient(){return s.httpClient},get logging(){return s.logging},get shortAppId(){return o.shortAppId},set shortAppId(e){o.shortAppId=e},get sessionId(){return o.sessionId},set sessionId(e){o.sessionId=e},get session(){return o.session},set session(e){o.session=e},get language(){return o.language},set language(e){o.language=e},get isAuthenticated(){return c.checkAuthentication()},get isAuthenticatedSync(){return!!o.session&&!e(o.session)},get accessToken(){return o.session?.access_token??null},get accessTokenExpired(){return!o.session||e(o.session)},get accessTokenExpirationDate(){return o.session?.expires_at??null},get refreshToken(){return o.session?.refresh_token??null},get idToken(){return o.session?.id_token??null},get idTokenClaims(){return o.session?.claims??null},login:d,register:f,entry:p};return s.lazyLoad||m.init(),m}export{a as createRedirectFlow};
2
+ //# sourceMappingURL=redirect.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redirect.mjs","names":[],"sources":["../../src/flows/redirect.ts"],"sourcesContent":["import type { SDKInitConfig } from '../types/oidc';\nimport type { RedirectOptions, RedirectFlow } from '../types/redirect';\nimport { getDefaultFlowState, getSDKOptions, buildAuthorizationUrl } from '../utils/oidc';\nimport { isSessionExpired } from '../utils/session';\nimport { createBaseFlow } from './base';\n\n/**\n * Creates a redirect flow for the Strivacity SDK, providing functionality for managing authentication sessions in a redirect context.\n *\n * @param initConfig - The initial configuration for the SDK, including issuer, clientId, redirectUri, and other options.\n * @returns An object implementing the RedirectFlow interface, with methods for login, registration, and entry flows.\n */\nexport function createRedirectFlow(initConfig: SDKInitConfig): RedirectFlow {\n\tconst flowState = getDefaultFlowState();\n\tconst options = getSDKOptions(initConfig);\n\tconst base = createBaseFlow(flowState, options);\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tconst { dispatchEvent: _, ...exposedBase } = base;\n\n\tasync function login(params: Parameters<RedirectFlow['login']>[0] = {}): ReturnType<RedirectFlow['login']> {\n\t\tawait base.init();\n\n\t\tconst serverSessionUri = typeof options.serverSessionUri !== 'boolean' ? options.serverSessionUri : undefined;\n\t\tconst url = await buildAuthorizationUrl({\n\t\t\turl: serverSessionUri,\n\t\t\tincludeOAuthParams: !serverSessionUri,\n\t\t\tpersistState: !serverSessionUri,\n\t\t\tparams,\n\t\t\toptions,\n\t\t});\n\n\t\tbase.dispatchEvent('loginInitiated', []);\n\t\toptions.logging?.debug('Attempting to redirect for login');\n\n\t\tawait options.urlHandler(url, params);\n\t}\n\n\tasync function register(params: Parameters<RedirectFlow['register']>[0] = {}): ReturnType<RedirectFlow['register']> {\n\t\treturn await login({ ...params, prompt: 'create' });\n\t}\n\n\tasync function entry(url?: string | URL, params?: RedirectOptions): ReturnType<RedirectFlow['entry']> {\n\t\tawait base.init();\n\n\t\tconst entryUrl = new URL(url ?? globalThis.window?.location.href);\n\n\t\toptions.logging?.debug('Attempting to redirect for entry');\n\n\t\tawait options.urlHandler(new URL(`/provider/entry?${entryUrl.searchParams.toString()}`, options.issuer), params);\n\t}\n\n\tconst flow = {\n\t\t...exposedBase,\n\t\tget options() {\n\t\t\treturn options;\n\t\t},\n\t\tget initialized() {\n\t\t\treturn flowState.initialized;\n\t\t},\n\t\tget storage() {\n\t\t\treturn options.storage;\n\t\t},\n\t\tget httpClient() {\n\t\t\treturn options.httpClient;\n\t\t},\n\t\tget logging() {\n\t\t\treturn options.logging;\n\t\t},\n\t\tget shortAppId() {\n\t\t\treturn flowState.shortAppId;\n\t\t},\n\t\tset shortAppId(shortAppId: string | null) {\n\t\t\tflowState.shortAppId = shortAppId;\n\t\t},\n\t\tget sessionId() {\n\t\t\treturn flowState.sessionId;\n\t\t},\n\t\tset sessionId(sessionId: string | null) {\n\t\t\tflowState.sessionId = sessionId;\n\t\t},\n\t\tget session() {\n\t\t\treturn flowState.session;\n\t\t},\n\t\tset session(session) {\n\t\t\tflowState.session = session;\n\t\t},\n\t\tget language() {\n\t\t\treturn flowState.language;\n\t\t},\n\t\tset language(lang) {\n\t\t\tflowState.language = lang;\n\t\t},\n\t\tget isAuthenticated() {\n\t\t\treturn base.checkAuthentication();\n\t\t},\n\t\tget isAuthenticatedSync() {\n\t\t\treturn !!flowState.session && !isSessionExpired(flowState.session);\n\t\t},\n\t\tget accessToken() {\n\t\t\treturn flowState.session?.access_token ?? null;\n\t\t},\n\t\tget accessTokenExpired() {\n\t\t\treturn !flowState.session || isSessionExpired(flowState.session);\n\t\t},\n\t\tget accessTokenExpirationDate() {\n\t\t\treturn flowState.session?.expires_at ?? null;\n\t\t},\n\t\tget refreshToken() {\n\t\t\treturn flowState.session?.refresh_token ?? null;\n\t\t},\n\t\tget idToken() {\n\t\t\treturn flowState.session?.id_token ?? null;\n\t\t},\n\t\tget idTokenClaims() {\n\t\t\treturn flowState.session?.claims ?? null;\n\t\t},\n\t\tlogin,\n\t\tregister,\n\t\tentry,\n\t} satisfies RedirectFlow;\n\n\tif (!options.lazyLoad) {\n\t\tvoid flow.init();\n\t}\n\n\treturn flow;\n}\n"],"mappings":"yJAYA,SAAgB,EAAmB,EAAyC,CAC3E,IAAM,EAAY,EAAoB,EAChC,EAAU,EAAc,CAAU,EAClC,EAAO,EAAe,EAAW,CAAO,EAExC,CAAE,cAAe,EAAG,GAAG,GAAgB,EAE7C,eAAe,EAAM,EAA+C,CAAC,EAAsC,CAC1G,MAAM,EAAK,KAAK,EAEhB,IAAM,EAAmB,OAAO,EAAQ,kBAAqB,UAAuC,IAAA,GAA3B,EAAQ,iBAC3E,EAAM,MAAM,EAAsB,CACvC,IAAK,EACL,mBAAoB,CAAC,EACrB,aAAc,CAAC,EACf,SACA,SACD,CAAC,EAED,EAAK,cAAc,iBAAkB,CAAC,CAAC,EACvC,EAAQ,SAAS,MAAM,kCAAkC,EAEzD,MAAM,EAAQ,WAAW,EAAK,CAAM,CACrC,CAEA,eAAe,EAAS,EAAkD,CAAC,EAAyC,CACnH,OAAO,MAAM,EAAM,CAAE,GAAG,EAAQ,OAAQ,QAAS,CAAC,CACnD,CAEA,eAAe,EAAM,EAAoB,EAA6D,CACrG,MAAM,EAAK,KAAK,EAEhB,IAAM,EAAW,IAAI,IAAI,GAAO,WAAW,QAAQ,SAAS,IAAI,EAEhE,EAAQ,SAAS,MAAM,kCAAkC,EAEzD,MAAM,EAAQ,WAAW,IAAI,IAAI,mBAAmB,EAAS,aAAa,SAAS,IAAK,EAAQ,MAAM,EAAG,CAAM,CAChH,CAEA,IAAM,EAAO,CACZ,GAAG,EACH,IAAI,SAAU,CACb,OAAO,CACR,EACA,IAAI,aAAc,CACjB,OAAO,EAAU,WAClB,EACA,IAAI,SAAU,CACb,OAAO,EAAQ,OAChB,EACA,IAAI,YAAa,CAChB,OAAO,EAAQ,UAChB,EACA,IAAI,SAAU,CACb,OAAO,EAAQ,OAChB,EACA,IAAI,YAAa,CAChB,OAAO,EAAU,UAClB,EACA,IAAI,WAAW,EAA2B,CACzC,EAAU,WAAa,CACxB,EACA,IAAI,WAAY,CACf,OAAO,EAAU,SAClB,EACA,IAAI,UAAU,EAA0B,CACvC,EAAU,UAAY,CACvB,EACA,IAAI,SAAU,CACb,OAAO,EAAU,OAClB,EACA,IAAI,QAAQ,EAAS,CACpB,EAAU,QAAU,CACrB,EACA,IAAI,UAAW,CACd,OAAO,EAAU,QAClB,EACA,IAAI,SAAS,EAAM,CAClB,EAAU,SAAW,CACtB,EACA,IAAI,iBAAkB,CACrB,OAAO,EAAK,oBAAoB,CACjC,EACA,IAAI,qBAAsB,CACzB,MAAO,CAAC,CAAC,EAAU,SAAW,CAAC,EAAiB,EAAU,OAAO,CAClE,EACA,IAAI,aAAc,CACjB,OAAO,EAAU,SAAS,cAAgB,IAC3C,EACA,IAAI,oBAAqB,CACxB,MAAO,CAAC,EAAU,SAAW,EAAiB,EAAU,OAAO,CAChE,EACA,IAAI,2BAA4B,CAC/B,OAAO,EAAU,SAAS,YAAc,IACzC,EACA,IAAI,cAAe,CAClB,OAAO,EAAU,SAAS,eAAiB,IAC5C,EACA,IAAI,SAAU,CACb,OAAO,EAAU,SAAS,UAAY,IACvC,EACA,IAAI,eAAgB,CACnB,OAAO,EAAU,SAAS,QAAU,IACrC,EACA,QACA,WACA,OACD,EAMA,OAJK,EAAQ,UACZ,EAAU,KAAK,EAGT,CACR"}
@@ -0,0 +1,2 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../utils/errors.cjs"),t=require("../assets/oidc.cjs");async function n({base:n,options:r,flowState:i,params:a}){r.logging&&(r.logging.xEventId=void 0,r.logging.info(`Starting login flow session`)),n.dispatchEvent(`flowInitiated`,[]);try{let o=typeof r.serverSessionUri==`boolean`?void 0:r.serverSessionUri,s=await t.t({url:o,includeOAuthParams:!o,persistState:!o,params:a,options:r});s.searchParams.set(`sdk`,`web-embedded`);let c=await r.httpClient.request(s,{method:`GET`,credentials:`include`,headers:{"Accept-language":a.language??i.language}});c.ok||e.throwHttpError(c.status,`Failed to start login session`);let l,u={};try{l=new URL(await c.text()),u=Object.fromEntries(l.searchParams.entries())}catch{l=new URL(c.url),u=Object.fromEntries(l.searchParams.entries())}if(u.error)throw new e.OidcError(u.error,u.error_description,u.error_uri);if(u.code){if(!l.toString().startsWith(r.redirectUri))throw new e.ProtocolError(`Invalid redirect URI`);r.serverSessionUri?globalThis.location.href=l.toString():await n.tokenExchange(u)}else if(u.session_id){if(!u.short_app_id)throw new e.ProtocolError(`short_app_id is missing in the response`);i.sessionId=u.session_id,i.shortAppId=u.short_app_id,i.language=u.language??i.language}else throw new e.ProtocolError(`Neither "code" nor "session_id" is present in the response`)}catch(e){throw r.logging?.error(`Start login session error`,e),e}}async function r({base:e,options:n,flowState:r,url:i}){if(!r.sessionId&&globalThis.sty.hostElement?.sessionId&&(r.sessionId=globalThis.sty.hostElement.sessionId),!r.shortAppId&&globalThis.sty.hostElement?.shortAppId&&(r.shortAppId=globalThis.sty.hostElement.shortAppId),r.language!==globalThis.sty.hostElement?.lang&&globalThis.sty.hostElement?.lang&&(r.language=globalThis.sty.hostElement.lang),n.logging?.debug(`Finalizing login session`),!r.sessionId){let e=Error(`Session ID is missing. Cannot finalize login session.`);throw n.logging?.error(`Failed to finalize login session`,e),e}try{let a=await t.s({url:i,sessionId:r.sessionId,language:r.language,options:n});if(n.serverSessionUri)globalThis.location.href=a.toString();else{let t=await n.callbackHandler(a,n.responseMode);await e.tokenExchange(t)}}catch(e){throw n.logging?.error(`Finalize login session error`,e),e}}exports.finalizeSessionHandler=r,exports.startSessionHandler=n;
2
+ //# sourceMappingURL=embedded.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedded.cjs","names":[],"sources":["../../src/handlers/embedded.ts"],"sourcesContent":["import type { FlowState, SDKOptions } from '../types/oidc';\nimport type { EmbeddedParams } from '../types/embedded';\nimport { buildAuthorizationUrl, finalizeLoginSession } from '../utils/oidc';\nimport { OidcError, ProtocolError, throwHttpError } from '../utils/errors';\nimport type { createBaseFlow } from '../flows/base';\n\n/**\n * Starts a login session by initiating the authentication flow.\n *\n * @param {object} params - The parameters for starting the login session.\n * @param {ReturnType<typeof createBaseFlow>} params.base - The base flow instance.\n * @param {SDKOptions} params.options - The SDK options.\n * @param {FlowState} params.flowState - The current flow state.\n * @param {EmbeddedParams} params.params - The parameters for the login session.\n * @returns {Promise<void>} A promise that resolves when the session is started.\n * @throws {Error} If there is an error during the session start process.\n */\nexport async function startSessionHandler({\n\tbase,\n\toptions,\n\tflowState,\n\tparams,\n}: {\n\tbase: ReturnType<typeof createBaseFlow>;\n\toptions: SDKOptions;\n\tflowState: FlowState;\n\tparams: EmbeddedParams;\n}): Promise<void> {\n\tif (options.logging) {\n\t\toptions.logging.xEventId = undefined;\n\t\toptions.logging.info('Starting login flow session');\n\t}\n\n\tbase.dispatchEvent('flowInitiated', []);\n\n\ttry {\n\t\tconst serverSessionUri = typeof options.serverSessionUri !== 'boolean' ? options.serverSessionUri : undefined;\n\t\tconst url = await buildAuthorizationUrl({\n\t\t\turl: serverSessionUri,\n\t\t\tincludeOAuthParams: !serverSessionUri,\n\t\t\tpersistState: !serverSessionUri,\n\t\t\tparams,\n\t\t\toptions,\n\t\t});\n\n\t\turl.searchParams.set('sdk', 'web-embedded');\n\n\t\tconst response = await options.httpClient.request<string>(url, {\n\t\t\tmethod: 'GET',\n\t\t\tcredentials: 'include',\n\t\t\theaders: { 'Accept-language': params.language ?? flowState.language },\n\t\t});\n\n\t\tif (!response.ok) {\n\t\t\tthrowHttpError(response.status, 'Failed to start login session');\n\t\t}\n\n\t\tlet uri: URL;\n\t\tlet searchParams: Record<string, string> = {};\n\n\t\ttry {\n\t\t\turi = new URL(await response.text());\n\t\t\tsearchParams = Object.fromEntries(uri.searchParams.entries());\n\t\t} catch {\n\t\t\turi = new URL(response.url);\n\t\t\tsearchParams = Object.fromEntries(uri.searchParams.entries());\n\t\t}\n\n\t\tif (searchParams.error) {\n\t\t\tthrow new OidcError(searchParams.error, searchParams.error_description, searchParams.error_uri);\n\t\t}\n\n\t\tif (searchParams.code) {\n\t\t\tif (!uri.toString().startsWith(options.redirectUri)) {\n\t\t\t\tthrow new ProtocolError('Invalid redirect URI');\n\t\t\t}\n\n\t\t\tif (options.serverSessionUri) {\n\t\t\t\tglobalThis.location.href = uri.toString();\n\t\t\t} else {\n\t\t\t\tawait base.tokenExchange(searchParams);\n\t\t\t}\n\t\t} else if (searchParams.session_id) {\n\t\t\tif (!searchParams.short_app_id) {\n\t\t\t\tthrow new ProtocolError('short_app_id is missing in the response');\n\t\t\t}\n\n\t\t\tflowState.sessionId = searchParams.session_id;\n\t\t\tflowState.shortAppId = searchParams.short_app_id;\n\t\t\tflowState.language = searchParams.language ?? flowState.language;\n\t\t} else {\n\t\t\tthrow new ProtocolError('Neither \"code\" nor \"session_id\" is present in the response');\n\t\t}\n\t} catch (error) {\n\t\toptions.logging?.error('Start login session error', error);\n\t\tthrow error;\n\t}\n}\n\n/**\n * Finalizes the login session by exchanging the authorization code for tokens.\n *\n * @param {object} params - The parameters for finalizing the login session.\n * @param {ReturnType<typeof createBaseFlow>} params.base - The base flow instance.\n * @param {SDKOptions} params.options - The SDK options.\n * @param {FlowState} params.flowState - The current flow state.\n * @param {string | URL} params.url - The URL containing the authorization code.\n * @returns {Promise<void>} A promise that resolves when the session is finalized.\n * @throws {Error} If the session ID is missing or if there is an error during the finalization process.\n */\nexport async function finalizeSessionHandler({\n\tbase,\n\toptions,\n\tflowState,\n\turl,\n}: {\n\tbase: ReturnType<typeof createBaseFlow>;\n\toptions: SDKOptions;\n\tflowState: FlowState;\n\turl: string | URL;\n}): Promise<void> {\n\t// NOTE: Collect session data from the host element if not already set in the state.\n\tif (!flowState.sessionId && globalThis.sty.hostElement?.sessionId) {\n\t\tflowState.sessionId = globalThis.sty.hostElement.sessionId;\n\t}\n\tif (!flowState.shortAppId && globalThis.sty.hostElement?.shortAppId) {\n\t\tflowState.shortAppId = globalThis.sty.hostElement.shortAppId;\n\t}\n\tif (flowState.language !== globalThis.sty.hostElement?.lang && globalThis.sty.hostElement?.lang) {\n\t\tflowState.language = globalThis.sty.hostElement.lang;\n\t}\n\n\toptions.logging?.debug('Finalizing login session');\n\n\tif (!flowState.sessionId) {\n\t\tconst error = new Error('Session ID is missing. Cannot finalize login session.');\n\t\toptions.logging?.error('Failed to finalize login session', error);\n\t\tthrow error;\n\t}\n\n\ttry {\n\t\tconst redirectUri = await finalizeLoginSession({\n\t\t\turl,\n\t\t\tsessionId: flowState.sessionId,\n\t\t\tlanguage: flowState.language,\n\t\t\toptions,\n\t\t});\n\n\t\tif (options.serverSessionUri) {\n\t\t\tglobalThis.location.href = redirectUri.toString();\n\t\t} else {\n\t\t\tconst params = (await options.callbackHandler(redirectUri, options.responseMode)) as Record<string, string>;\n\t\t\tawait base.tokenExchange(params);\n\t\t}\n\t} catch (error) {\n\t\toptions.logging?.error('Finalize login session error', error);\n\t\tthrow error;\n\t}\n}\n"],"mappings":"0IAiBA,eAAsB,EAAoB,CACzC,OACA,UACA,YACA,UAMiB,CACb,EAAQ,UACX,EAAQ,QAAQ,SAAW,IAAA,GAC3B,EAAQ,QAAQ,KAAK,6BAA6B,GAGnD,EAAK,cAAc,gBAAiB,CAAC,CAAC,EAEtC,GAAI,CACH,IAAM,EAAmB,OAAO,EAAQ,kBAAqB,UAAuC,IAAA,GAA3B,EAAQ,iBAC3E,EAAM,MAAM,EAAA,EAAsB,CACvC,IAAK,EACL,mBAAoB,CAAC,EACrB,aAAc,CAAC,EACf,SACA,SACD,CAAC,EAED,EAAI,aAAa,IAAI,MAAO,cAAc,EAE1C,IAAM,EAAW,MAAM,EAAQ,WAAW,QAAgB,EAAK,CAC9D,OAAQ,MACR,YAAa,UACb,QAAS,CAAE,kBAAmB,EAAO,UAAY,EAAU,QAAS,CACrE,CAAC,EAEI,EAAS,IACb,EAAA,eAAe,EAAS,OAAQ,+BAA+B,EAGhE,IAAI,EACA,EAAuC,CAAC,EAE5C,GAAI,CACH,EAAM,IAAI,IAAI,MAAM,EAAS,KAAK,CAAC,EACnC,EAAe,OAAO,YAAY,EAAI,aAAa,QAAQ,CAAC,CAC7D,MAAQ,CACP,EAAM,IAAI,IAAI,EAAS,GAAG,EAC1B,EAAe,OAAO,YAAY,EAAI,aAAa,QAAQ,CAAC,CAC7D,CAEA,GAAI,EAAa,MAChB,MAAM,IAAI,EAAA,UAAU,EAAa,MAAO,EAAa,kBAAmB,EAAa,SAAS,EAG/F,GAAI,EAAa,KAAM,CACtB,GAAI,CAAC,EAAI,SAAS,CAAC,CAAC,WAAW,EAAQ,WAAW,EACjD,MAAM,IAAI,EAAA,cAAc,sBAAsB,EAG3C,EAAQ,iBACX,WAAW,SAAS,KAAO,EAAI,SAAS,EAExC,MAAM,EAAK,cAAc,CAAY,CAEvC,MAAO,GAAI,EAAa,WAAY,CACnC,GAAI,CAAC,EAAa,aACjB,MAAM,IAAI,EAAA,cAAc,yCAAyC,EAGlE,EAAU,UAAY,EAAa,WACnC,EAAU,WAAa,EAAa,aACpC,EAAU,SAAW,EAAa,UAAY,EAAU,QACzD,MACC,MAAM,IAAI,EAAA,cAAc,4DAA4D,CAEtF,OAAS,EAAO,CAEf,MADA,EAAQ,SAAS,MAAM,4BAA6B,CAAK,EACnD,CACP,CACD,CAaA,eAAsB,EAAuB,CAC5C,OACA,UACA,YACA,OAMiB,CAcjB,GAZI,CAAC,EAAU,WAAa,WAAW,IAAI,aAAa,YACvD,EAAU,UAAY,WAAW,IAAI,YAAY,WAE9C,CAAC,EAAU,YAAc,WAAW,IAAI,aAAa,aACxD,EAAU,WAAa,WAAW,IAAI,YAAY,YAE/C,EAAU,WAAa,WAAW,IAAI,aAAa,MAAQ,WAAW,IAAI,aAAa,OAC1F,EAAU,SAAW,WAAW,IAAI,YAAY,MAGjD,EAAQ,SAAS,MAAM,0BAA0B,EAE7C,CAAC,EAAU,UAAW,CACzB,IAAM,EAAY,MAAM,uDAAuD,EAE/E,MADA,EAAQ,SAAS,MAAM,mCAAoC,CAAK,EAC1D,CACP,CAEA,GAAI,CACH,IAAM,EAAc,MAAM,EAAA,EAAqB,CAC9C,MACA,UAAW,EAAU,UACrB,SAAU,EAAU,SACpB,SACD,CAAC,EAED,GAAI,EAAQ,iBACX,WAAW,SAAS,KAAO,EAAY,SAAS,MAC1C,CACN,IAAM,EAAU,MAAM,EAAQ,gBAAgB,EAAa,EAAQ,YAAY,EAC/E,MAAM,EAAK,cAAc,CAAM,CAChC,CACD,OAAS,EAAO,CAEf,MADA,EAAQ,SAAS,MAAM,+BAAgC,CAAK,EACtD,CACP,CACD"}
@@ -0,0 +1,37 @@
1
+ import { FlowState, SDKOptions } from '../types/oidc';
2
+ import { EmbeddedParams } from '../types/embedded';
3
+ import { createBaseFlow } from '../flows/base';
4
+ /**
5
+ * Starts a login session by initiating the authentication flow.
6
+ *
7
+ * @param {object} params - The parameters for starting the login session.
8
+ * @param {ReturnType<typeof createBaseFlow>} params.base - The base flow instance.
9
+ * @param {SDKOptions} params.options - The SDK options.
10
+ * @param {FlowState} params.flowState - The current flow state.
11
+ * @param {EmbeddedParams} params.params - The parameters for the login session.
12
+ * @returns {Promise<void>} A promise that resolves when the session is started.
13
+ * @throws {Error} If there is an error during the session start process.
14
+ */
15
+ export declare function startSessionHandler({ base, options, flowState, params, }: {
16
+ base: ReturnType<typeof createBaseFlow>;
17
+ options: SDKOptions;
18
+ flowState: FlowState;
19
+ params: EmbeddedParams;
20
+ }): Promise<void>;
21
+ /**
22
+ * Finalizes the login session by exchanging the authorization code for tokens.
23
+ *
24
+ * @param {object} params - The parameters for finalizing the login session.
25
+ * @param {ReturnType<typeof createBaseFlow>} params.base - The base flow instance.
26
+ * @param {SDKOptions} params.options - The SDK options.
27
+ * @param {FlowState} params.flowState - The current flow state.
28
+ * @param {string | URL} params.url - The URL containing the authorization code.
29
+ * @returns {Promise<void>} A promise that resolves when the session is finalized.
30
+ * @throws {Error} If the session ID is missing or if there is an error during the finalization process.
31
+ */
32
+ export declare function finalizeSessionHandler({ base, options, flowState, url, }: {
33
+ base: ReturnType<typeof createBaseFlow>;
34
+ options: SDKOptions;
35
+ flowState: FlowState;
36
+ url: string | URL;
37
+ }): Promise<void>;
@@ -0,0 +1,2 @@
1
+ import{OidcError as e,ProtocolError as t,throwHttpError as n}from"../utils/errors.mjs";import{s as r,t as i}from"../assets/oidc.mjs";async function a({base:r,options:a,flowState:o,params:s}){a.logging&&(a.logging.xEventId=void 0,a.logging.info(`Starting login flow session`)),r.dispatchEvent(`flowInitiated`,[]);try{let c=typeof a.serverSessionUri==`boolean`?void 0:a.serverSessionUri,l=await i({url:c,includeOAuthParams:!c,persistState:!c,params:s,options:a});l.searchParams.set(`sdk`,`web-embedded`);let u=await a.httpClient.request(l,{method:`GET`,credentials:`include`,headers:{"Accept-language":s.language??o.language}});u.ok||n(u.status,`Failed to start login session`);let d,f={};try{d=new URL(await u.text()),f=Object.fromEntries(d.searchParams.entries())}catch{d=new URL(u.url),f=Object.fromEntries(d.searchParams.entries())}if(f.error)throw new e(f.error,f.error_description,f.error_uri);if(f.code){if(!d.toString().startsWith(a.redirectUri))throw new t(`Invalid redirect URI`);a.serverSessionUri?globalThis.location.href=d.toString():await r.tokenExchange(f)}else if(f.session_id){if(!f.short_app_id)throw new t(`short_app_id is missing in the response`);o.sessionId=f.session_id,o.shortAppId=f.short_app_id,o.language=f.language??o.language}else throw new t(`Neither "code" nor "session_id" is present in the response`)}catch(e){throw a.logging?.error(`Start login session error`,e),e}}async function o({base:e,options:t,flowState:n,url:i}){if(!n.sessionId&&globalThis.sty.hostElement?.sessionId&&(n.sessionId=globalThis.sty.hostElement.sessionId),!n.shortAppId&&globalThis.sty.hostElement?.shortAppId&&(n.shortAppId=globalThis.sty.hostElement.shortAppId),n.language!==globalThis.sty.hostElement?.lang&&globalThis.sty.hostElement?.lang&&(n.language=globalThis.sty.hostElement.lang),t.logging?.debug(`Finalizing login session`),!n.sessionId){let e=Error(`Session ID is missing. Cannot finalize login session.`);throw t.logging?.error(`Failed to finalize login session`,e),e}try{let a=await r({url:i,sessionId:n.sessionId,language:n.language,options:t});if(t.serverSessionUri)globalThis.location.href=a.toString();else{let n=await t.callbackHandler(a,t.responseMode);await e.tokenExchange(n)}}catch(e){throw t.logging?.error(`Finalize login session error`,e),e}}export{o as finalizeSessionHandler,a as startSessionHandler};
2
+ //# sourceMappingURL=embedded.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedded.mjs","names":[],"sources":["../../src/handlers/embedded.ts"],"sourcesContent":["import type { FlowState, SDKOptions } from '../types/oidc';\nimport type { EmbeddedParams } from '../types/embedded';\nimport { buildAuthorizationUrl, finalizeLoginSession } from '../utils/oidc';\nimport { OidcError, ProtocolError, throwHttpError } from '../utils/errors';\nimport type { createBaseFlow } from '../flows/base';\n\n/**\n * Starts a login session by initiating the authentication flow.\n *\n * @param {object} params - The parameters for starting the login session.\n * @param {ReturnType<typeof createBaseFlow>} params.base - The base flow instance.\n * @param {SDKOptions} params.options - The SDK options.\n * @param {FlowState} params.flowState - The current flow state.\n * @param {EmbeddedParams} params.params - The parameters for the login session.\n * @returns {Promise<void>} A promise that resolves when the session is started.\n * @throws {Error} If there is an error during the session start process.\n */\nexport async function startSessionHandler({\n\tbase,\n\toptions,\n\tflowState,\n\tparams,\n}: {\n\tbase: ReturnType<typeof createBaseFlow>;\n\toptions: SDKOptions;\n\tflowState: FlowState;\n\tparams: EmbeddedParams;\n}): Promise<void> {\n\tif (options.logging) {\n\t\toptions.logging.xEventId = undefined;\n\t\toptions.logging.info('Starting login flow session');\n\t}\n\n\tbase.dispatchEvent('flowInitiated', []);\n\n\ttry {\n\t\tconst serverSessionUri = typeof options.serverSessionUri !== 'boolean' ? options.serverSessionUri : undefined;\n\t\tconst url = await buildAuthorizationUrl({\n\t\t\turl: serverSessionUri,\n\t\t\tincludeOAuthParams: !serverSessionUri,\n\t\t\tpersistState: !serverSessionUri,\n\t\t\tparams,\n\t\t\toptions,\n\t\t});\n\n\t\turl.searchParams.set('sdk', 'web-embedded');\n\n\t\tconst response = await options.httpClient.request<string>(url, {\n\t\t\tmethod: 'GET',\n\t\t\tcredentials: 'include',\n\t\t\theaders: { 'Accept-language': params.language ?? flowState.language },\n\t\t});\n\n\t\tif (!response.ok) {\n\t\t\tthrowHttpError(response.status, 'Failed to start login session');\n\t\t}\n\n\t\tlet uri: URL;\n\t\tlet searchParams: Record<string, string> = {};\n\n\t\ttry {\n\t\t\turi = new URL(await response.text());\n\t\t\tsearchParams = Object.fromEntries(uri.searchParams.entries());\n\t\t} catch {\n\t\t\turi = new URL(response.url);\n\t\t\tsearchParams = Object.fromEntries(uri.searchParams.entries());\n\t\t}\n\n\t\tif (searchParams.error) {\n\t\t\tthrow new OidcError(searchParams.error, searchParams.error_description, searchParams.error_uri);\n\t\t}\n\n\t\tif (searchParams.code) {\n\t\t\tif (!uri.toString().startsWith(options.redirectUri)) {\n\t\t\t\tthrow new ProtocolError('Invalid redirect URI');\n\t\t\t}\n\n\t\t\tif (options.serverSessionUri) {\n\t\t\t\tglobalThis.location.href = uri.toString();\n\t\t\t} else {\n\t\t\t\tawait base.tokenExchange(searchParams);\n\t\t\t}\n\t\t} else if (searchParams.session_id) {\n\t\t\tif (!searchParams.short_app_id) {\n\t\t\t\tthrow new ProtocolError('short_app_id is missing in the response');\n\t\t\t}\n\n\t\t\tflowState.sessionId = searchParams.session_id;\n\t\t\tflowState.shortAppId = searchParams.short_app_id;\n\t\t\tflowState.language = searchParams.language ?? flowState.language;\n\t\t} else {\n\t\t\tthrow new ProtocolError('Neither \"code\" nor \"session_id\" is present in the response');\n\t\t}\n\t} catch (error) {\n\t\toptions.logging?.error('Start login session error', error);\n\t\tthrow error;\n\t}\n}\n\n/**\n * Finalizes the login session by exchanging the authorization code for tokens.\n *\n * @param {object} params - The parameters for finalizing the login session.\n * @param {ReturnType<typeof createBaseFlow>} params.base - The base flow instance.\n * @param {SDKOptions} params.options - The SDK options.\n * @param {FlowState} params.flowState - The current flow state.\n * @param {string | URL} params.url - The URL containing the authorization code.\n * @returns {Promise<void>} A promise that resolves when the session is finalized.\n * @throws {Error} If the session ID is missing or if there is an error during the finalization process.\n */\nexport async function finalizeSessionHandler({\n\tbase,\n\toptions,\n\tflowState,\n\turl,\n}: {\n\tbase: ReturnType<typeof createBaseFlow>;\n\toptions: SDKOptions;\n\tflowState: FlowState;\n\turl: string | URL;\n}): Promise<void> {\n\t// NOTE: Collect session data from the host element if not already set in the state.\n\tif (!flowState.sessionId && globalThis.sty.hostElement?.sessionId) {\n\t\tflowState.sessionId = globalThis.sty.hostElement.sessionId;\n\t}\n\tif (!flowState.shortAppId && globalThis.sty.hostElement?.shortAppId) {\n\t\tflowState.shortAppId = globalThis.sty.hostElement.shortAppId;\n\t}\n\tif (flowState.language !== globalThis.sty.hostElement?.lang && globalThis.sty.hostElement?.lang) {\n\t\tflowState.language = globalThis.sty.hostElement.lang;\n\t}\n\n\toptions.logging?.debug('Finalizing login session');\n\n\tif (!flowState.sessionId) {\n\t\tconst error = new Error('Session ID is missing. Cannot finalize login session.');\n\t\toptions.logging?.error('Failed to finalize login session', error);\n\t\tthrow error;\n\t}\n\n\ttry {\n\t\tconst redirectUri = await finalizeLoginSession({\n\t\t\turl,\n\t\t\tsessionId: flowState.sessionId,\n\t\t\tlanguage: flowState.language,\n\t\t\toptions,\n\t\t});\n\n\t\tif (options.serverSessionUri) {\n\t\t\tglobalThis.location.href = redirectUri.toString();\n\t\t} else {\n\t\t\tconst params = (await options.callbackHandler(redirectUri, options.responseMode)) as Record<string, string>;\n\t\t\tawait base.tokenExchange(params);\n\t\t}\n\t} catch (error) {\n\t\toptions.logging?.error('Finalize login session error', error);\n\t\tthrow error;\n\t}\n}\n"],"mappings":"qIAiBA,eAAsB,EAAoB,CACzC,OACA,UACA,YACA,UAMiB,CACb,EAAQ,UACX,EAAQ,QAAQ,SAAW,IAAA,GAC3B,EAAQ,QAAQ,KAAK,6BAA6B,GAGnD,EAAK,cAAc,gBAAiB,CAAC,CAAC,EAEtC,GAAI,CACH,IAAM,EAAmB,OAAO,EAAQ,kBAAqB,UAAuC,IAAA,GAA3B,EAAQ,iBAC3E,EAAM,MAAM,EAAsB,CACvC,IAAK,EACL,mBAAoB,CAAC,EACrB,aAAc,CAAC,EACf,SACA,SACD,CAAC,EAED,EAAI,aAAa,IAAI,MAAO,cAAc,EAE1C,IAAM,EAAW,MAAM,EAAQ,WAAW,QAAgB,EAAK,CAC9D,OAAQ,MACR,YAAa,UACb,QAAS,CAAE,kBAAmB,EAAO,UAAY,EAAU,QAAS,CACrE,CAAC,EAEI,EAAS,IACb,EAAe,EAAS,OAAQ,+BAA+B,EAGhE,IAAI,EACA,EAAuC,CAAC,EAE5C,GAAI,CACH,EAAM,IAAI,IAAI,MAAM,EAAS,KAAK,CAAC,EACnC,EAAe,OAAO,YAAY,EAAI,aAAa,QAAQ,CAAC,CAC7D,MAAQ,CACP,EAAM,IAAI,IAAI,EAAS,GAAG,EAC1B,EAAe,OAAO,YAAY,EAAI,aAAa,QAAQ,CAAC,CAC7D,CAEA,GAAI,EAAa,MAChB,MAAM,IAAI,EAAU,EAAa,MAAO,EAAa,kBAAmB,EAAa,SAAS,EAG/F,GAAI,EAAa,KAAM,CACtB,GAAI,CAAC,EAAI,SAAS,CAAC,CAAC,WAAW,EAAQ,WAAW,EACjD,MAAM,IAAI,EAAc,sBAAsB,EAG3C,EAAQ,iBACX,WAAW,SAAS,KAAO,EAAI,SAAS,EAExC,MAAM,EAAK,cAAc,CAAY,CAEvC,MAAO,GAAI,EAAa,WAAY,CACnC,GAAI,CAAC,EAAa,aACjB,MAAM,IAAI,EAAc,yCAAyC,EAGlE,EAAU,UAAY,EAAa,WACnC,EAAU,WAAa,EAAa,aACpC,EAAU,SAAW,EAAa,UAAY,EAAU,QACzD,MACC,MAAM,IAAI,EAAc,4DAA4D,CAEtF,OAAS,EAAO,CAEf,MADA,EAAQ,SAAS,MAAM,4BAA6B,CAAK,EACnD,CACP,CACD,CAaA,eAAsB,EAAuB,CAC5C,OACA,UACA,YACA,OAMiB,CAcjB,GAZI,CAAC,EAAU,WAAa,WAAW,IAAI,aAAa,YACvD,EAAU,UAAY,WAAW,IAAI,YAAY,WAE9C,CAAC,EAAU,YAAc,WAAW,IAAI,aAAa,aACxD,EAAU,WAAa,WAAW,IAAI,YAAY,YAE/C,EAAU,WAAa,WAAW,IAAI,aAAa,MAAQ,WAAW,IAAI,aAAa,OAC1F,EAAU,SAAW,WAAW,IAAI,YAAY,MAGjD,EAAQ,SAAS,MAAM,0BAA0B,EAE7C,CAAC,EAAU,UAAW,CACzB,IAAM,EAAY,MAAM,uDAAuD,EAE/E,MADA,EAAQ,SAAS,MAAM,mCAAoC,CAAK,EAC1D,CACP,CAEA,GAAI,CACH,IAAM,EAAc,MAAM,EAAqB,CAC9C,MACA,UAAW,EAAU,UACrB,SAAU,EAAU,SACpB,SACD,CAAC,EAED,GAAI,EAAQ,iBACX,WAAW,SAAS,KAAO,EAAY,SAAS,MAC1C,CACN,IAAM,EAAU,MAAM,EAAQ,gBAAgB,EAAa,EAAQ,YAAY,EAC/E,MAAM,EAAK,cAAc,CAAM,CAChC,CACD,OAAS,EAAO,CAEf,MADA,EAAQ,SAAS,MAAM,+BAAgC,CAAK,EACtD,CACP,CACD"}
@@ -0,0 +1 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./redirect.cjs"),t=require("./popup.cjs");exports.popupCallbackHandler=t.popupCallbackHandler,exports.popupUrlHandler=t.popupUrlHandler,exports.redirectCallbackHandler=e.redirectCallbackHandler,exports.redirectUrlHandler=e.redirectUrlHandler;
@@ -0,0 +1,2 @@
1
+ export * from './popup';
2
+ export * from './redirect';
@@ -0,0 +1 @@
1
+ import{redirectCallbackHandler as e,redirectUrlHandler as t}from"./redirect.mjs";import{popupCallbackHandler as n,popupUrlHandler as r}from"./popup.mjs";export{n as popupCallbackHandler,r as popupUrlHandler,e as redirectCallbackHandler,t as redirectUrlHandler};
@@ -0,0 +1,2 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../utils/errors.cjs"),t=require("../assets/oidc.cjs");async function n({base:e,options:n,flowState:r,formId:a,body:o={}}){if(!r.sessionId){let e=Error(`Session ID is missing. Cannot submit form.`);throw n.logging?.error(`Failed to submit form`,e),e}a&&n.logging?.debug(`Submitting form: ${a}`);try{let s=await t._({formId:a,body:o,sessionId:r.sessionId,language:r.language,options:n}),c=s.finalizeUrl?.trim();return c?await i({url:c,flowState:r,base:e,options:n}):s.screen&&n.logging?.info(`Rendering screen: ${s.screen}`),s}catch(e){throw n.logging?.error(`Form submission failed`,e),e}}async function r({base:r,options:i,flowState:a,params:o}){i.logging&&(i.logging.xEventId=void 0,i.logging.info(`Starting login flow session`)),r.dispatchEvent(`flowInitiated`,[]);try{if(o.sessionId)return a.sessionId=o.sessionId,await n({flowState:a,base:r,options:i});let s=typeof i.serverSessionUri==`boolean`?void 0:i.serverSessionUri,c=await t.t({url:s,includeOAuthParams:!s,persistState:!s,params:o,options:i});c.searchParams.set(`sdk`,`web`);let l=await i.httpClient.request(c,{method:`GET`,credentials:`include`,headers:{"Accept-language":o.language??a.language}});l.ok||e.throwHttpError(l.status,`Failed to start login session`);let u,d={};try{u=new URL(await l.text()),d=Object.fromEntries(u.searchParams.entries())}catch{u=new URL(l.url),d=Object.fromEntries(u.searchParams.entries())}if(d.error)throw new e.OidcError(d.error,d.error_description,d.error_uri);if(d.code){if(!u.toString().startsWith(i.redirectUri))throw new e.ProtocolError(`Invalid redirect URI`);i.serverSessionUri?globalThis.location.href=u.toString():await r.tokenExchange(d)}else if(d.session_id)return a.sessionId=d.session_id,a.shortAppId=d.short_app_id??null,a.language=d.language??a.language,await n({flowState:a,base:r,options:i});else throw new e.ProtocolError(`Neither "code" nor "session_id" is present in the response`)}catch(e){throw i.logging?.error(`Start login session error`,e),e}}async function i({base:e,options:n,flowState:r,url:i}){if(n.logging?.debug(`Finalizing login session`),!r.sessionId){let e=Error(`Session ID is missing. Cannot finalize login session.`);throw n.logging?.error(`Failed to finalize login session`,e),e}try{let a=await t.s({url:i,sessionId:r.sessionId,language:r.language,options:n});if(n.serverSessionUri)globalThis.location.href=a.toString();else{let t=await n.callbackHandler(a,n.responseMode);await e.tokenExchange(t)}}catch(e){throw n.logging?.error(`Finalize login session error`,e),e}}exports.finalizeSessionHandler=i,exports.startSessionHandler=r,exports.submitFormHandler=n;
2
+ //# sourceMappingURL=native.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native.cjs","names":[],"sources":["../../src/handlers/native.ts"],"sourcesContent":["import type { FlowState, SDKOptions } from '../types/oidc';\nimport type { NativeFlowState, NativeParams } from '../types/native';\nimport { buildAuthorizationUrl, finalizeLoginSession, submitLoginForm } from '../utils/oidc';\nimport { OidcError, ProtocolError, throwHttpError } from '../utils/errors';\nimport type { createBaseFlow } from '../flows/base';\n\n/**\n * Submits a login form with the provided form ID and request body.\n *\n * @param {object} params - The parameters for the form submission.\n * @param {ReturnType<typeof createBaseFlow>} params.base - The base flow instance.\n * @param {SDKOptions} params.options - The SDK options.\n * @param {FlowState} params.flowState - The current flow state.\n * @param {string} [params.formId] - The ID of the form to be submitted.\n * @param {Record<string, unknown>} [params.body] - The request body to be sent with the form submission.\n * @returns {Promise<NativeFlowState>} A promise that resolves to the login flow state after form submission.\n * @throws {Error} If there is an error during the form submission process.\n */\nexport async function submitFormHandler({\n\tbase,\n\toptions,\n\tflowState,\n\tformId,\n\tbody = {},\n}: {\n\tbase: ReturnType<typeof createBaseFlow>;\n\toptions: SDKOptions;\n\tflowState: FlowState;\n\tformId?: string;\n\tbody?: Record<string, unknown>;\n}): Promise<NativeFlowState> {\n\tif (!flowState.sessionId) {\n\t\tconst error = new Error('Session ID is missing. Cannot submit form.');\n\t\toptions.logging?.error('Failed to submit form', error);\n\t\tthrow error;\n\t}\n\n\tif (formId) {\n\t\toptions.logging?.debug(`Submitting form: ${formId}`);\n\t}\n\n\ttry {\n\t\tconst data = await submitLoginForm({\n\t\t\tformId,\n\t\t\tbody,\n\t\t\tsessionId: flowState.sessionId,\n\t\t\tlanguage: flowState.language,\n\t\t\toptions,\n\t\t});\n\n\t\tconst finalizeUrl = data.finalizeUrl?.trim();\n\n\t\tif (finalizeUrl) {\n\t\t\tawait finalizeSessionHandler({ url: finalizeUrl, flowState, base, options });\n\t\t} else if (data.screen) {\n\t\t\toptions.logging?.info(`Rendering screen: ${data.screen}`);\n\t\t}\n\n\t\treturn data;\n\t} catch (error) {\n\t\toptions.logging?.error('Form submission failed', error);\n\t\tthrow error;\n\t}\n}\n\n/**\n * Starts a login session by initiating the authentication flow.\n *\n * @param {object} params - The parameters for starting the login session.\n * @param {ReturnType<typeof createBaseFlow>} params.base - The base flow instance.\n * @param {SDKOptions} params.options - The SDK options.\n * @param {FlowState} params.flowState - The current flow state.\n * @param {NativeParams} params.params - The parameters for the login session.\n * @returns {Promise<NativeFlowState | void>} A promise that resolves to the login flow state after starting the session, or void if the session is finalized.\n * @throws {Error} If there is an error during the session start process.\n */\nexport async function startSessionHandler({\n\tbase,\n\toptions,\n\tflowState,\n\tparams,\n}: {\n\tbase: ReturnType<typeof createBaseFlow>;\n\toptions: SDKOptions;\n\tflowState: FlowState;\n\tparams: NativeParams;\n}): Promise<NativeFlowState | void> {\n\tif (options.logging) {\n\t\toptions.logging.xEventId = undefined;\n\t\toptions.logging.info('Starting login flow session');\n\t}\n\n\tbase.dispatchEvent('flowInitiated', []);\n\n\ttry {\n\t\tif (params.sessionId) {\n\t\t\tflowState.sessionId = params.sessionId;\n\t\t\treturn await submitFormHandler({ flowState, base, options });\n\t\t}\n\n\t\tconst serverSessionUri = typeof options.serverSessionUri !== 'boolean' ? options.serverSessionUri : undefined;\n\t\tconst url = await buildAuthorizationUrl({\n\t\t\turl: serverSessionUri,\n\t\t\tincludeOAuthParams: !serverSessionUri,\n\t\t\tpersistState: !serverSessionUri,\n\t\t\tparams,\n\t\t\toptions,\n\t\t});\n\n\t\turl.searchParams.set('sdk', 'web');\n\n\t\tconst response = await options.httpClient.request<string>(url, {\n\t\t\tmethod: 'GET',\n\t\t\tcredentials: 'include',\n\t\t\theaders: { 'Accept-language': params.language ?? flowState.language },\n\t\t});\n\n\t\tif (!response.ok) {\n\t\t\tthrowHttpError(response.status, 'Failed to start login session');\n\t\t}\n\n\t\tlet uri: URL;\n\t\tlet searchParams: Record<string, string> = {};\n\n\t\ttry {\n\t\t\turi = new URL(await response.text());\n\t\t\tsearchParams = Object.fromEntries(uri.searchParams.entries());\n\t\t} catch {\n\t\t\turi = new URL(response.url);\n\t\t\tsearchParams = Object.fromEntries(uri.searchParams.entries());\n\t\t}\n\n\t\tif (searchParams.error) {\n\t\t\tthrow new OidcError(searchParams.error, searchParams.error_description, searchParams.error_uri);\n\t\t}\n\n\t\tif (searchParams.code) {\n\t\t\tif (!uri.toString().startsWith(options.redirectUri)) {\n\t\t\t\tthrow new ProtocolError('Invalid redirect URI');\n\t\t\t}\n\n\t\t\tif (options.serverSessionUri) {\n\t\t\t\tglobalThis.location.href = uri.toString();\n\t\t\t} else {\n\t\t\t\tawait base.tokenExchange(searchParams);\n\t\t\t}\n\t\t} else if (searchParams.session_id) {\n\t\t\tflowState.sessionId = searchParams.session_id;\n\t\t\tflowState.shortAppId = searchParams.short_app_id ?? null;\n\t\t\tflowState.language = searchParams.language ?? flowState.language;\n\n\t\t\treturn await submitFormHandler({ flowState, base, options });\n\t\t} else {\n\t\t\tthrow new ProtocolError('Neither \"code\" nor \"session_id\" is present in the response');\n\t\t}\n\t} catch (error) {\n\t\toptions.logging?.error('Start login session error', error);\n\t\tthrow error;\n\t}\n}\n\n/**\n * Finalizes the login session by exchanging the authorization code for tokens.\n *\n * @param {object} params - The parameters for finalizing the login session.\n * @param {ReturnType<typeof createBaseFlow>} params.base - The base flow instance.\n * @param {SDKOptions} params.options - The SDK options.\n * @param {FlowState} params.flowState - The current flow state.\n * @param {string | URL} params.url - The URL containing the authorization code.\n * @returns {Promise<void>} A promise that resolves when the session is finalized.\n * @throws {Error} If the session ID is missing or if there is an error during the finalization process.\n */\nexport async function finalizeSessionHandler({\n\tbase,\n\toptions,\n\tflowState,\n\turl,\n}: {\n\tbase: ReturnType<typeof createBaseFlow>;\n\toptions: SDKOptions;\n\tflowState: FlowState;\n\turl: string | URL;\n}): Promise<void> {\n\toptions.logging?.debug('Finalizing login session');\n\n\tif (!flowState.sessionId) {\n\t\tconst error = new Error('Session ID is missing. Cannot finalize login session.');\n\t\toptions.logging?.error('Failed to finalize login session', error);\n\t\tthrow error;\n\t}\n\n\ttry {\n\t\tconst redirectUri = await finalizeLoginSession({\n\t\t\turl,\n\t\t\tsessionId: flowState.sessionId,\n\t\t\tlanguage: flowState.language,\n\t\t\toptions,\n\t\t});\n\n\t\tif (options.serverSessionUri) {\n\t\t\tglobalThis.location.href = redirectUri.toString();\n\t\t} else {\n\t\t\tconst params = (await options.callbackHandler(redirectUri, options.responseMode)) as Record<string, string>;\n\t\t\tawait base.tokenExchange(params);\n\t\t}\n\t} catch (error) {\n\t\toptions.logging?.error('Finalize login session error', error);\n\t\tthrow error;\n\t}\n}\n"],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ import { FlowState, SDKOptions } from '../types/oidc';
2
+ import { NativeFlowState, NativeParams } from '../types/native';
3
+ import { createBaseFlow } from '../flows/base';
4
+ /**
5
+ * Submits a login form with the provided form ID and request body.
6
+ *
7
+ * @param {object} params - The parameters for the form submission.
8
+ * @param {ReturnType<typeof createBaseFlow>} params.base - The base flow instance.
9
+ * @param {SDKOptions} params.options - The SDK options.
10
+ * @param {FlowState} params.flowState - The current flow state.
11
+ * @param {string} [params.formId] - The ID of the form to be submitted.
12
+ * @param {Record<string, unknown>} [params.body] - The request body to be sent with the form submission.
13
+ * @returns {Promise<NativeFlowState>} A promise that resolves to the login flow state after form submission.
14
+ * @throws {Error} If there is an error during the form submission process.
15
+ */
16
+ export declare function submitFormHandler({ base, options, flowState, formId, body, }: {
17
+ base: ReturnType<typeof createBaseFlow>;
18
+ options: SDKOptions;
19
+ flowState: FlowState;
20
+ formId?: string;
21
+ body?: Record<string, unknown>;
22
+ }): Promise<NativeFlowState>;
23
+ /**
24
+ * Starts a login session by initiating the authentication flow.
25
+ *
26
+ * @param {object} params - The parameters for starting the login session.
27
+ * @param {ReturnType<typeof createBaseFlow>} params.base - The base flow instance.
28
+ * @param {SDKOptions} params.options - The SDK options.
29
+ * @param {FlowState} params.flowState - The current flow state.
30
+ * @param {NativeParams} params.params - The parameters for the login session.
31
+ * @returns {Promise<NativeFlowState | void>} A promise that resolves to the login flow state after starting the session, or void if the session is finalized.
32
+ * @throws {Error} If there is an error during the session start process.
33
+ */
34
+ export declare function startSessionHandler({ base, options, flowState, params, }: {
35
+ base: ReturnType<typeof createBaseFlow>;
36
+ options: SDKOptions;
37
+ flowState: FlowState;
38
+ params: NativeParams;
39
+ }): Promise<NativeFlowState | void>;
40
+ /**
41
+ * Finalizes the login session by exchanging the authorization code for tokens.
42
+ *
43
+ * @param {object} params - The parameters for finalizing the login session.
44
+ * @param {ReturnType<typeof createBaseFlow>} params.base - The base flow instance.
45
+ * @param {SDKOptions} params.options - The SDK options.
46
+ * @param {FlowState} params.flowState - The current flow state.
47
+ * @param {string | URL} params.url - The URL containing the authorization code.
48
+ * @returns {Promise<void>} A promise that resolves when the session is finalized.
49
+ * @throws {Error} If the session ID is missing or if there is an error during the finalization process.
50
+ */
51
+ export declare function finalizeSessionHandler({ base, options, flowState, url, }: {
52
+ base: ReturnType<typeof createBaseFlow>;
53
+ options: SDKOptions;
54
+ flowState: FlowState;
55
+ url: string | URL;
56
+ }): Promise<void>;
@@ -0,0 +1,2 @@
1
+ import{OidcError as e,ProtocolError as t,throwHttpError as n}from"../utils/errors.mjs";import{_ as r,s as i,t as a}from"../assets/oidc.mjs";async function o({base:e,options:t,flowState:n,formId:i,body:a={}}){if(!n.sessionId){let e=Error(`Session ID is missing. Cannot submit form.`);throw t.logging?.error(`Failed to submit form`,e),e}i&&t.logging?.debug(`Submitting form: ${i}`);try{let o=await r({formId:i,body:a,sessionId:n.sessionId,language:n.language,options:t}),s=o.finalizeUrl?.trim();return s?await c({url:s,flowState:n,base:e,options:t}):o.screen&&t.logging?.info(`Rendering screen: ${o.screen}`),o}catch(e){throw t.logging?.error(`Form submission failed`,e),e}}async function s({base:r,options:i,flowState:s,params:c}){i.logging&&(i.logging.xEventId=void 0,i.logging.info(`Starting login flow session`)),r.dispatchEvent(`flowInitiated`,[]);try{if(c.sessionId)return s.sessionId=c.sessionId,await o({flowState:s,base:r,options:i});let l=typeof i.serverSessionUri==`boolean`?void 0:i.serverSessionUri,u=await a({url:l,includeOAuthParams:!l,persistState:!l,params:c,options:i});u.searchParams.set(`sdk`,`web`);let d=await i.httpClient.request(u,{method:`GET`,credentials:`include`,headers:{"Accept-language":c.language??s.language}});d.ok||n(d.status,`Failed to start login session`);let f,p={};try{f=new URL(await d.text()),p=Object.fromEntries(f.searchParams.entries())}catch{f=new URL(d.url),p=Object.fromEntries(f.searchParams.entries())}if(p.error)throw new e(p.error,p.error_description,p.error_uri);if(p.code){if(!f.toString().startsWith(i.redirectUri))throw new t(`Invalid redirect URI`);i.serverSessionUri?globalThis.location.href=f.toString():await r.tokenExchange(p)}else if(p.session_id)return s.sessionId=p.session_id,s.shortAppId=p.short_app_id??null,s.language=p.language??s.language,await o({flowState:s,base:r,options:i});else throw new t(`Neither "code" nor "session_id" is present in the response`)}catch(e){throw i.logging?.error(`Start login session error`,e),e}}async function c({base:e,options:t,flowState:n,url:r}){if(t.logging?.debug(`Finalizing login session`),!n.sessionId){let e=Error(`Session ID is missing. Cannot finalize login session.`);throw t.logging?.error(`Failed to finalize login session`,e),e}try{let a=await i({url:r,sessionId:n.sessionId,language:n.language,options:t});if(t.serverSessionUri)globalThis.location.href=a.toString();else{let n=await t.callbackHandler(a,t.responseMode);await e.tokenExchange(n)}}catch(e){throw t.logging?.error(`Finalize login session error`,e),e}}export{c as finalizeSessionHandler,s as startSessionHandler,o as submitFormHandler};
2
+ //# sourceMappingURL=native.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native.mjs","names":[],"sources":["../../src/handlers/native.ts"],"sourcesContent":["import type { FlowState, SDKOptions } from '../types/oidc';\nimport type { NativeFlowState, NativeParams } from '../types/native';\nimport { buildAuthorizationUrl, finalizeLoginSession, submitLoginForm } from '../utils/oidc';\nimport { OidcError, ProtocolError, throwHttpError } from '../utils/errors';\nimport type { createBaseFlow } from '../flows/base';\n\n/**\n * Submits a login form with the provided form ID and request body.\n *\n * @param {object} params - The parameters for the form submission.\n * @param {ReturnType<typeof createBaseFlow>} params.base - The base flow instance.\n * @param {SDKOptions} params.options - The SDK options.\n * @param {FlowState} params.flowState - The current flow state.\n * @param {string} [params.formId] - The ID of the form to be submitted.\n * @param {Record<string, unknown>} [params.body] - The request body to be sent with the form submission.\n * @returns {Promise<NativeFlowState>} A promise that resolves to the login flow state after form submission.\n * @throws {Error} If there is an error during the form submission process.\n */\nexport async function submitFormHandler({\n\tbase,\n\toptions,\n\tflowState,\n\tformId,\n\tbody = {},\n}: {\n\tbase: ReturnType<typeof createBaseFlow>;\n\toptions: SDKOptions;\n\tflowState: FlowState;\n\tformId?: string;\n\tbody?: Record<string, unknown>;\n}): Promise<NativeFlowState> {\n\tif (!flowState.sessionId) {\n\t\tconst error = new Error('Session ID is missing. Cannot submit form.');\n\t\toptions.logging?.error('Failed to submit form', error);\n\t\tthrow error;\n\t}\n\n\tif (formId) {\n\t\toptions.logging?.debug(`Submitting form: ${formId}`);\n\t}\n\n\ttry {\n\t\tconst data = await submitLoginForm({\n\t\t\tformId,\n\t\t\tbody,\n\t\t\tsessionId: flowState.sessionId,\n\t\t\tlanguage: flowState.language,\n\t\t\toptions,\n\t\t});\n\n\t\tconst finalizeUrl = data.finalizeUrl?.trim();\n\n\t\tif (finalizeUrl) {\n\t\t\tawait finalizeSessionHandler({ url: finalizeUrl, flowState, base, options });\n\t\t} else if (data.screen) {\n\t\t\toptions.logging?.info(`Rendering screen: ${data.screen}`);\n\t\t}\n\n\t\treturn data;\n\t} catch (error) {\n\t\toptions.logging?.error('Form submission failed', error);\n\t\tthrow error;\n\t}\n}\n\n/**\n * Starts a login session by initiating the authentication flow.\n *\n * @param {object} params - The parameters for starting the login session.\n * @param {ReturnType<typeof createBaseFlow>} params.base - The base flow instance.\n * @param {SDKOptions} params.options - The SDK options.\n * @param {FlowState} params.flowState - The current flow state.\n * @param {NativeParams} params.params - The parameters for the login session.\n * @returns {Promise<NativeFlowState | void>} A promise that resolves to the login flow state after starting the session, or void if the session is finalized.\n * @throws {Error} If there is an error during the session start process.\n */\nexport async function startSessionHandler({\n\tbase,\n\toptions,\n\tflowState,\n\tparams,\n}: {\n\tbase: ReturnType<typeof createBaseFlow>;\n\toptions: SDKOptions;\n\tflowState: FlowState;\n\tparams: NativeParams;\n}): Promise<NativeFlowState | void> {\n\tif (options.logging) {\n\t\toptions.logging.xEventId = undefined;\n\t\toptions.logging.info('Starting login flow session');\n\t}\n\n\tbase.dispatchEvent('flowInitiated', []);\n\n\ttry {\n\t\tif (params.sessionId) {\n\t\t\tflowState.sessionId = params.sessionId;\n\t\t\treturn await submitFormHandler({ flowState, base, options });\n\t\t}\n\n\t\tconst serverSessionUri = typeof options.serverSessionUri !== 'boolean' ? options.serverSessionUri : undefined;\n\t\tconst url = await buildAuthorizationUrl({\n\t\t\turl: serverSessionUri,\n\t\t\tincludeOAuthParams: !serverSessionUri,\n\t\t\tpersistState: !serverSessionUri,\n\t\t\tparams,\n\t\t\toptions,\n\t\t});\n\n\t\turl.searchParams.set('sdk', 'web');\n\n\t\tconst response = await options.httpClient.request<string>(url, {\n\t\t\tmethod: 'GET',\n\t\t\tcredentials: 'include',\n\t\t\theaders: { 'Accept-language': params.language ?? flowState.language },\n\t\t});\n\n\t\tif (!response.ok) {\n\t\t\tthrowHttpError(response.status, 'Failed to start login session');\n\t\t}\n\n\t\tlet uri: URL;\n\t\tlet searchParams: Record<string, string> = {};\n\n\t\ttry {\n\t\t\turi = new URL(await response.text());\n\t\t\tsearchParams = Object.fromEntries(uri.searchParams.entries());\n\t\t} catch {\n\t\t\turi = new URL(response.url);\n\t\t\tsearchParams = Object.fromEntries(uri.searchParams.entries());\n\t\t}\n\n\t\tif (searchParams.error) {\n\t\t\tthrow new OidcError(searchParams.error, searchParams.error_description, searchParams.error_uri);\n\t\t}\n\n\t\tif (searchParams.code) {\n\t\t\tif (!uri.toString().startsWith(options.redirectUri)) {\n\t\t\t\tthrow new ProtocolError('Invalid redirect URI');\n\t\t\t}\n\n\t\t\tif (options.serverSessionUri) {\n\t\t\t\tglobalThis.location.href = uri.toString();\n\t\t\t} else {\n\t\t\t\tawait base.tokenExchange(searchParams);\n\t\t\t}\n\t\t} else if (searchParams.session_id) {\n\t\t\tflowState.sessionId = searchParams.session_id;\n\t\t\tflowState.shortAppId = searchParams.short_app_id ?? null;\n\t\t\tflowState.language = searchParams.language ?? flowState.language;\n\n\t\t\treturn await submitFormHandler({ flowState, base, options });\n\t\t} else {\n\t\t\tthrow new ProtocolError('Neither \"code\" nor \"session_id\" is present in the response');\n\t\t}\n\t} catch (error) {\n\t\toptions.logging?.error('Start login session error', error);\n\t\tthrow error;\n\t}\n}\n\n/**\n * Finalizes the login session by exchanging the authorization code for tokens.\n *\n * @param {object} params - The parameters for finalizing the login session.\n * @param {ReturnType<typeof createBaseFlow>} params.base - The base flow instance.\n * @param {SDKOptions} params.options - The SDK options.\n * @param {FlowState} params.flowState - The current flow state.\n * @param {string | URL} params.url - The URL containing the authorization code.\n * @returns {Promise<void>} A promise that resolves when the session is finalized.\n * @throws {Error} If the session ID is missing or if there is an error during the finalization process.\n */\nexport async function finalizeSessionHandler({\n\tbase,\n\toptions,\n\tflowState,\n\turl,\n}: {\n\tbase: ReturnType<typeof createBaseFlow>;\n\toptions: SDKOptions;\n\tflowState: FlowState;\n\turl: string | URL;\n}): Promise<void> {\n\toptions.logging?.debug('Finalizing login session');\n\n\tif (!flowState.sessionId) {\n\t\tconst error = new Error('Session ID is missing. Cannot finalize login session.');\n\t\toptions.logging?.error('Failed to finalize login session', error);\n\t\tthrow error;\n\t}\n\n\ttry {\n\t\tconst redirectUri = await finalizeLoginSession({\n\t\t\turl,\n\t\t\tsessionId: flowState.sessionId,\n\t\t\tlanguage: flowState.language,\n\t\t\toptions,\n\t\t});\n\n\t\tif (options.serverSessionUri) {\n\t\t\tglobalThis.location.href = redirectUri.toString();\n\t\t} else {\n\t\t\tconst params = (await options.callbackHandler(redirectUri, options.responseMode)) as Record<string, string>;\n\t\t\tawait base.tokenExchange(params);\n\t\t}\n\t} catch (error) {\n\t\toptions.logging?.error('Finalize login session error', error);\n\t\tthrow error;\n\t}\n}\n"],"mappings":"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"}