capacitor-oidc 0.0.6 → 0.1.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configuration.js","sourceRoot":"","sources":["../../src/configuration.ts"],"names":[],"mappings":"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","sourcesContent":["import type { UserManagerSettings } from 'oidc-client-ts';\n\nimport type {\n CapacitorOidcNativeOptions,\n CapacitorSigninArgs,\n CapacitorSignoutArgs,\n CapacitorUserManagerConfiguration,\n CapacitorUserManagerSettings,\n} from './definitions.js';\nimport { CapacitorOidcError } from './errors.js';\n\nexport type RuntimePlatform = 'android' | 'ios' | 'web';\n\nexport interface ResolvedUserManagerConfiguration {\n platform: RuntimePlatform;\n settings: UserManagerSettings;\n nativeOptions?: CapacitorOidcNativeOptions;\n signinMode: 'popup' | 'redirect';\n signoutMode: 'popup' | 'redirect';\n signinArgs: CapacitorSigninArgs;\n signoutArgs: CapacitorSignoutArgs;\n}\n\nexport function resolveConfiguration(\n configuration: CapacitorUserManagerConfiguration,\n platform: RuntimePlatform,\n): ResolvedUserManagerConfiguration {\n if (platform === 'web') return resolveWebConfiguration(configuration);\n return resolveNativeConfiguration(configuration, platform);\n}\n\nexport function resolveLegacyNativeConfiguration(\n settings: CapacitorUserManagerSettings,\n nativeOptions: CapacitorOidcNativeOptions,\n platform: RuntimePlatform,\n): ResolvedUserManagerConfiguration {\n if (platform === 'web') {\n throw new CapacitorOidcError(\n 'UNSUPPORTED_RUNTIME',\n 'Legacy CapacitorUserManager settings are only supported on iOS and Android',\n );\n }\n\n assertPublicClient(settings);\n if ('dpop' in settings) {\n throw new CapacitorOidcError('UNSUPPORTED_RUNTIME', 'Native configuration does not support dpop');\n }\n\n return resolvedNativeConfiguration(platform, settings, nativeOptions);\n}\n\nfunction resolveWebConfiguration(configuration: CapacitorUserManagerConfiguration): ResolvedUserManagerConfiguration {\n const web = configuration.web;\n if (!web) unsupportedConfiguration('web');\n\n const signoutMode = web.signoutMode ?? 'redirect';\n const settings: UserManagerSettings = { ...configuration.common, ...web.settings };\n assertPublicClient(settings);\n if (signoutMode === 'popup' && !settings.popup_post_logout_redirect_uri && !settings.post_logout_redirect_uri) {\n throw new CapacitorOidcError(\n 'UNSUPPORTED_RUNTIME',\n 'Web popup signout requires post_logout_redirect_uri or popup_post_logout_redirect_uri',\n );\n }\n\n return {\n platform: 'web',\n settings,\n signinMode: web.signinMode ?? 'redirect',\n signoutMode,\n signinArgs: web.signinArgs ?? {},\n signoutArgs: web.signoutArgs ?? {},\n };\n}\n\nfunction resolveNativeConfiguration(\n configuration: CapacitorUserManagerConfiguration,\n platform: 'android' | 'ios',\n): ResolvedUserManagerConfiguration {\n const native = configuration.native;\n if (!native) unsupportedConfiguration(platform);\n\n const override = configuration[platform];\n const settings = { ...configuration.common, ...native.settings, ...override?.settings };\n assertPublicClient(settings);\n assertNativeSettings(settings);\n\n return resolvedNativeConfiguration(\n platform,\n settings,\n { ...native.options, ...override?.options },\n { ...native.signinArgs, ...override?.signinArgs },\n { ...native.signoutArgs, ...override?.signoutArgs },\n );\n}\n\nfunction resolvedNativeConfiguration(\n platform: 'android' | 'ios',\n settings: UserManagerSettings,\n nativeOptions: CapacitorOidcNativeOptions,\n signinArgs: CapacitorSigninArgs = {},\n signoutArgs: CapacitorSignoutArgs = {},\n): ResolvedUserManagerConfiguration {\n return {\n platform,\n settings: { ...settings, response_type: 'code', disablePKCE: false, monitorSession: false },\n nativeOptions,\n signinMode: 'popup',\n signoutMode: 'popup',\n signinArgs,\n signoutArgs,\n };\n}\n\nfunction assertPublicClient(settings: object): void {\n const unsupported = ['client_authentication', 'client_secret', 'disablePKCE', 'response_type'].find(\n (key) => key in settings,\n );\n if (unsupported) {\n throw new CapacitorOidcError('UNSUPPORTED_RUNTIME', `Public-client configuration does not support ${unsupported}`);\n }\n}\n\nfunction assertNativeSettings(settings: object): void {\n const unsupported = ['dpop', 'monitorSession', 'silent_redirect_uri', 'stateStore', 'userStore'].find(\n (key) => key in settings,\n );\n if (unsupported) {\n throw new CapacitorOidcError('UNSUPPORTED_RUNTIME', `Native configuration does not support ${unsupported}`);\n }\n}\n\nfunction unsupportedConfiguration(platform: RuntimePlatform): never {\n throw new CapacitorOidcError('UNSUPPORTED_RUNTIME', `No ${platform} configuration was provided`);\n}\n"]}
@@ -1,4 +1,4 @@
1
- import type { UserManagerSettings } from 'oidc-client-ts';
1
+ import type { SigninPopupArgs, SigninRedirectArgs, SignoutPopupArgs, SignoutRedirectArgs, UserManagerSettings } from 'oidc-client-ts';
2
2
  export type CapacitorOidcErrorCode = 'AUTH_SESSION_IN_PROGRESS' | 'USER_CANCELLED' | 'BROWSER_UNAVAILABLE' | 'INVALID_CALLBACK' | 'SECURE_STORAGE_ERROR' | 'UNSUPPORTED_RUNTIME';
3
3
  export interface IOSNativeOptions {
4
4
  keychainAccessGroup?: string;
@@ -9,8 +9,58 @@ export interface CapacitorOidcNativeOptions {
9
9
  prefersEphemeralWebBrowserSession?: boolean;
10
10
  storageNamespace?: string;
11
11
  }
12
- type UnsupportedSettings = 'client_secret' | 'client_authentication' | 'disablePKCE' | 'dpop' | 'monitorSession' | 'response_type' | 'silent_redirect_uri' | 'stateStore' | 'userStore';
13
- export type CapacitorUserManagerSettings = Omit<UserManagerSettings, UnsupportedSettings>;
12
+ type UnsafePublicClientSettings = 'client_secret' | 'client_authentication' | 'disablePKCE' | 'response_type';
13
+ type LegacyUnsupportedSettings = UnsafePublicClientSettings | 'dpop' | 'monitorSession' | 'silent_redirect_uri' | 'stateStore' | 'userStore';
14
+ type WebOnlySettings = 'checkSessionIntervalInSeconds' | 'dpop' | 'iframeNotifyParentOrigin' | 'iframeScriptOrigin' | 'includeIdTokenInSilentSignout' | 'monitorAnonymousSession' | 'monitorSession' | 'popup_post_logout_redirect_uri' | 'popup_redirect_uri' | 'popupWindowFeatures' | 'popupWindowTarget' | 'query_status_response_type' | 'redirectMethod' | 'redirectTarget' | 'silent_redirect_uri' | 'silentRequestTimeoutInSeconds' | 'stateStore' | 'stopCheckSessionOnError' | 'userStore';
15
+ type PublicClientUserManagerSettings = Omit<UserManagerSettings, UnsafePublicClientSettings>;
16
+ type NativeUserManagerSettings = Omit<PublicClientUserManagerSettings, WebOnlySettings>;
17
+ /** @deprecated Use CapacitorUserManagerConfiguration. */
18
+ export type CapacitorUserManagerSettings = Omit<UserManagerSettings, LegacyUnsupportedSettings>;
19
+ export type CapacitorUserManagerCommonSettings = Omit<PublicClientUserManagerSettings, WebOnlySettings | 'post_logout_redirect_uri' | 'redirect_uri'>;
20
+ export type CapacitorWebUserManagerSettings = Partial<Omit<PublicClientUserManagerSettings, 'redirect_uri'>> & {
21
+ redirect_uri: string;
22
+ };
23
+ export type CapacitorNativeUserManagerSettings = Partial<Omit<NativeUserManagerSettings, 'redirect_uri'>> & {
24
+ redirect_uri: string;
25
+ };
26
+ export type CapacitorSigninArgs = SigninPopupArgs & SigninRedirectArgs;
27
+ export type CapacitorSignoutArgs = SignoutPopupArgs & SignoutRedirectArgs;
28
+ interface CapacitorWebUserManagerConfigurationBase {
29
+ settings: CapacitorWebUserManagerSettings;
30
+ signinMode?: 'popup' | 'redirect';
31
+ signinArgs?: CapacitorSigninArgs;
32
+ signoutArgs?: CapacitorSignoutArgs;
33
+ }
34
+ type PopupSignoutSettings = CapacitorWebUserManagerSettings & ({
35
+ popup_post_logout_redirect_uri: string;
36
+ } | {
37
+ post_logout_redirect_uri: string;
38
+ });
39
+ export type CapacitorWebUserManagerConfiguration = (CapacitorWebUserManagerConfigurationBase & {
40
+ signoutMode: 'popup';
41
+ settings: PopupSignoutSettings;
42
+ }) | (CapacitorWebUserManagerConfigurationBase & {
43
+ signoutMode?: 'redirect';
44
+ });
45
+ export interface CapacitorNativeUserManagerConfiguration {
46
+ settings: CapacitorNativeUserManagerSettings;
47
+ options?: CapacitorOidcNativeOptions;
48
+ signinArgs?: CapacitorSigninArgs;
49
+ signoutArgs?: CapacitorSignoutArgs;
50
+ }
51
+ export interface CapacitorNativeUserManagerOverride {
52
+ settings?: Partial<CapacitorNativeUserManagerSettings>;
53
+ options?: CapacitorOidcNativeOptions;
54
+ signinArgs?: CapacitorSigninArgs;
55
+ signoutArgs?: CapacitorSignoutArgs;
56
+ }
57
+ export interface CapacitorUserManagerConfiguration {
58
+ common: CapacitorUserManagerCommonSettings;
59
+ web?: CapacitorWebUserManagerConfiguration;
60
+ native?: CapacitorNativeUserManagerConfiguration;
61
+ ios?: CapacitorNativeUserManagerOverride;
62
+ android?: CapacitorNativeUserManagerOverride;
63
+ }
14
64
  export interface StoredSessionV1 {
15
65
  version: 1;
16
66
  issuer: string;
@@ -1 +1 @@
1
- {"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/definitions.ts"],"names":[],"mappings":"","sourcesContent":["import type { UserManagerSettings } from 'oidc-client-ts';\n\nexport type CapacitorOidcErrorCode =\n | 'AUTH_SESSION_IN_PROGRESS'\n | 'USER_CANCELLED'\n | 'BROWSER_UNAVAILABLE'\n | 'INVALID_CALLBACK'\n | 'SECURE_STORAGE_ERROR'\n | 'UNSUPPORTED_RUNTIME';\n\nexport interface IOSNativeOptions {\n keychainAccessGroup?: string;\n keychainAccessibility?: 'afterFirstUnlockThisDeviceOnly' | 'whenUnlockedThisDeviceOnly';\n}\n\nexport interface CapacitorOidcNativeOptions {\n ios?: IOSNativeOptions;\n prefersEphemeralWebBrowserSession?: boolean;\n storageNamespace?: string;\n}\n\ntype UnsupportedSettings =\n | 'client_secret'\n | 'client_authentication'\n | 'disablePKCE'\n | 'dpop'\n | 'monitorSession'\n | 'response_type'\n | 'silent_redirect_uri'\n | 'stateStore'\n | 'userStore';\n\nexport type CapacitorUserManagerSettings = Omit<UserManagerSettings, UnsupportedSettings>;\n\nexport interface StoredSessionV1 {\n version: 1;\n issuer: string;\n clientId: string;\n accessToken: string;\n refreshToken?: string;\n idToken?: string;\n tokenType: string;\n scope?: string;\n expiresAt?: number;\n}\n\nexport interface NativeOpenOptions {\n url: string;\n callbackUrl: string;\n prefersEphemeralWebBrowserSession: boolean;\n}\n\nexport interface NativeStorageOptions {\n namespace: string;\n key: string;\n}\n\nexport interface CapacitorOidcPlugin {\n configure(options: IOSNativeOptions): Promise<void>;\n open(options: NativeOpenOptions): Promise<{ url: string }>;\n cancel(): Promise<void>;\n storageSet(options: NativeStorageOptions & { value: string }): Promise<void>;\n storageGet(options: NativeStorageOptions): Promise<{ value: string | null }>;\n storageRemove(options: NativeStorageOptions): Promise<{ value: string | null }>;\n storageGetAllKeys(options: { namespace: string }): Promise<{ keys: string[] }>;\n setSessionSnapshot(options: { namespace: string; value: string | null }): Promise<void>;\n}\n"]}
1
+ {"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/definitions.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n SigninPopupArgs,\n SigninRedirectArgs,\n SignoutPopupArgs,\n SignoutRedirectArgs,\n UserManagerSettings,\n} from 'oidc-client-ts';\n\nexport type CapacitorOidcErrorCode =\n | 'AUTH_SESSION_IN_PROGRESS'\n | 'USER_CANCELLED'\n | 'BROWSER_UNAVAILABLE'\n | 'INVALID_CALLBACK'\n | 'SECURE_STORAGE_ERROR'\n | 'UNSUPPORTED_RUNTIME';\n\nexport interface IOSNativeOptions {\n keychainAccessGroup?: string;\n keychainAccessibility?: 'afterFirstUnlockThisDeviceOnly' | 'whenUnlockedThisDeviceOnly';\n}\n\nexport interface CapacitorOidcNativeOptions {\n ios?: IOSNativeOptions;\n prefersEphemeralWebBrowserSession?: boolean;\n storageNamespace?: string;\n}\n\ntype UnsafePublicClientSettings = 'client_secret' | 'client_authentication' | 'disablePKCE' | 'response_type';\n\ntype LegacyUnsupportedSettings =\n | UnsafePublicClientSettings\n | 'dpop'\n | 'monitorSession'\n | 'silent_redirect_uri'\n | 'stateStore'\n | 'userStore';\n\ntype WebOnlySettings =\n | 'checkSessionIntervalInSeconds'\n | 'dpop'\n | 'iframeNotifyParentOrigin'\n | 'iframeScriptOrigin'\n | 'includeIdTokenInSilentSignout'\n | 'monitorAnonymousSession'\n | 'monitorSession'\n | 'popup_post_logout_redirect_uri'\n | 'popup_redirect_uri'\n | 'popupWindowFeatures'\n | 'popupWindowTarget'\n | 'query_status_response_type'\n | 'redirectMethod'\n | 'redirectTarget'\n | 'silent_redirect_uri'\n | 'silentRequestTimeoutInSeconds'\n | 'stateStore'\n | 'stopCheckSessionOnError'\n | 'userStore';\n\ntype PublicClientUserManagerSettings = Omit<UserManagerSettings, UnsafePublicClientSettings>;\ntype NativeUserManagerSettings = Omit<PublicClientUserManagerSettings, WebOnlySettings>;\n\n/** @deprecated Use CapacitorUserManagerConfiguration. */\nexport type CapacitorUserManagerSettings = Omit<UserManagerSettings, LegacyUnsupportedSettings>;\n\nexport type CapacitorUserManagerCommonSettings = Omit<\n PublicClientUserManagerSettings,\n WebOnlySettings | 'post_logout_redirect_uri' | 'redirect_uri'\n>;\n\nexport type CapacitorWebUserManagerSettings = Partial<Omit<PublicClientUserManagerSettings, 'redirect_uri'>> & {\n redirect_uri: string;\n};\n\nexport type CapacitorNativeUserManagerSettings = Partial<Omit<NativeUserManagerSettings, 'redirect_uri'>> & {\n redirect_uri: string;\n};\n\nexport type CapacitorSigninArgs = SigninPopupArgs & SigninRedirectArgs;\nexport type CapacitorSignoutArgs = SignoutPopupArgs & SignoutRedirectArgs;\n\ninterface CapacitorWebUserManagerConfigurationBase {\n settings: CapacitorWebUserManagerSettings;\n signinMode?: 'popup' | 'redirect';\n signinArgs?: CapacitorSigninArgs;\n signoutArgs?: CapacitorSignoutArgs;\n}\n\ntype PopupSignoutSettings = CapacitorWebUserManagerSettings &\n ({ popup_post_logout_redirect_uri: string } | { post_logout_redirect_uri: string });\n\nexport type CapacitorWebUserManagerConfiguration =\n | (CapacitorWebUserManagerConfigurationBase & {\n signoutMode: 'popup';\n settings: PopupSignoutSettings;\n })\n | (CapacitorWebUserManagerConfigurationBase & {\n signoutMode?: 'redirect';\n });\n\nexport interface CapacitorNativeUserManagerConfiguration {\n settings: CapacitorNativeUserManagerSettings;\n options?: CapacitorOidcNativeOptions;\n signinArgs?: CapacitorSigninArgs;\n signoutArgs?: CapacitorSignoutArgs;\n}\n\nexport interface CapacitorNativeUserManagerOverride {\n settings?: Partial<CapacitorNativeUserManagerSettings>;\n options?: CapacitorOidcNativeOptions;\n signinArgs?: CapacitorSigninArgs;\n signoutArgs?: CapacitorSignoutArgs;\n}\n\nexport interface CapacitorUserManagerConfiguration {\n common: CapacitorUserManagerCommonSettings;\n web?: CapacitorWebUserManagerConfiguration;\n native?: CapacitorNativeUserManagerConfiguration;\n ios?: CapacitorNativeUserManagerOverride;\n android?: CapacitorNativeUserManagerOverride;\n}\n\nexport interface StoredSessionV1 {\n version: 1;\n issuer: string;\n clientId: string;\n accessToken: string;\n refreshToken?: string;\n idToken?: string;\n tokenType: string;\n scope?: string;\n expiresAt?: number;\n}\n\nexport interface NativeOpenOptions {\n url: string;\n callbackUrl: string;\n prefersEphemeralWebBrowserSession: boolean;\n}\n\nexport interface NativeStorageOptions {\n namespace: string;\n key: string;\n}\n\nexport interface CapacitorOidcPlugin {\n configure(options: IOSNativeOptions): Promise<void>;\n open(options: NativeOpenOptions): Promise<{ url: string }>;\n cancel(): Promise<void>;\n storageSet(options: NativeStorageOptions & { value: string }): Promise<void>;\n storageGet(options: NativeStorageOptions): Promise<{ value: string | null }>;\n storageRemove(options: NativeStorageOptions): Promise<{ value: string | null }>;\n storageGetAllKeys(options: { namespace: string }): Promise<{ keys: string[] }>;\n setSessionSnapshot(options: { namespace: string; value: string | null }): Promise<void>;\n}\n"]}
@@ -1,6 +1,7 @@
1
- export { CapacitorUserManager } from './capacitor-user-manager.js';
1
+ import { CapacitorUserManager } from './capacitor-user-manager.js';
2
+ export { CapacitorUserManager };
2
3
  export { CapacitorSecureStateStore } from './capacitor-secure-state-store.js';
3
4
  export { CapacitorOidcError } from './errors.js';
4
- export type { CapacitorOidcErrorCode, CapacitorOidcNativeOptions, CapacitorUserManagerSettings, IOSNativeOptions, StoredSessionV1, } from './definitions.js';
5
- export { User } from 'oidc-client-ts';
6
- export type { UserManagerEvents } from 'oidc-client-ts';
5
+ export type { CapacitorOidcErrorCode, CapacitorOidcNativeOptions, CapacitorNativeUserManagerConfiguration, CapacitorNativeUserManagerOverride, CapacitorNativeUserManagerSettings, CapacitorSigninArgs, CapacitorSignoutArgs, CapacitorUserManagerCommonSettings, CapacitorUserManagerConfiguration, CapacitorUserManagerSettings, CapacitorWebUserManagerConfiguration, CapacitorWebUserManagerSettings, IOSNativeOptions, StoredSessionV1, } from './definitions.js';
6
+ export { User, WebStorageStateStore } from 'oidc-client-ts';
7
+ export type { StateStore, UserManagerEvents } from 'oidc-client-ts';
package/dist/esm/index.js CHANGED
@@ -1,5 +1,11 @@
1
- export { CapacitorUserManager } from './capacitor-user-manager.js';
1
+ import { CapacitorUserManager, setPlatformUserManagerFactory } from './capacitor-user-manager.js';
2
+ import { NativeCapacitorUserManager } from './native-capacitor-user-manager.js';
3
+ import { WebCapacitorUserManager } from './web-capacitor-user-manager.js';
4
+ setPlatformUserManagerFactory((configuration) => configuration.platform === 'web'
5
+ ? new WebCapacitorUserManager(configuration)
6
+ : NativeCapacitorUserManager.fromConfiguration(configuration));
7
+ export { CapacitorUserManager };
2
8
  export { CapacitorSecureStateStore } from './capacitor-secure-state-store.js';
3
9
  export { CapacitorOidcError } from './errors.js';
4
- export { User } from 'oidc-client-ts';
10
+ export { User, WebStorageStateStore } from 'oidc-client-ts';
5
11
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAQjD,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC","sourcesContent":["export { CapacitorUserManager } from './capacitor-user-manager.js';\nexport { CapacitorSecureStateStore } from './capacitor-secure-state-store.js';\nexport { CapacitorOidcError } from './errors.js';\nexport type {\n CapacitorOidcErrorCode,\n CapacitorOidcNativeOptions,\n CapacitorUserManagerSettings,\n IOSNativeOptions,\n StoredSessionV1,\n} from './definitions.js';\nexport { User } from 'oidc-client-ts';\nexport type { UserManagerEvents } from 'oidc-client-ts';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAClG,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAChF,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAE1E,6BAA6B,CAAC,CAAC,aAAa,EAAE,EAAE,CAC9C,aAAa,CAAC,QAAQ,KAAK,KAAK;IAC9B,CAAC,CAAC,IAAI,uBAAuB,CAAC,aAAa,CAAC;IAC5C,CAAC,CAAC,0BAA0B,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAChE,CAAC;AAEF,OAAO,EAAE,oBAAoB,EAAE,CAAC;AAChC,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAiBjD,OAAO,EAAE,IAAI,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC","sourcesContent":["import { CapacitorUserManager, setPlatformUserManagerFactory } from './capacitor-user-manager.js';\nimport { NativeCapacitorUserManager } from './native-capacitor-user-manager.js';\nimport { WebCapacitorUserManager } from './web-capacitor-user-manager.js';\n\nsetPlatformUserManagerFactory((configuration) =>\n configuration.platform === 'web'\n ? new WebCapacitorUserManager(configuration)\n : NativeCapacitorUserManager.fromConfiguration(configuration),\n);\n\nexport { CapacitorUserManager };\nexport { CapacitorSecureStateStore } from './capacitor-secure-state-store.js';\nexport { CapacitorOidcError } from './errors.js';\nexport type {\n CapacitorOidcErrorCode,\n CapacitorOidcNativeOptions,\n CapacitorNativeUserManagerConfiguration,\n CapacitorNativeUserManagerOverride,\n CapacitorNativeUserManagerSettings,\n CapacitorSigninArgs,\n CapacitorSignoutArgs,\n CapacitorUserManagerCommonSettings,\n CapacitorUserManagerConfiguration,\n CapacitorUserManagerSettings,\n CapacitorWebUserManagerConfiguration,\n CapacitorWebUserManagerSettings,\n IOSNativeOptions,\n StoredSessionV1,\n} from './definitions.js';\nexport { User, WebStorageStateStore } from 'oidc-client-ts';\nexport type { StateStore, UserManagerEvents } from 'oidc-client-ts';\n"]}
@@ -0,0 +1,24 @@
1
+ import { type QuerySessionStatusArgs, type SessionStatus, type SigninRedirectArgs, type SigninSilentArgs, type SignoutRedirectArgs, type SignoutResponse, type SignoutSilentArgs, type User } from 'oidc-client-ts';
2
+ import { CapacitorUserManager } from './capacitor-user-manager.js';
3
+ import type { ResolvedUserManagerConfiguration } from './configuration.js';
4
+ export declare class NativeCapacitorUserManager extends CapacitorUserManager {
5
+ private appStateListener?;
6
+ private readonly storageNamespace;
7
+ private constructor();
8
+ static fromConfiguration(configuration: ResolvedUserManagerConfiguration): Promise<NativeCapacitorUserManager>;
9
+ protected initialize(): Promise<void>;
10
+ signinRedirect(_args?: SigninRedirectArgs): Promise<void>;
11
+ signinRedirectCallback(_url?: string): Promise<User>;
12
+ signinCallback(_url?: string): Promise<User | undefined>;
13
+ signinSilentCallback(_url?: string): Promise<void>;
14
+ signoutRedirect(_args?: SignoutRedirectArgs): Promise<void>;
15
+ signoutRedirectCallback(_url?: string): Promise<SignoutResponse>;
16
+ signoutCallback(_url?: string, _keepOpen?: boolean): Promise<SignoutResponse | undefined>;
17
+ signoutSilent(_args?: SignoutSilentArgs): Promise<void>;
18
+ signoutSilentCallback(_url?: string): Promise<void>;
19
+ querySessionStatus(_args?: QuerySessionStatusArgs): Promise<SessionStatus | null>;
20
+ storeUser(user: User | null): Promise<void>;
21
+ cancel(): Promise<void>;
22
+ protected disposePlatform(): Promise<void>;
23
+ protected performSilentSignin(args: SigninSilentArgs): Promise<User | null>;
24
+ }
@@ -0,0 +1,112 @@
1
+ import { App } from '@capacitor/app';
2
+ import { ErrorResponse, } from 'oidc-client-ts';
3
+ import { CapacitorNavigator, UnsupportedIframeNavigator } from './capacitor-navigator.js';
4
+ import { CapacitorSecureStateStore } from './capacitor-secure-state-store.js';
5
+ import { CapacitorUserManager } from './capacitor-user-manager.js';
6
+ import { unsupported } from './errors.js';
7
+ import { NativeOidc } from './native.js';
8
+ export class NativeCapacitorUserManager extends CapacitorUserManager {
9
+ appStateListener;
10
+ storageNamespace;
11
+ constructor(configuration) {
12
+ const storageNamespace = configuration.nativeOptions?.storageNamespace ?? 'default';
13
+ const stateStore = new CapacitorSecureStateStore(`${storageNamespace}.transactions`);
14
+ const userStore = new CapacitorSecureStateStore(`${storageNamespace}.session`);
15
+ const navigator = new CapacitorNavigator(configuration.nativeOptions?.prefersEphemeralWebBrowserSession ?? false);
16
+ super({
17
+ ...configuration,
18
+ settings: {
19
+ ...configuration.settings,
20
+ popup_redirect_uri: configuration.settings.redirect_uri,
21
+ popup_post_logout_redirect_uri: configuration.settings.post_logout_redirect_uri,
22
+ stateStore,
23
+ userStore,
24
+ },
25
+ }, navigator, navigator, new UnsupportedIframeNavigator());
26
+ this.storageNamespace = storageNamespace;
27
+ }
28
+ static async fromConfiguration(configuration) {
29
+ await NativeOidc.configure(configuration.nativeOptions?.ios ?? {});
30
+ return new NativeCapacitorUserManager(configuration);
31
+ }
32
+ async initialize() {
33
+ await super.initialize();
34
+ this.appStateListener = await App.addListener('appStateChange', ({ isActive }) => {
35
+ if (isActive)
36
+ this.checkForAutomaticRenewal();
37
+ });
38
+ this.checkForAutomaticRenewal();
39
+ }
40
+ async signinRedirect(_args = {}) {
41
+ unsupported('Redirect navigation');
42
+ }
43
+ async signinRedirectCallback(_url) {
44
+ unsupported('Redirect navigation');
45
+ }
46
+ async signinCallback(_url) {
47
+ unsupported('Browser callback dispatch');
48
+ }
49
+ async signinSilentCallback(_url) {
50
+ unsupported('Iframe navigation');
51
+ }
52
+ async signoutRedirect(_args = {}) {
53
+ unsupported('Redirect navigation');
54
+ }
55
+ async signoutRedirectCallback(_url) {
56
+ unsupported('Redirect navigation');
57
+ }
58
+ async signoutCallback(_url, _keepOpen) {
59
+ unsupported('Browser callback dispatch');
60
+ }
61
+ async signoutSilent(_args = {}) {
62
+ unsupported('Iframe logout');
63
+ }
64
+ async signoutSilentCallback(_url) {
65
+ unsupported('Iframe logout');
66
+ }
67
+ async querySessionStatus(_args = {}) {
68
+ unsupported('Browser session monitoring');
69
+ }
70
+ async storeUser(user) {
71
+ await super.storeUser(user);
72
+ await NativeOidc.setSessionSnapshot({
73
+ namespace: this.storageNamespace,
74
+ value: user
75
+ ? JSON.stringify(toStoredSession(user, user.profile.iss ?? this.settings.metadata?.issuer ?? this.settings.authority, this.settings.client_id))
76
+ : null,
77
+ });
78
+ }
79
+ cancel() {
80
+ return NativeOidc.cancel();
81
+ }
82
+ async disposePlatform() {
83
+ await this.appStateListener?.remove();
84
+ }
85
+ async performSilentSignin(args) {
86
+ const user = await this.getUser();
87
+ if (!user?.refresh_token) {
88
+ if (user?.expired)
89
+ await this.removeUserWithoutWaiting();
90
+ return null;
91
+ }
92
+ return super.performSilentSignin({ ...args, forceIframeAuth: false }).catch(async (error) => {
93
+ if (error instanceof ErrorResponse && error.error === 'invalid_grant')
94
+ await this.removeUserWithoutWaiting();
95
+ throw error;
96
+ });
97
+ }
98
+ }
99
+ function toStoredSession(user, issuer, clientId) {
100
+ return {
101
+ version: 1,
102
+ issuer,
103
+ clientId,
104
+ accessToken: user.access_token,
105
+ refreshToken: user.refresh_token,
106
+ idToken: user.id_token,
107
+ tokenType: user.token_type,
108
+ scope: user.scope,
109
+ expiresAt: user.expires_at,
110
+ };
111
+ }
112
+ //# sourceMappingURL=native-capacitor-user-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native-capacitor-user-manager.js","sourceRoot":"","sources":["../../src/native-capacitor-user-manager.ts"],"names":[],"mappings":"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","sourcesContent":["import { App } from '@capacitor/app';\nimport type { PluginListenerHandle } from '@capacitor/core';\nimport {\n ErrorResponse,\n type QuerySessionStatusArgs,\n type SessionStatus,\n type SigninRedirectArgs,\n type SigninSilentArgs,\n type SignoutRedirectArgs,\n type SignoutResponse,\n type SignoutSilentArgs,\n type User,\n} from 'oidc-client-ts';\n\nimport { CapacitorNavigator, UnsupportedIframeNavigator } from './capacitor-navigator.js';\nimport { CapacitorSecureStateStore } from './capacitor-secure-state-store.js';\nimport { CapacitorUserManager } from './capacitor-user-manager.js';\nimport type { ResolvedUserManagerConfiguration } from './configuration.js';\nimport type { StoredSessionV1 } from './definitions.js';\nimport { unsupported } from './errors.js';\nimport { NativeOidc } from './native.js';\n\nexport class NativeCapacitorUserManager extends CapacitorUserManager {\n private appStateListener?: PluginListenerHandle;\n private readonly storageNamespace: string;\n\n private constructor(configuration: ResolvedUserManagerConfiguration) {\n const storageNamespace = configuration.nativeOptions?.storageNamespace ?? 'default';\n const stateStore = new CapacitorSecureStateStore(`${storageNamespace}.transactions`);\n const userStore = new CapacitorSecureStateStore(`${storageNamespace}.session`);\n const navigator = new CapacitorNavigator(configuration.nativeOptions?.prefersEphemeralWebBrowserSession ?? false);\n super(\n {\n ...configuration,\n settings: {\n ...configuration.settings,\n popup_redirect_uri: configuration.settings.redirect_uri,\n popup_post_logout_redirect_uri: configuration.settings.post_logout_redirect_uri,\n stateStore,\n userStore,\n },\n },\n navigator,\n navigator,\n new UnsupportedIframeNavigator(),\n );\n this.storageNamespace = storageNamespace;\n }\n\n static async fromConfiguration(configuration: ResolvedUserManagerConfiguration): Promise<NativeCapacitorUserManager> {\n await NativeOidc.configure(configuration.nativeOptions?.ios ?? {});\n return new NativeCapacitorUserManager(configuration);\n }\n\n protected override async initialize(): Promise<void> {\n await super.initialize();\n this.appStateListener = await App.addListener('appStateChange', ({ isActive }) => {\n if (isActive) this.checkForAutomaticRenewal();\n });\n this.checkForAutomaticRenewal();\n }\n\n override async signinRedirect(_args: SigninRedirectArgs = {}): Promise<void> {\n unsupported('Redirect navigation');\n }\n\n override async signinRedirectCallback(_url?: string): Promise<User> {\n unsupported('Redirect navigation');\n }\n\n override async signinCallback(_url?: string): Promise<User | undefined> {\n unsupported('Browser callback dispatch');\n }\n\n override async signinSilentCallback(_url?: string): Promise<void> {\n unsupported('Iframe navigation');\n }\n\n override async signoutRedirect(_args: SignoutRedirectArgs = {}): Promise<void> {\n unsupported('Redirect navigation');\n }\n\n override async signoutRedirectCallback(_url?: string): Promise<SignoutResponse> {\n unsupported('Redirect navigation');\n }\n\n override async signoutCallback(_url?: string, _keepOpen?: boolean): Promise<SignoutResponse | undefined> {\n unsupported('Browser callback dispatch');\n }\n\n override async signoutSilent(_args: SignoutSilentArgs = {}): Promise<void> {\n unsupported('Iframe logout');\n }\n\n override async signoutSilentCallback(_url?: string): Promise<void> {\n unsupported('Iframe logout');\n }\n\n override async querySessionStatus(_args: QuerySessionStatusArgs = {}): Promise<SessionStatus | null> {\n unsupported('Browser session monitoring');\n }\n\n override async storeUser(user: User | null): Promise<void> {\n await super.storeUser(user);\n await NativeOidc.setSessionSnapshot({\n namespace: this.storageNamespace,\n value: user\n ? JSON.stringify(\n toStoredSession(\n user,\n user.profile.iss ?? this.settings.metadata?.issuer ?? this.settings.authority,\n this.settings.client_id,\n ),\n )\n : null,\n });\n }\n\n override cancel(): Promise<void> {\n return NativeOidc.cancel();\n }\n\n protected override async disposePlatform(): Promise<void> {\n await this.appStateListener?.remove();\n }\n\n protected override async performSilentSignin(args: SigninSilentArgs): Promise<User | null> {\n const user = await this.getUser();\n if (!user?.refresh_token) {\n if (user?.expired) await this.removeUserWithoutWaiting();\n return null;\n }\n\n return super.performSilentSignin({ ...args, forceIframeAuth: false }).catch(async (error: unknown) => {\n if (error instanceof ErrorResponse && error.error === 'invalid_grant') await this.removeUserWithoutWaiting();\n throw error;\n });\n }\n}\n\nfunction toStoredSession(user: User, issuer: string, clientId: string): StoredSessionV1 {\n return {\n version: 1,\n issuer,\n clientId,\n accessToken: user.access_token,\n refreshToken: user.refresh_token,\n idToken: user.id_token,\n tokenType: user.token_type,\n scope: user.scope,\n expiresAt: user.expires_at,\n };\n}\n"]}
@@ -0,0 +1,11 @@
1
+ import { type QuerySessionStatusArgs, type SessionStatus } from 'oidc-client-ts';
2
+ import { CapacitorUserManager } from './capacitor-user-manager.js';
3
+ import type { ResolvedUserManagerConfiguration } from './configuration.js';
4
+ export declare class WebCapacitorUserManager extends CapacitorUserManager {
5
+ private readonly sessionMonitor?;
6
+ private disposed;
7
+ constructor(configuration: ResolvedUserManagerConfiguration);
8
+ querySessionStatus(args?: QuerySessionStatusArgs): Promise<SessionStatus | null>;
9
+ protected disposePlatform(): Promise<void>;
10
+ private captureSessionMonitor;
11
+ }
@@ -0,0 +1,44 @@
1
+ import { CapacitorUserManager } from './capacitor-user-manager.js';
2
+ export class WebCapacitorUserManager extends CapacitorUserManager {
3
+ sessionMonitor;
4
+ disposed = false;
5
+ constructor(configuration) {
6
+ super(configuration);
7
+ this.sessionMonitor = this.captureSessionMonitor();
8
+ }
9
+ async querySessionStatus(args = {}) {
10
+ if (this.disposed)
11
+ return null;
12
+ const session = await super.querySessionStatus(args);
13
+ return this.disposed ? null : session;
14
+ }
15
+ disposePlatform() {
16
+ this.disposed = true;
17
+ if (this.sessionMonitor) {
18
+ this.events.removeUserLoaded(this.sessionMonitor.start);
19
+ this.events.removeUserUnloaded(this.sessionMonitor.stop);
20
+ this.sessionMonitor.stop();
21
+ }
22
+ return Promise.resolve();
23
+ }
24
+ captureSessionMonitor() {
25
+ // oidc-client-ts does not expose public session-monitor lifecycle hooks.
26
+ const monitor = this._sessionMonitor;
27
+ if (!monitor)
28
+ return undefined;
29
+ const originalStart = monitor._start;
30
+ const stop = monitor._stop;
31
+ const start = async (user) => {
32
+ if (this.disposed)
33
+ return;
34
+ await originalStart(user);
35
+ if (this.disposed)
36
+ stop();
37
+ };
38
+ this.events.removeUserLoaded(originalStart);
39
+ this.events.addUserLoaded(start);
40
+ monitor._start = start;
41
+ return { start, stop };
42
+ }
43
+ }
44
+ //# sourceMappingURL=web-capacitor-user-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-capacitor-user-manager.js","sourceRoot":"","sources":["../../src/web-capacitor-user-manager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAanE,MAAM,OAAO,uBAAwB,SAAQ,oBAAoB;IAC9C,cAAc,CAA2B;IAClD,QAAQ,GAAG,KAAK,CAAC;IAEzB,YAAY,aAA+C;QACzD,KAAK,CAAC,aAAa,CAAC,CAAC;QACrB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;IACrD,CAAC;IAEQ,KAAK,CAAC,kBAAkB,CAAC,OAA+B,EAAE;QACjE,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC/B,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;IACxC,CAAC;IAEkB,eAAe;QAChC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YACxD,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YACzD,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;QAC7B,CAAC;QACD,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAEO,qBAAqB;QAC3B,yEAAyE;QACzE,MAAM,OAAO,GAAG,IAAI,CAAC,eAA2D,CAAC;QACjF,IAAI,CAAC,OAAO;YAAE,OAAO,SAAS,CAAC;QAE/B,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;QACrC,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC;QAC3B,MAAM,KAAK,GAAG,KAAK,EAAE,IAAU,EAAE,EAAE;YACjC,IAAI,IAAI,CAAC,QAAQ;gBAAE,OAAO;YAC1B,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;YAC1B,IAAI,IAAI,CAAC,QAAQ;gBAAE,IAAI,EAAE,CAAC;QAC5B,CAAC,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACjC,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC;QACvB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC;CACF","sourcesContent":["import { type QuerySessionStatusArgs, type SessionStatus, type User } from 'oidc-client-ts';\n\nimport { CapacitorUserManager } from './capacitor-user-manager.js';\nimport type { ResolvedUserManagerConfiguration } from './configuration.js';\n\ninterface SessionMonitorLifecycle {\n start(user: User): Promise<void>;\n stop(): void;\n}\n\ninterface InternalSessionMonitor {\n _start(user: User): Promise<void>;\n _stop(): void;\n}\n\nexport class WebCapacitorUserManager extends CapacitorUserManager {\n private readonly sessionMonitor?: SessionMonitorLifecycle;\n private disposed = false;\n\n constructor(configuration: ResolvedUserManagerConfiguration) {\n super(configuration);\n this.sessionMonitor = this.captureSessionMonitor();\n }\n\n override async querySessionStatus(args: QuerySessionStatusArgs = {}): Promise<SessionStatus | null> {\n if (this.disposed) return null;\n const session = await super.querySessionStatus(args);\n return this.disposed ? null : session;\n }\n\n protected override disposePlatform(): Promise<void> {\n this.disposed = true;\n if (this.sessionMonitor) {\n this.events.removeUserLoaded(this.sessionMonitor.start);\n this.events.removeUserUnloaded(this.sessionMonitor.stop);\n this.sessionMonitor.stop();\n }\n return Promise.resolve();\n }\n\n private captureSessionMonitor(): SessionMonitorLifecycle | undefined {\n // oidc-client-ts does not expose public session-monitor lifecycle hooks.\n const monitor = this._sessionMonitor as unknown as InternalSessionMonitor | null;\n if (!monitor) return undefined;\n\n const originalStart = monitor._start;\n const stop = monitor._stop;\n const start = async (user: User) => {\n if (this.disposed) return;\n await originalStart(user);\n if (this.disposed) stop();\n };\n this.events.removeUserLoaded(originalStart);\n this.events.addUserLoaded(start);\n monitor._start = start;\n return { start, stop };\n }\n}\n"]}