@idp.global/sdk 10.0.0 → 12.0.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.
package/changelog.md CHANGED
@@ -1,5 +1,34 @@
1
1
  # Changelog
2
2
 
3
+ ## 2026-07-18 - 12.0.0
4
+
5
+ ### Breaking Changes
6
+
7
+ - adopt interfaces v20 current-user DTO for password auth results (server-client)
8
+ - Upgrade @idp.global/interfaces to ^20.0.1.
9
+ - Change IIdpPasswordAuthResult.user from IUser to ICurrentUserDto to match the privacy-safe whoIs response.
10
+
11
+ ## 2026-07-18 - next
12
+
13
+ ### Breaking Changes
14
+
15
+ - adopt `@idp.global/interfaces` 20 and type password-login identity data as the
16
+ privacy-safe `ICurrentUserDto` actually returned by `whoIs`, rather than the
17
+ persisted `IUser` shape that includes server-only credential fields
18
+
19
+ ## 2026-07-16 - 11.0.0
20
+
21
+ ### Breaking Changes
22
+
23
+ - adopt `@idp.global/interfaces` 13 so SDK activity request responses expose only structured, finite, privacy-safe event classifications
24
+ - remove the singular JWT verification-key fetch and push APIs; backend integrations now use only `getPublicKeysForValidation`, `pushPublicKeysForValidation`, and complete keysets
25
+ - replace browser app metadata in transfer flows with the minimal `transferTarget: { appUrl }` contract, including the `transfertarget` login query parameter
26
+ - reject malformed, non-HTTPS, and credential-bearing transfer targets; bind token requests and navigation to the same immutable target and remove URL-derived logout redirects
27
+
28
+ ### Maintenance
29
+
30
+ - update typed request/socket, smartdata, smartrx, webstore, smartdb, and Node.js type dependencies before release
31
+
3
32
  ## 2026-07-11 - 10.0.0
4
33
 
5
34
  ### Breaking Changes
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@idp.global/sdk',
6
- version: '10.0.0',
6
+ version: '12.0.0',
7
7
  description: 'Reusable browser and server SDK for idp.global authentication.'
8
8
  };
9
9
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSxpQkFBaUI7SUFDdkIsT0FBTyxFQUFFLFFBQVE7SUFDakIsV0FBVyxFQUFFLGdFQUFnRTtDQUM5RSxDQUFBIn0=
@@ -1,15 +1,16 @@
1
1
  import { IdpRequests } from './classes.idprequests.js';
2
2
  import * as plugins from './plugins.js';
3
3
  export declare class IdpClient {
4
+ #private;
4
5
  private helpers;
5
- appData: plugins.idpInterfaces.data.IAppLegacy;
6
6
  rolesReplaySubject: plugins.smartrx.rxjs.ReplaySubject<unknown>;
7
7
  organizationsReplaySubject: plugins.smartrx.rxjs.ReplaySubject<unknown>;
8
8
  parsedReceptionUrl: plugins.smarturl.Smarturl;
9
- constructor(receptionBaseUrlArg: string, appDataArg?: plugins.idpInterfaces.data.IAppLegacy);
9
+ constructor(receptionBaseUrlArg: string, transferTargetArg?: plugins.idpInterfaces.data.ITransferTarget);
10
+ get transferTarget(): Readonly<plugins.idpInterfaces.data.ITransferTarget>;
10
11
  requests: IdpRequests;
11
12
  checkWetherOnReceptionDomain(): boolean;
12
- getAppDataOnSsoDomain(): Promise<any>;
13
+ private normalizeTransferTargetAppUrl;
13
14
  setJwt(jwtStringArg: string): Promise<void>;
14
15
  setRefreshToken(refreshTokenArg: string): Promise<void>;
15
16
  typedsocket: plugins.typedsocket.TypedSocket;
@@ -28,8 +29,9 @@ export declare class IdpClient {
28
29
  refreshJwt(refreshTokenArg?: string): Promise<string | null>;
29
30
  private isAuthInvalidResponse;
30
31
  private validateJwtWithServer;
31
- getTransferToken(appDataArg?: plugins.idpInterfaces.data.IAppLegacy): Promise<string | null>;
32
- getTransferTokenAndSwitchToLocation(newLocationArg: string): Promise<void>;
32
+ getTransferToken(): Promise<string | null>;
33
+ private getTransferTokenForTarget;
34
+ getTransferTokenAndSwitchToLocation(): Promise<void>;
33
35
  private scrubTransferTokenFromCurrentUrl;
34
36
  processTransferToken(): Promise<boolean>;
35
37
  checkJwtPresent(): Promise<boolean>;
@@ -6,11 +6,11 @@ export class IdpClient {
6
6
  return plugins.webjwt.getDataFromJwtString(jwtString);
7
7
  },
8
8
  };
9
- appData;
9
+ #transferTargetAppUrl;
10
10
  rolesReplaySubject = new plugins.smartrx.rxjs.ReplaySubject(1);
11
11
  organizationsReplaySubject = new plugins.smartrx.rxjs.ReplaySubject(1);
12
12
  parsedReceptionUrl;
13
- constructor(receptionBaseUrlArg, appDataArg) {
13
+ constructor(receptionBaseUrlArg, transferTargetArg) {
14
14
  if (receptionBaseUrlArg.endsWith('/')) {
15
15
  receptionBaseUrlArg = receptionBaseUrlArg.slice(0, -1);
16
16
  }
@@ -18,34 +18,30 @@ export class IdpClient {
18
18
  receptionBaseUrlArg = `${receptionBaseUrlArg}/typedrequest`;
19
19
  }
20
20
  this.parsedReceptionUrl = plugins.smarturl.Smarturl.createFromUrl(receptionBaseUrlArg);
21
- if (!appDataArg) {
22
- appDataArg = {
23
- id: '',
24
- appUrl: typeof window !== 'undefined' ? `https://${window.location.host}/` : '',
25
- description: '',
26
- logoUrl: '',
27
- name: '',
28
- };
29
- }
30
- this.appData = appDataArg;
21
+ this.#transferTargetAppUrl = this.normalizeTransferTargetAppUrl(transferTargetArg || {
22
+ appUrl: typeof window !== 'undefined' ? window.location.origin : '',
23
+ });
24
+ }
25
+ get transferTarget() {
26
+ return Object.freeze({ appUrl: this.#transferTargetAppUrl });
31
27
  }
32
28
  requests = new IdpRequests(this);
33
29
  checkWetherOnReceptionDomain() {
34
30
  return plugins.smarturl.Smarturl.createFromUrl(window.location.href).hostname ===
35
31
  this.parsedReceptionUrl.hostname;
36
32
  }
37
- async getAppDataOnSsoDomain() {
38
- if (!window.location.href.startsWith('https://sso.workspace.global/')) {
39
- console.error('You are trying to access SSO appData on a non sso domain.');
40
- return null;
33
+ normalizeTransferTargetAppUrl(transferTargetArg) {
34
+ let appUrl;
35
+ try {
36
+ appUrl = new URL(transferTargetArg.appUrl);
41
37
  }
42
- const appDataString = plugins.smarturl.Smarturl.createFromUrl(window.location.href).searchParams
43
- .appdata;
44
- if (!appDataString) {
45
- console.error('no appdata query arg detected');
46
- return null;
38
+ catch {
39
+ throw new Error('transferTarget.appUrl must be an absolute HTTPS URL');
40
+ }
41
+ if (appUrl.protocol !== 'https:' || appUrl.username || appUrl.password) {
42
+ throw new Error('transferTarget.appUrl must be a credential-free HTTPS URL');
47
43
  }
48
- return plugins.smartjson.parseBase64(appDataString);
44
+ return appUrl.toString();
49
45
  }
50
46
  async setJwt(jwtStringArg) {
51
47
  await this.storeJwt(jwtStringArg);
@@ -148,7 +144,10 @@ export class IdpClient {
148
144
  throw error;
149
145
  }
150
146
  }
151
- async getTransferToken(appDataArg) {
147
+ async getTransferToken() {
148
+ return this.getTransferTokenForTarget(this.transferTarget);
149
+ }
150
+ async getTransferTokenForTarget(transferTargetArg) {
152
151
  await this.performJwtHousekeeping();
153
152
  const refreshToken = await this.getRefreshToken();
154
153
  if (!refreshToken) {
@@ -158,16 +157,17 @@ export class IdpClient {
158
157
  const getTransferToken = this.typedsocket.createTypedRequest('exchangeRefreshTokenAndTransferToken');
159
158
  const response = await getTransferToken.fire({
160
159
  refreshToken,
161
- appData: appDataArg || this.appData,
160
+ transferTarget: transferTargetArg,
162
161
  });
163
162
  return response.transferToken;
164
163
  }
165
- async getTransferTokenAndSwitchToLocation(newLocationArg) {
166
- const transferToken = await this.getTransferToken();
164
+ async getTransferTokenAndSwitchToLocation() {
165
+ const transferTarget = this.transferTarget;
166
+ const transferToken = await this.getTransferTokenForTarget(transferTarget);
167
167
  if (!transferToken) {
168
- alert('failed to get transfer token!');
168
+ throw new Error('IdP did not return a transfer token');
169
169
  }
170
- const urlInstance = plugins.smarturl.Smarturl.createFromUrl(newLocationArg, {
170
+ const urlInstance = plugins.smarturl.Smarturl.createFromUrl(transferTarget.appUrl, {
171
171
  searchParams: { transfertoken: transferToken },
172
172
  });
173
173
  window.location.href = urlInstance.toString();
@@ -193,7 +193,7 @@ export class IdpClient {
193
193
  const getTransferToken = this.typedsocket.createTypedRequest('exchangeRefreshTokenAndTransferToken');
194
194
  const response = await getTransferToken.fire({
195
195
  transferToken,
196
- appData: this.appData,
196
+ transferTarget: this.transferTarget,
197
197
  });
198
198
  if (response.refreshToken) {
199
199
  await this.refreshJwt(response.refreshToken);
@@ -232,7 +232,7 @@ export class IdpClient {
232
232
  if (requireLoginArg) {
233
233
  const urlInstance = plugins.smarturl.Smarturl.createFromUrl(this.parsedReceptionUrl.clone().set('path', '/login').toString(), {
234
234
  searchParams: {
235
- appdata: plugins.smartjson.stringifyBase64(this.appData),
235
+ transfertarget: plugins.smartjson.stringifyBase64(this.transferTarget),
236
236
  },
237
237
  });
238
238
  if (!globalThis.location.href.startsWith(this.parsedReceptionUrl.toString())) {
@@ -292,11 +292,7 @@ export class IdpClient {
292
292
  if (!redirect) {
293
293
  return;
294
294
  }
295
- const appData = await this.getAppDataOnSsoDomain();
296
- if (appData) {
297
- window.location.href = appData.appUrl;
298
- }
299
- else if (window.location.href.startsWith(idpLogoutUrl.origin)) {
295
+ if (window.location.href.startsWith(idpLogoutUrl.origin)) {
300
296
  window.location.href = this.parsedReceptionUrl.origin;
301
297
  }
302
298
  }
@@ -373,4 +369,4 @@ export class IdpClient {
373
369
  return whoIs.fire({ jwt: await this.getJwt() });
374
370
  }
375
371
  }
376
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5pZHBjbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c19icm93c2VyL2NsYXNzZXMuaWRwY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUV4QyxNQUFNLE9BQU8sU0FBUztJQUNaLE9BQU8sR0FBRztRQUNoQixLQUFLLENBQUMsd0JBQXdCLENBQUMsU0FBaUI7WUFDOUMsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3hELENBQUM7S0FDRixDQUFDO0lBRUssT0FBTyxDQUF3QztJQUMvQyxrQkFBa0IsR0FBRyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvRCwwQkFBMEIsR0FBRyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUV2RSxrQkFBa0IsQ0FBNEI7SUFFckQsWUFBWSxtQkFBMkIsRUFBRSxVQUFrRDtRQUN6RixJQUFJLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3RDLG1CQUFtQixHQUFHLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6RCxDQUFDO1FBQ0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO1lBQ25ELG1CQUFtQixHQUFHLEdBQUcsbUJBQW1CLGVBQWUsQ0FBQztRQUM5RCxDQUFDO1FBQ0QsSUFBSSxDQUFDLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3ZGLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNoQixVQUFVLEdBQUc7Z0JBQ1gsRUFBRSxFQUFFLEVBQUU7Z0JBQ04sTUFBTSxFQUFFLE9BQU8sTUFBTSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsV0FBVyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUMvRSxXQUFXLEVBQUUsRUFBRTtnQkFDZixPQUFPLEVBQUUsRUFBRTtnQkFDWCxJQUFJLEVBQUUsRUFBRTthQUNULENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUM7SUFDNUIsQ0FBQztJQUVNLFFBQVEsR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVqQyw0QkFBNEI7UUFDakMsT0FBTyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRO1lBQzNFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUM7SUFDckMsQ0FBQztJQUVNLEtBQUssQ0FBQyxxQkFBcUI7UUFDaEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQywrQkFBK0IsQ0FBQyxFQUFFLENBQUM7WUFDdEUsT0FBTyxDQUFDLEtBQUssQ0FBQywyREFBMkQsQ0FBQyxDQUFDO1lBQzNFLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLFlBQVk7YUFDN0YsT0FBTyxDQUFDO1FBQ1gsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ25CLE9BQU8sQ0FBQyxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztZQUMvQyxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxPQUFPLE9BQU8sQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFTSxLQUFLLENBQUMsTUFBTSxDQUFDLFlBQW9CO1FBQ3RDLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRU0sS0FBSyxDQUFDLGVBQWUsQ0FBQyxlQUF1QjtRQUNsRCxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRU0sV0FBVyxDQUFtQztJQUM5QyxXQUFXLEdBQVEsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzFELGdCQUFnQixHQUFHLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUEyQyxDQUFDO0lBRS9GLFFBQVEsR0FBRyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO1FBQzlDLFNBQVMsRUFBRSxnQkFBZ0I7UUFDM0IsTUFBTSxFQUFFLE1BQU07S0FDZixDQUFDLENBQUM7SUFFSSxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQWlCO1FBQ3JDLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFTSxLQUFLLENBQUMsaUJBQWlCLENBQUMsWUFBb0I7UUFDakQsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRU0sS0FBSyxDQUFDLE1BQU07UUFDakIsT0FBTyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFTSxLQUFLLENBQUMsZUFBZTtRQUMxQixPQUFPLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRU0sS0FBSyxDQUFDLFVBQVU7UUFDckIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLHdCQUF3QixDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVNLEtBQUssQ0FBQyxTQUFTO1FBQ3BCLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVNLEtBQUssQ0FBQyxrQkFBa0I7UUFDN0IsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFTSxLQUFLLENBQUMsY0FBYztRQUN6QixNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFTSxLQUFLLENBQUMsc0JBQXNCO1FBQ2pDLElBQUksR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNULE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELE1BQU0sWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0RSxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUM1RixHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDaEMsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDckQsTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDdkIsR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2hDLENBQUM7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFTSxLQUFLLENBQUMsVUFBVSxDQUFDLGVBQXdCO1FBQzlDLE1BQU0sWUFBWSxHQUFHLGVBQWUsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUM7UUFFdkUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ2xCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELE1BQU0sSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDL0IsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBZ0QsWUFBWSxDQUFDLENBQUM7UUFDdkgsTUFBTSxRQUFRLEdBQUcsTUFBTSxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ2hGLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3RDLE1BQU0sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUM1QixPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7WUFDRCxNQUFNLEtBQUssQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUNuQixNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLElBQUksV0FBVyxDQUFDLENBQUM7WUFDNUQsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsSUFBSSxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDMUIsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3RELENBQUM7UUFDRCxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVDLE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQztJQUN0QixDQUFDO0lBRU8scUJBQXFCLENBQUMsUUFBaUI7UUFDN0MsSUFBSSxDQUFDLFFBQVEsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUM5QyxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxNQUFNLFNBQVMsR0FBSSxRQUFvQyxDQUFDLFNBQVMsQ0FBQztRQUNsRSxPQUFPLFNBQVMsS0FBSyxhQUFhLElBQUksU0FBUyxLQUFLLGdCQUFnQixDQUFDO0lBQ3ZFLENBQUM7SUFFTyxLQUFLLENBQUMscUJBQXFCLENBQUMsWUFBb0I7UUFDdEQsTUFBTSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUMvQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUEyQyxPQUFPLENBQUMsQ0FBQztRQUNyRyxJQUFJLENBQUM7WUFDSCxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQztZQUN4QyxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDdEMsTUFBTSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ3hDLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztZQUNELE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFFTSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsVUFBa0Q7UUFDOUUsTUFBTSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUNwQyxNQUFNLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNsRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDbEIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsTUFBTSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUMvQixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQTBFLHNDQUFzQyxDQUFDLENBQUM7UUFDOUssTUFBTSxRQUFRLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7WUFDM0MsWUFBWTtZQUNaLE9BQU8sRUFBRSxVQUFVLElBQUksSUFBSSxDQUFDLE9BQU87U0FDcEMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxRQUFRLENBQUMsYUFBYSxDQUFDO0lBQ2hDLENBQUM7SUFFTSxLQUFLLENBQUMsbUNBQW1DLENBQUMsY0FBc0I7UUFDckUsTUFBTSxhQUFhLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUNwRCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDbkIsS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUM7UUFDekMsQ0FBQztRQUNELE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxjQUFjLEVBQUU7WUFDMUUsWUFBWSxFQUFFLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRTtTQUMvQyxDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDaEQsQ0FBQztJQUVPLGdDQUFnQztRQUN0QyxJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsQ0FBQztZQUM3RixPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7WUFDbEQsT0FBTztRQUNULENBQUM7UUFDRCxVQUFVLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNoRCxNQUFNLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsUUFBUSxFQUFFLEtBQUssSUFBSSxFQUFFLEVBQUUsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDN0csQ0FBQztJQUVNLEtBQUssQ0FBQyxvQkFBb0I7UUFDL0IsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDbEMsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFELE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDeEQsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsZ0NBQWdDLEVBQUUsQ0FBQztZQUN4QyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQy9CLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBMEUsc0NBQXNDLENBQUMsQ0FBQztZQUM5SyxNQUFNLFFBQVEsR0FBRyxNQUFNLGdCQUFnQixDQUFDLElBQUksQ0FBQztnQkFDM0MsYUFBYTtnQkFDYixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87YUFDdEIsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQzFCLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDL0MsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO2dCQUM3QyxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTSxLQUFLLENBQUMsZUFBZTtRQUMxQixNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQ2hELElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNULE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFTSxLQUFLLENBQUMsb0JBQW9CLENBQUMsa0JBQTJCLEtBQUs7UUFDaEUsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDaEQsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNmLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELE1BQU0sWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ2xELElBQUksWUFBWSxFQUFFLENBQUM7WUFDakIsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ2hELElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ1IsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQztRQUNELE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUM5RCxJQUFJLG1CQUFtQixFQUFFLENBQUM7WUFDeEIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUNwQixNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQ3pELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUNoRTtnQkFDRSxZQUFZLEVBQUU7b0JBQ1osT0FBTyxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7aUJBQ3pEO2FBQ0YsQ0FDRixDQUFDO1lBQ0YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUM3RSxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDcEQsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksS0FBSyxDQUFDLG1CQUFtQixDQUFDLFFBQWdCO1FBQy9DLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDL0IsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBeUQscUJBQXFCLENBQUMsQ0FBQztRQUN0SSxPQUFPLE1BQU0sVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksYUFBYSxDQUFDLFdBQW1CO1FBQ3RDLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO1lBQzlDLENBQUMsQ0FBQyxXQUFXO1lBQ2IsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3hFLFVBQVUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFtQztRQUNyRCxNQUFNLFFBQVEsR0FBRyxVQUFVLEVBQUUsUUFBUSxLQUFLLEtBQUssQ0FBQztRQUNoRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztRQUM1RSxNQUFNLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNsRCxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQzlELE1BQU0sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQzVCLElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQ2IsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3JELENBQUM7WUFDRCxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNsQixNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUM1QixJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUNiLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUM7WUFDeEQsQ0FBQztZQUNELE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUMvQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUErQyxRQUFRLENBQUMsQ0FBQztRQUM3RyxNQUFNLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNkLE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUNuRCxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1osTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUN4QyxDQUFDO2FBQU0sSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDaEUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQztRQUN4RCxDQUFDO0lBQ0gsQ0FBQztJQUVPLHdCQUF3QixHQUFHLEtBQUssQ0FBQztJQUNqQywwQkFBMEIsQ0FBbUI7SUFDOUMsbUJBQW1CLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQW1DLENBQUM7SUFFcEYsS0FBSyxDQUFDLGlCQUFpQjtRQUM1QixJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNyQyxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUM7UUFDMUMsQ0FBQztRQUNELElBQUksQ0FBQyx3QkFBd0IsR0FBRyxLQUFLLENBQUM7UUFDdEMsTUFBTSxlQUFlLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUM5QyxJQUFJLENBQUMsMEJBQTBCLEdBQUcsZUFBZSxDQUFDO1FBQ2xELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNqQyxJQUFJLENBQUM7WUFDSCxNQUFNLFdBQVcsR0FBRyxNQUFNLE9BQU8sQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FDcEUsSUFBSSxDQUFDLFdBQVcsRUFDaEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxFQUNsQyxFQUFFLFdBQVcsRUFBRSxlQUFlLENBQUMsTUFBTSxFQUFFLENBQ3hDLENBQUM7WUFDRixJQUFJLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO2dCQUNsQyxNQUFNLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1lBQ25ELENBQUM7WUFDRCxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztZQUMvQixJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNuRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDMUIsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixJQUFJLElBQUksQ0FBQywwQkFBMEIsS0FBSyxlQUFlLEVBQUUsQ0FBQztnQkFDeEQsSUFBSSxDQUFDLDBCQUEwQixHQUFHLFNBQVMsQ0FBQztZQUM5QyxDQUFDO1lBQ0QsS0FBSyxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUMsQ0FBQztZQUN0RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBbUMsQ0FBQztZQUN6RixNQUFNLEtBQUssQ0FBQztRQUNkLENBQUM7SUFDSCxDQUFDO0lBRU0sS0FBSyxDQUFDLElBQUk7UUFDZixJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDO1FBQ3JDLElBQUksQ0FBQywwQkFBMEIsRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUN6QyxNQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDL0IsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQ3BELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBbUMsQ0FBQztRQUMzRixDQUFDO0lBQ0gsQ0FBQztJQUVNLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxVQUFrQixFQUFFLFVBQWtCLEVBQUUsT0FBeUM7UUFDL0csTUFBTSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUMvQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUF3RCxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3JJLE9BQU8sV0FBVyxDQUFDLElBQUksQ0FBQztZQUN0QixHQUFHLEVBQUUsTUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ3hCLE1BQU0sRUFBRSxPQUFPO1lBQ2YsZ0JBQWdCLEVBQUUsVUFBVTtZQUM1QixnQkFBZ0IsRUFBRSxVQUFVO1lBQzVCLE1BQU0sRUFBRSxDQUFDLE1BQU0sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsRUFBRTtTQUNyQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sS0FBSyxDQUFDLHdCQUF3QjtRQUNuQyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQy9CLE1BQU0sOEJBQThCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBdUUsbUNBQW1DLENBQUMsQ0FBQztRQUN0TCxPQUFPLDhCQUE4QixDQUFDLElBQUksQ0FBQztZQUN6QyxHQUFHLEVBQUUsTUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ3hCLE1BQU0sRUFBRSxDQUFDLE1BQU0sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsRUFBRTtTQUNyQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sS0FBSyxDQUFDLHNCQUFzQixDQUFDLFFBQWdCLEVBQUUsYUFBcUI7UUFDekUsTUFBTSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUMvQixNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQXlELHFCQUFxQixDQUFDLENBQUM7UUFDN0ksT0FBTyxpQkFBaUIsQ0FBQyxJQUFJLENBQUM7WUFDNUIsU0FBUyxFQUFFLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUM5QixLQUFLLEVBQUUsUUFBUTtZQUNmLE1BQU0sRUFBRSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUU7U0FDdEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLEtBQUssQ0FBQyxLQUFLO1FBQ2hCLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDL0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBMkMsT0FBTyxDQUFDLENBQUM7UUFDckcsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNsRCxDQUFDO0NBQ0YifQ==
372
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5pZHBjbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c19icm93c2VyL2NsYXNzZXMuaWRwY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUV4QyxNQUFNLE9BQU8sU0FBUztJQUNaLE9BQU8sR0FBRztRQUNoQixLQUFLLENBQUMsd0JBQXdCLENBQUMsU0FBaUI7WUFDOUMsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3hELENBQUM7S0FDRixDQUFDO0lBRU8scUJBQXFCLENBQVM7SUFDaEMsa0JBQWtCLEdBQUcsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0QsMEJBQTBCLEdBQUcsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFdkUsa0JBQWtCLENBQTRCO0lBRXJELFlBQ0UsbUJBQTJCLEVBQzNCLGlCQUE4RDtRQUU5RCxJQUFJLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3RDLG1CQUFtQixHQUFHLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6RCxDQUFDO1FBQ0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO1lBQ25ELG1CQUFtQixHQUFHLEdBQUcsbUJBQW1CLGVBQWUsQ0FBQztRQUM5RCxDQUFDO1FBQ0QsSUFBSSxDQUFDLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FB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
@@ -5,7 +5,7 @@ export interface IIdpGlobalServerClientOptions {
5
5
  }
6
6
  export declare const defaultIdpGlobalBaseUrl = "https://idp.global";
7
7
  export interface IIdpPasswordAuthResult {
8
- user: plugins.idpInterfaces.data.IUser;
8
+ user: plugins.idpInterfaces.dto.ICurrentUserDto;
9
9
  jwt: string;
10
10
  refreshToken: string;
11
11
  }
@@ -22,7 +22,6 @@ export declare class IdpGlobalServerClient {
22
22
  private typedrouter;
23
23
  private typedsocket?;
24
24
  private typedsocketDeferred;
25
- private publicKeyPushHandlers;
26
25
  private publicKeysPushHandlers;
27
26
  private blocklistPushHandlers;
28
27
  private connectionGeneration;
@@ -33,11 +32,9 @@ export declare class IdpGlobalServerClient {
33
32
  constructor(optionsArg?: IIdpGlobalServerClientOptions);
34
33
  connect(): Promise<plugins.typedsocket.TypedSocket>;
35
34
  stop(): Promise<void>;
36
- onPublicKeyPush(handlerArg: (publicKeyPemArg: string) => void | Promise<void>): () => void;
37
35
  onPublicKeysPush(handlerArg: (publicKeysArg: plugins.idpInterfaces.data.IJwtVerificationKey[]) => void | Promise<void>): () => void;
38
36
  onBlocklistPush(handlerArg: (blockedJwtIdsArg: string[]) => void | Promise<void>): () => void;
39
37
  registerBackendService(backendTokenArg?: string): Promise<void>;
40
- getPublicKeyForValidation(backendTokenArg?: string): Promise<string>;
41
38
  getPublicKeysForValidation(backendTokenArg?: string): Promise<plugins.idpInterfaces.data.IJwtVerificationKey[]>;
42
39
  getJwtIdBlocklist(backendTokenArg?: string): Promise<string[]>;
43
40
  loginWithEmailAndPassword(optionsArg: {
@@ -15,7 +15,6 @@ export class IdpGlobalServerClient {
15
15
  typedrouter = new plugins.typedrequest.TypedRouter();
16
16
  typedsocket;
17
17
  typedsocketDeferred = this.createConnectionDeferred();
18
- publicKeyPushHandlers = [];
19
18
  publicKeysPushHandlers = [];
20
19
  blocklistPushHandlers = [];
21
20
  connectionGeneration = 0;
@@ -25,14 +24,8 @@ export class IdpGlobalServerClient {
25
24
  stopping = false;
26
25
  constructor(optionsArg = {}) {
27
26
  this.optionsArg = optionsArg;
28
- this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('pushPublicKeyForValidation', async (requestArg) => {
29
- const publicKeys = Array.isArray(requestArg.publicKeys) ? requestArg.publicKeys : [];
30
- await Promise.all([
31
- ...this.publicKeyPushHandlers.map((handlerArg) => handlerArg(requestArg.publicKeyPem)),
32
- ...publicKeys.length
33
- ? this.publicKeysPushHandlers.map((handlerArg) => handlerArg(publicKeys))
34
- : [],
35
- ]);
27
+ this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('pushPublicKeysForValidation', async (requestArg) => {
28
+ await Promise.all(this.publicKeysPushHandlers.map((handlerArg) => handlerArg(requestArg.publicKeys)));
36
29
  return {};
37
30
  }));
38
31
  this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('pushOrGetJwtIdBlocklist', async (requestArg) => {
@@ -115,12 +108,6 @@ export class IdpGlobalServerClient {
115
108
  this.pendingSocketPromise = undefined;
116
109
  this.stopping = false;
117
110
  }
118
- onPublicKeyPush(handlerArg) {
119
- this.publicKeyPushHandlers.push(handlerArg);
120
- return () => {
121
- this.publicKeyPushHandlers = this.publicKeyPushHandlers.filter((handler) => handler !== handlerArg);
122
- };
123
- }
124
111
  onPublicKeysPush(handlerArg) {
125
112
  this.publicKeysPushHandlers.push(handlerArg);
126
113
  return () => {
@@ -138,20 +125,13 @@ export class IdpGlobalServerClient {
138
125
  const socket = await this.connect();
139
126
  await this.applyBackendServiceTag(socket, backendToken);
140
127
  }
141
- async getPublicKeyForValidation(backendTokenArg = this.optionsArg.backendToken) {
142
- const backendToken = this.requireBackendToken(backendTokenArg);
143
- const socket = await this.connect();
144
- const request = socket.createTypedRequest('getPublicKeyForValidation');
145
- const response = await this.raceWithStop(request.fire({ backendToken }));
146
- return response.publicKeyPem;
147
- }
148
128
  async getPublicKeysForValidation(backendTokenArg = this.optionsArg.backendToken) {
149
129
  const backendToken = this.requireBackendToken(backendTokenArg);
150
130
  const socket = await this.connect();
151
- const request = socket.createTypedRequest('getPublicKeyForValidation');
131
+ const request = socket.createTypedRequest('getPublicKeysForValidation');
152
132
  const response = await this.raceWithStop(request.fire({ backendToken }));
153
133
  if (!Array.isArray(response.publicKeys) || response.publicKeys.length === 0) {
154
- throw new Error('IdP did not return a JWT verification key set; upgrade the IdP before enabling key rollover.');
134
+ throw new Error('IdP returned an invalid JWT verification key set.');
155
135
  }
156
136
  return response.publicKeys;
157
137
  }
@@ -237,4 +217,4 @@ export class IdpGlobalServerClient {
237
217
  this.stopWaiters.clear();
238
218
  }
239
219
  }
240
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5pZHAtZ2xvYmFsLXNlcnZlci1jbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c19zZXJ2ZXIvY2xhc3Nlcy5pZHAtZ2xvYmFsLXNlcnZlci1jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFPeEMsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsb0JBQW9CLENBQUM7QUFRNUQsTUFBTSxPQUFPLG1CQUFvQixTQUFRLEtBQUs7SUFDckMsaUJBQWlCLENBQVM7SUFDMUIsbUJBQW1CLENBQTBDO0lBRXBFLFlBQVksVUFBeUc7UUFDbkgsS0FBSyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLElBQUksR0FBRyxxQkFBcUIsQ0FBQztRQUNsQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsVUFBVSxDQUFDLGlCQUFpQixJQUFJLEVBQUUsQ0FBQztRQUM1RCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsVUFBVSxDQUFDLG1CQUFtQixJQUFJLEVBQUUsQ0FBQztJQUNsRSxDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8scUJBQXFCO0lBZVo7SUFkWixXQUFXLEdBQVEsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzFELFdBQVcsQ0FBbUM7SUFDOUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7SUFDdEQscUJBQXFCLEdBQTZELEVBQUUsQ0FBQztJQUNyRixzQkFBc0IsR0FFRCxFQUFFLENBQUM7SUFDeEIscUJBQXFCLEdBQWdFLEVBQUUsQ0FBQztJQUN4RixvQkFBb0IsR0FBRyxDQUFDLENBQUM7SUFDekIsb0JBQW9CLENBQTRDO0lBQ2hFLHlCQUF5QixDQUFtQjtJQUM1QyxXQUFXLEdBQUcsSUFBSSxHQUFHLEVBQTZCLENBQUM7SUFDbkQsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUV6QixZQUFvQixhQUE0QyxFQUFFO1FBQTlDLGVBQVUsR0FBVixVQUFVLENBQW9DO1FBQ2hFLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUM5QixJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUNuQyw0QkFBNEIsRUFDNUIsS0FBSyxFQUFFLFVBQVUsRUFBRSxFQUFFO1lBQ25CLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDckYsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDO2dCQUNoQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ3RGLEdBQUcsVUFBVSxDQUFDLE1BQU07b0JBQ2xCLENBQUMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7b0JBQ3pFLENBQUMsQ0FBQyxFQUFFO2FBQ1AsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDLENBQ0YsQ0FDRixDQUFDO1FBQ0YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQzlCLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQ25DLHlCQUF5QixFQUN6QixLQUFLLEVBQUUsVUFBVSxFQUFFLEVBQUU7WUFDbkIsSUFBSSxVQUFVLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQzdCLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLGFBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMzRyxDQUFDO1lBQ0QsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDLENBQ0YsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFPO1FBQ2xCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xCLE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQztRQUN2RCxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDckMsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDO1FBQzFDLENBQUM7UUFDRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUM7UUFDMUMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDO1FBQzdDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNqQixJQUFJLGFBQTBELENBQUM7UUFDL0QsSUFBSSxhQUFtRSxDQUFDO1FBQ3hFLE1BQU0seUJBQXlCLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUN4RCxJQUFJLENBQUM7WUFDSCxJQUFJLENBQUMseUJBQXlCLEdBQUcseUJBQXlCLENBQUM7WUFDM0QsYUFBYSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FDMUQsSUFBSSxDQUFDLFdBQVcsRUFDaEIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLEVBQ3pCLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUseUJBQXlCLENBQUMsTUFBTSxFQUFFLENBQ3ZFLENBQUM7WUFDRixJQUFJLENBQUMsb0JBQW9CLEdBQUcsYUFBYSxDQUFDO1lBQzFDLGFBQWEsR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDdkQsSUFBSSxVQUFVLEtBQUssSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7Z0JBQzdDLE1BQU0sYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUMzQixJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7b0JBQ2xDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsZ0RBQWdELENBQUMsQ0FBQyxDQUFDO2dCQUMvRSxDQUFDO2dCQUNELE9BQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQztZQUMxQixDQUFDO1lBQ0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxhQUFhLENBQUM7WUFDakMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNsQyxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLElBQUksVUFBVSxLQUFLLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxDQUFDLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssYUFBYSxDQUFDLEVBQUUsQ0FBQztnQkFDdkcsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUM7WUFDL0IsQ0FBQztZQUNELE1BQU0sYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNuRCxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ2xDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDekIsQ0FBQztZQUNELElBQUksSUFBSSxDQUFDLG1CQUFtQixLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUMxQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7WUFDN0QsQ0FBQztZQUNELE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQztnQkFBUyxDQUFDO1lBQ1QsSUFBSSxhQUFhLElBQUksSUFBSSxDQUFDLG9CQUFvQixLQUFLLGFBQWEsRUFBRSxDQUFDO2dCQUNqRSxJQUFJLENBQUMsb0JBQW9CLEdBQUcsU0FBUyxDQUFDO1lBQ3hDLENBQUM7WUFDRCxJQUFJLElBQUksQ0FBQyx5QkFBeUIsS0FBSyx5QkFBeUIsRUFBRSxDQUFDO2dCQUNqRSxJQUFJLENBQUMseUJBQXlCLEdBQUcsU0FBUyxDQUFDO1lBQzdDLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDO0lBQzFCLENBQUM7SUFFTSxLQUFLLENBQUMsSUFBSTtRQUNmLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzVCLE1BQU0sU0FBUyxHQUFHLElBQUksS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDaEMsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUM7UUFDdkQsSUFBSSxDQUFDLHlCQUF5QixFQUFFLEtBQUssRUFBRSxDQUFDO1FBQ3hDLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxTQUFTLENBQUM7UUFDM0MsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUM7UUFDN0IsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDdEYsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM3QyxDQUFDO1FBQ0QsTUFBTSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDckIsTUFBTSxhQUFhLEdBQUcsTUFBTSxvQkFBb0IsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDekUsSUFBSSxhQUFhLElBQUksYUFBYSxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQzlDLE1BQU0sYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNwRCxDQUFDO1FBQ0QsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQzNELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxTQUFTLENBQUM7UUFDdEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDeEIsQ0FBQztJQUVNLGVBQWUsQ0FBQyxVQUE2RDtRQUNsRixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzVDLE9BQU8sR0FBRyxFQUFFO1lBQ1YsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sS0FBSyxVQUFVLENBQUMsQ0FBQztRQUN0RyxDQUFDLENBQUM7SUFDSixDQUFDO0lBRU0sZ0JBQWdCLENBQ3JCLFVBRXlCO1FBRXpCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDN0MsT0FBTyxHQUFHLEVBQUU7WUFDVixJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxLQUFLLFVBQVUsQ0FBQyxDQUFDO1FBQ3hHLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFTSxlQUFlLENBQUMsVUFBZ0U7UUFDckYsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM1QyxPQUFPLEdBQUcsRUFBRTtZQUNWLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEtBQUssVUFBVSxDQUFDLENBQUM7UUFDdEcsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVNLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZO1FBQ2hGLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMvRCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNwQyxNQUFNLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVNLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZO1FBQ25GLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMvRCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNwQyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQStELDJCQUEyQixDQUFDLENBQUM7UUFDckksTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDekUsT0FBTyxRQUFRLENBQUMsWUFBWSxDQUFDO0lBQy9CLENBQUM7SUFFTSxLQUFLLENBQUMsMEJBQTBCLENBQ3JDLGVBQWUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVk7UUFFOUMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQy9ELE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3BDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBK0QsMkJBQTJCLENBQUMsQ0FBQztRQUNySSxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN6RSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDNUUsTUFBTSxJQUFJLEtBQUssQ0FBQyw4RkFBOEYsQ0FBQyxDQUFDO1FBQ2xILENBQUM7UUFDRCxPQUFPLFFBQVEsQ0FBQyxVQUFVLENBQUM7SUFDN0IsQ0FBQztJQUVNLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZO1FBQzNFLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMvRCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNwQyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQTZELHlCQUF5QixDQUFDLENBQUM7UUFDakksTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDekUsT0FBTyxRQUFRLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRU0sS0FBSyxDQUFDLHlCQUF5QixDQUFDLFVBQStDO1FBQ3BGLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3BDLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBeUUscUNBQXFDLENBQUMsQ0FBQztRQUM5SixNQUFNLGFBQWEsR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztZQUM5RCxRQUFRLEVBQUUsVUFBVSxDQUFDLEtBQUs7WUFDMUIsUUFBUSxFQUFFLFVBQVUsQ0FBQyxRQUFRO1NBQzlCLENBQUMsQ0FBQyxDQUFDO1FBQ0osSUFBSSxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDOUIsTUFBTSxJQUFJLG1CQUFtQixDQUFDO2dCQUM1QixpQkFBaUIsRUFBRyxhQUFxQixDQUFDLGlCQUFpQjtnQkFDM0QsbUJBQW1CLEVBQUcsYUFBcUIsQ0FBQyxtQkFBbUI7YUFDaEUsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDaEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3RDLENBQUM7UUFFRCxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQWdELFlBQVksQ0FBQyxDQUFDO1FBQzlHLE1BQU0sZUFBZSxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsWUFBWSxFQUFFLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbkgsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN6QixNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDOUMsQ0FBQztRQUVELE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBMkMsT0FBTyxDQUFDLENBQUM7UUFDbEcsTUFBTSxhQUFhLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsZUFBZSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMvRixPQUFPO1lBQ0wsSUFBSSxFQUFFLGFBQWEsQ0FBQyxJQUFJO1lBQ3hCLEdBQUcsRUFBRSxlQUFlLENBQUMsR0FBRztZQUN4QixZQUFZLEVBQUUsZUFBZSxDQUFDLFlBQVksSUFBSSxhQUFhLENBQUMsWUFBWTtTQUN6RSxDQUFDO0lBQ0osQ0FBQztJQUVPLGtCQUFrQjtRQUN4QixJQUFJLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxJQUFJLHVCQUF1QixDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDMUUsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDMUIsT0FBTyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakMsQ0FBQztRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7WUFDdkMsT0FBTyxHQUFHLEdBQUcsT0FBTyxlQUFlLENBQUM7UUFDdEMsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxlQUF3QjtRQUNsRCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDckIsTUFBTSxJQUFJLEtBQUssQ0FBQywwREFBMEQsQ0FBQyxDQUFDO1FBQzlFLENBQUM7UUFDRCxPQUFPLGVBQWUsQ0FBQztJQUN6QixDQUFDO0lBRU8sS0FBSyxDQUFDLHNCQUFzQixDQUNsQyxTQUEwQyxFQUMxQyxlQUF1QjtRQUV2QixNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBaUQsaUJBQWlCLEVBQUU7WUFDMUcsWUFBWSxFQUFFLGVBQWU7U0FDOUIsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRU8sd0JBQXdCO1FBQzlCLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFtQyxDQUFDO1FBQy9FLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3hDLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFTyxZQUFZLENBQUksVUFBc0I7UUFDNUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNsQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQyxDQUFDO1FBQ3BFLENBQUM7UUFDRCxPQUFPLElBQUksT0FBTyxDQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3hDLE1BQU0sVUFBVSxHQUFHLENBQUMsUUFBZSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDekQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDakMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRTtnQkFDNUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDdEMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxRQUFlO1FBQ3ZDLEtBQUssTUFBTSxVQUFVLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN2QixDQUFDO1FBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMzQixDQUFDO0NBQ0YifQ==
220
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5pZHAtZ2xvYmFsLXNlcnZlci1jbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c19zZXJ2ZXIvY2xhc3Nlcy5pZHAtZ2xvYmFsLXNlcnZlci1jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFPeEMsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsb0JBQW9CLENBQUM7QUFRNUQsTUFBTSxPQUFPLG1CQUFvQixTQUFRLEtBQUs7SUFDckMsaUJBQWlCLENBQVM7SUFDMUIsbUJBQW1CLENBQTBDO0lBRXBFLFlBQVksVUFBeUc7UUFDbkgsS0FBSyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLElBQUksR0FBRyxxQkFBcUIsQ0FBQztRQUNsQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsVUFBVSxDQUFDLGlCQUFpQixJQUFJLEVBQUUsQ0FBQztRQUM1RCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsVUFBVSxDQUFDLG1CQUFtQixJQUFJLEVBQUUsQ0FBQztJQUNsRSxDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8scUJBQXFCO0lBY1o7SUFiWixXQUFXLEdBQVEsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzFELFdBQVcsQ0FBbUM7SUFDOUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7SUFDdEQsc0JBQXNCLEdBRUQsRUFBRSxDQUFDO0lBQ3hCLHFCQUFxQixHQUFnRSxFQUFFLENBQUM7SUFDeEYsb0JBQW9CLEdBQUcsQ0FBQyxDQUFDO0lBQ3pCLG9CQUFvQixDQUE0QztJQUNoRSx5QkFBeUIsQ0FBbUI7SUFDNUMsV0FBVyxHQUFHLElBQUksR0FBRyxFQUE2QixDQUFDO0lBQ25ELFFBQVEsR0FBRyxLQUFLLENBQUM7SUFFekIsWUFBb0IsYUFBNEMsRUFBRTtRQUE5QyxlQUFVLEdB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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@idp.global/sdk",
3
- "version": "10.0.0",
3
+ "version": "12.0.0",
4
4
  "private": false,
5
5
  "description": "Reusable browser and server SDK for idp.global authentication.",
6
6
  "type": "module",
@@ -14,25 +14,25 @@
14
14
  "author": "Task Venture Capital GmbH",
15
15
  "license": "MIT",
16
16
  "dependencies": {
17
- "@api.global/typedrequest": "^3.3.0",
18
- "@api.global/typedsocket": "^4.2.3",
19
- "@idp.global/interfaces": "^11.0.0",
20
- "@push.rocks/smartdata": "^7.1.7",
17
+ "@api.global/typedrequest": "^3.3.2",
18
+ "@api.global/typedsocket": "^4.2.5",
19
+ "@idp.global/interfaces": "^20.0.1",
20
+ "@push.rocks/smartdata": "^7.2.1",
21
21
  "@push.rocks/smartjson": "^6.0.1",
22
22
  "@push.rocks/smartpromise": "^4.2.4",
23
- "@push.rocks/smartrx": "^3.0.10",
23
+ "@push.rocks/smartrx": "^3.0.12",
24
24
  "@push.rocks/smarttime": "^4.2.3",
25
25
  "@push.rocks/smarturl": "^3.1.0",
26
26
  "@push.rocks/webjwt": "^1.0.10",
27
- "@push.rocks/webstore": "^2.0.22"
27
+ "@push.rocks/webstore": "^2.0.23"
28
28
  },
29
29
  "devDependencies": {
30
30
  "@git.zone/tsbuild": "^4.4.2",
31
31
  "@git.zone/tsdoc": "^2.1.1",
32
32
  "@git.zone/tsrun": "^2.0.5",
33
33
  "@git.zone/tstest": "^3.6.6",
34
- "@push.rocks/smartdb": "^2.10.0",
35
- "@types/node": "^26.1.0"
34
+ "@push.rocks/smartdb": "^2.12.2",
35
+ "@types/node": "^26.1.1"
36
36
  },
37
37
  "files": [
38
38
  "ts/**/*",
package/readme.md CHANGED
@@ -34,11 +34,7 @@ import { IdpClient } from '@idp.global/sdk/browser';
34
34
  Create one client per app shell. The `receptionBaseUrl` may be the SSO origin or the full typedrequest URL; the SDK normalizes it to `/typedrequest` internally.
35
35
 
36
36
  ```ts
37
- const idp = new IdpClient('https://sso.workspace.global', {
38
- id: 'my-app',
39
- name: 'My App',
40
- description: 'The app your users actually want to open.',
41
- logoUrl: 'https://app.example.com/logo.svg',
37
+ const idp = new IdpClient('https://idp.global', {
42
38
  appUrl: 'https://app.example.com/',
43
39
  });
44
40
 
@@ -51,7 +47,7 @@ if (loggedIn) {
51
47
  }
52
48
  ```
53
49
 
54
- When `determineLoginStatus(true)` cannot recover a valid JWT from browser storage, a refresh token, or a `transfertoken` query parameter, it redirects the user to the configured idp.global login route with your app metadata encoded as `appdata`.
50
+ When `determineLoginStatus(true)` cannot recover a valid JWT from browser storage, a refresh token, or a `transfertoken` query parameter, it redirects the user to the configured idp.global login route with the minimal `{ appUrl }` transfer target encoded as `transfertarget`.
55
51
 
56
52
  ### Token Handling
57
53
 
@@ -94,29 +90,30 @@ if (loginResponse.refreshToken) {
94
90
  Transfer tokens are the handoff mechanism for moving a logged-in user between apps without exposing refresh tokens to URLs.
95
91
 
96
92
  ```ts
97
- const transferToken = await idp.getTransferToken();
98
- if (transferToken) {
99
- const target = new URL('https://another-app.example.com/');
100
- target.searchParams.set('transfertoken', transferToken);
101
- window.location.href = target.toString();
102
- }
93
+ await idp.getTransferTokenAndSwitchToLocation();
103
94
  ```
104
95
 
105
96
  On the receiving app, `determineLoginStatus()` calls `processTransferToken()` as part of its normal recovery flow. You can also call `processTransferToken()` directly when you own the route handling.
106
97
 
98
+ The SDK accepts only absolute, credential-free HTTPS transfer targets and uses
99
+ the same configured target for token exchange and navigation. The
100
+ `transfertarget` query value is a request, not proof of authorization: the IdP
101
+ must match it against an exact registered redirect target and bind it to the
102
+ single-use transfer token before issuing that token.
103
+
107
104
  ### Logout
108
105
 
109
106
  ```ts
110
107
  await idp.logout();
111
108
  ```
112
109
 
113
- `logout()` clears local auth state and, when a refresh token is available on the SSO origin, asks idp.global to revoke the session before returning the user to the original app URL when app metadata is present.
110
+ `logout()` clears local auth state and, when a refresh token is available on the IdP origin, asks idp.global to revoke the session before returning to the IdP origin. It never navigates to a URL-derived transfer target.
114
111
 
115
112
  ### Browser API Surface
116
113
 
117
114
  | API | Description |
118
115
  | --- | --- |
119
- | `new IdpClient(receptionBaseUrl, appData?)` | Configure an idp.global browser client. |
116
+ | `new IdpClient(receptionBaseUrl, transferTarget?)` | Configure an idp.global browser client with a minimal `{ appUrl }` return target. |
120
117
  | `enableTypedSocket()` / `stop()` | Start or stop the typed-socket connection. |
121
118
  | `determineLoginStatus(requireLogin?)` | Resolve login state from JWT, refresh token, transfer token, or optional redirect. |
122
119
  | `statusObservable` | RxJS subject that emits idp.global login status changes during refresh flows. |
@@ -124,8 +121,8 @@ await idp.logout();
124
121
  | `getRolesAndOrganizations()` | Fetch roles and organizations for the current user. |
125
122
  | `createOrganization(name, slug, mode)` | Check organization slug availability or manifest an organization. |
126
123
  | `updatePaddleCheckoutId(orgId, checkoutId)` | Send a Paddle checkout ID as the org payment method update. |
127
- | `getTransferToken(appData?)` | Exchange the current refresh token for a transfer token. |
128
- | `getTransferTokenAndSwitchToLocation(url)` | Create a transfer token and redirect with `transfertoken` attached. |
124
+ | `getTransferToken()` | Request a transfer token for the configured transfer target. |
125
+ | `getTransferTokenAndSwitchToLocation()` | Request a transfer token and navigate to the same configured target with `transfertoken` attached. |
129
126
  | `processTransferToken()` | Consume a `transfertoken` from the current URL and refresh local auth state. |
130
127
  | `logout()` | Revoke and clear the current login flow. |
131
128
 
@@ -133,11 +130,18 @@ await idp.logout();
133
130
 
134
131
  `idp.requests` exposes typed request factories backed by `@idp.global/interfaces`. The request and response payload types come from that package, so your editor can guide exact payload shapes.
135
132
 
136
- SDK 10 adopts interfaces v11. OIDC app creation requires explicit client
133
+ SDK 11 adopts interfaces v13. JWT verification-key distribution is keyset-only
134
+ and uses the plural `getPublicKeysForValidation` and
135
+ `pushPublicKeysForValidation` contracts. Transfer-token exchange accepts only
136
+ the minimal `transferTarget: { appUrl }` destination. OIDC app creation requires explicit client
137
137
  type, grant types, callback and post-logout URIs, and token lifetime settings.
138
138
  Public clients do not receive a client secret; confidential client secrets are
139
139
  returned only once when created or rotated. The unsupported
140
- `client_credentials` grant and legacy API-token login are not exposed.
140
+ `client_credentials` grant and API-token login are not exposed.
141
+ `getUserActivity` and `exportUserActivity` return structured activity events
142
+ with finite action, outcome, target-type, reason-code, and allowlisted-fact
143
+ fields; persistence IDs, free text, network data, integrity material, and sink
144
+ delivery state are not part of the SDK contract.
141
145
 
142
146
  | Area | Request getters |
143
147
  | --- | --- |
@@ -260,9 +264,8 @@ const publicKeys = await idpClient.getPublicKeysForValidation();
260
264
  const blockedJwtIds = await idpClient.getJwtIdBlocklist();
261
265
  ```
262
266
 
263
- `getPublicKeyForValidation()` and `onPublicKeyPush()` remain available for
264
- single-key consumers. Rollover-capable verifiers should use the key-set APIs,
265
- select by the JWT header `kid`, and reject unknown key IDs.
267
+ Verification is keyset-only. Replace the cached snapshot on every push, select
268
+ the verification key by the JWT header `kid`, and reject unknown key IDs.
266
269
 
267
270
  ### Server API Surface
268
271
 
@@ -291,7 +294,7 @@ The server export includes these TypeScript types:
291
294
  | `IAuthenticateAccountOptions` | Input for `AccountAuthService.authenticate()`. |
292
295
  | `IAuthenticatedAccountResult` | Successful auth result with account, auth source, and optional idp.global tokens. |
293
296
  | `IIdpGlobalServerClientOptions` | Server client configuration with optional `baseUrl` and `backendToken`; defaults to `https://idp.global`. |
294
- | `IIdpPasswordAuthResult` | idp.global user, JWT, and refresh-token result. |
297
+ | `IIdpPasswordAuthResult` | Privacy-safe current-user DTO, JWT, and refresh-token result. |
295
298
 
296
299
  ## Runtime Notes
297
300
 
@@ -310,7 +313,7 @@ The SDK uses typed sockets and typed requests from `@api.global/*`, shared idp.g
310
313
  pnpm test
311
314
  ```
312
315
 
313
- The test suite covers the server account store and auth service, browser transfer-token handling, typed administrative request names, and backend JWT key-set and blocklist push behavior, including staged compatibility with a legacy single-key IdP.
316
+ The test suite covers the server account store and auth service, browser transfer-token handling, typed administrative request names, and the exact backend JWT keyset and blocklist contracts.
314
317
 
315
318
  ## License and Legal Information
316
319
 
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@idp.global/sdk',
6
- version: '10.0.0',
6
+ version: '12.0.0',
7
7
  description: 'Reusable browser and server SDK for idp.global authentication.'
8
8
  }
@@ -8,13 +8,16 @@ export class IdpClient {
8
8
  },
9
9
  };
10
10
 
11
- public appData: plugins.idpInterfaces.data.IAppLegacy;
11
+ readonly #transferTargetAppUrl: string;
12
12
  public rolesReplaySubject = new plugins.smartrx.rxjs.ReplaySubject(1);
13
13
  public organizationsReplaySubject = new plugins.smartrx.rxjs.ReplaySubject(1);
14
14
 
15
15
  public parsedReceptionUrl: plugins.smarturl.Smarturl;
16
16
 
17
- constructor(receptionBaseUrlArg: string, appDataArg?: plugins.idpInterfaces.data.IAppLegacy) {
17
+ constructor(
18
+ receptionBaseUrlArg: string,
19
+ transferTargetArg?: plugins.idpInterfaces.data.ITransferTarget
20
+ ) {
18
21
  if (receptionBaseUrlArg.endsWith('/')) {
19
22
  receptionBaseUrlArg = receptionBaseUrlArg.slice(0, -1);
20
23
  }
@@ -22,16 +25,15 @@ export class IdpClient {
22
25
  receptionBaseUrlArg = `${receptionBaseUrlArg}/typedrequest`;
23
26
  }
24
27
  this.parsedReceptionUrl = plugins.smarturl.Smarturl.createFromUrl(receptionBaseUrlArg);
25
- if (!appDataArg) {
26
- appDataArg = {
27
- id: '',
28
- appUrl: typeof window !== 'undefined' ? `https://${window.location.host}/` : '',
29
- description: '',
30
- logoUrl: '',
31
- name: '',
32
- };
33
- }
34
- this.appData = appDataArg;
28
+ this.#transferTargetAppUrl = this.normalizeTransferTargetAppUrl(
29
+ transferTargetArg || {
30
+ appUrl: typeof window !== 'undefined' ? window.location.origin : '',
31
+ }
32
+ );
33
+ }
34
+
35
+ public get transferTarget(): Readonly<plugins.idpInterfaces.data.ITransferTarget> {
36
+ return Object.freeze({ appUrl: this.#transferTargetAppUrl });
35
37
  }
36
38
 
37
39
  public requests = new IdpRequests(this);
@@ -41,18 +43,19 @@ export class IdpClient {
41
43
  this.parsedReceptionUrl.hostname;
42
44
  }
43
45
 
44
- public async getAppDataOnSsoDomain() {
45
- if (!window.location.href.startsWith('https://sso.workspace.global/')) {
46
- console.error('You are trying to access SSO appData on a non sso domain.');
47
- return null;
46
+ private normalizeTransferTargetAppUrl(
47
+ transferTargetArg: plugins.idpInterfaces.data.ITransferTarget
48
+ ): string {
49
+ let appUrl: URL;
50
+ try {
51
+ appUrl = new URL(transferTargetArg.appUrl);
52
+ } catch {
53
+ throw new Error('transferTarget.appUrl must be an absolute HTTPS URL');
48
54
  }
49
- const appDataString = plugins.smarturl.Smarturl.createFromUrl(window.location.href).searchParams
50
- .appdata;
51
- if (!appDataString) {
52
- console.error('no appdata query arg detected');
53
- return null;
55
+ if (appUrl.protocol !== 'https:' || appUrl.username || appUrl.password) {
56
+ throw new Error('transferTarget.appUrl must be a credential-free HTTPS URL');
54
57
  }
55
- return plugins.smartjson.parseBase64(appDataString);
58
+ return appUrl.toString();
56
59
  }
57
60
 
58
61
  public async setJwt(jwtStringArg: string) {
@@ -174,7 +177,13 @@ export class IdpClient {
174
177
  }
175
178
  }
176
179
 
177
- public async getTransferToken(appDataArg?: plugins.idpInterfaces.data.IAppLegacy): Promise<string | null> {
180
+ public async getTransferToken(): Promise<string | null> {
181
+ return this.getTransferTokenForTarget(this.transferTarget);
182
+ }
183
+
184
+ private async getTransferTokenForTarget(
185
+ transferTargetArg: Readonly<plugins.idpInterfaces.data.ITransferTarget>
186
+ ): Promise<string | null> {
178
187
  await this.performJwtHousekeeping();
179
188
  const refreshToken = await this.getRefreshToken();
180
189
  if (!refreshToken) {
@@ -184,17 +193,18 @@ export class IdpClient {
184
193
  const getTransferToken = this.typedsocket.createTypedRequest<plugins.idpInterfaces.request.IReq_ExchangeRefreshTokenAndTransferToken>('exchangeRefreshTokenAndTransferToken');
185
194
  const response = await getTransferToken.fire({
186
195
  refreshToken,
187
- appData: appDataArg || this.appData,
196
+ transferTarget: transferTargetArg,
188
197
  });
189
198
  return response.transferToken;
190
199
  }
191
200
 
192
- public async getTransferTokenAndSwitchToLocation(newLocationArg: string): Promise<void> {
193
- const transferToken = await this.getTransferToken();
201
+ public async getTransferTokenAndSwitchToLocation(): Promise<void> {
202
+ const transferTarget = this.transferTarget;
203
+ const transferToken = await this.getTransferTokenForTarget(transferTarget);
194
204
  if (!transferToken) {
195
- alert('failed to get transfer token!');
205
+ throw new Error('IdP did not return a transfer token');
196
206
  }
197
- const urlInstance = plugins.smarturl.Smarturl.createFromUrl(newLocationArg, {
207
+ const urlInstance = plugins.smarturl.Smarturl.createFromUrl(transferTarget.appUrl, {
198
208
  searchParams: { transfertoken: transferToken },
199
209
  });
200
210
  window.location.href = urlInstance.toString();
@@ -222,7 +232,7 @@ export class IdpClient {
222
232
  const getTransferToken = this.typedsocket.createTypedRequest<plugins.idpInterfaces.request.IReq_ExchangeRefreshTokenAndTransferToken>('exchangeRefreshTokenAndTransferToken');
223
233
  const response = await getTransferToken.fire({
224
234
  transferToken,
225
- appData: this.appData,
235
+ transferTarget: this.transferTarget,
226
236
  });
227
237
  if (response.refreshToken) {
228
238
  await this.refreshJwt(response.refreshToken);
@@ -264,7 +274,7 @@ export class IdpClient {
264
274
  this.parsedReceptionUrl.clone().set('path', '/login').toString(),
265
275
  {
266
276
  searchParams: {
267
- appdata: plugins.smartjson.stringifyBase64(this.appData),
277
+ transfertarget: plugins.smartjson.stringifyBase64(this.transferTarget),
268
278
  },
269
279
  },
270
280
  );
@@ -328,10 +338,7 @@ export class IdpClient {
328
338
  if (!redirect) {
329
339
  return;
330
340
  }
331
- const appData = await this.getAppDataOnSsoDomain();
332
- if (appData) {
333
- window.location.href = appData.appUrl;
334
- } else if (window.location.href.startsWith(idpLogoutUrl.origin)) {
341
+ if (window.location.href.startsWith(idpLogoutUrl.origin)) {
335
342
  window.location.href = this.parsedReceptionUrl.origin;
336
343
  }
337
344
  }
@@ -8,7 +8,7 @@ export interface IIdpGlobalServerClientOptions {
8
8
  export const defaultIdpGlobalBaseUrl = 'https://idp.global';
9
9
 
10
10
  export interface IIdpPasswordAuthResult {
11
- user: plugins.idpInterfaces.data.IUser;
11
+ user: plugins.idpInterfaces.dto.ICurrentUserDto;
12
12
  jwt: string;
13
13
  refreshToken: string;
14
14
  }
@@ -29,7 +29,6 @@ export class IdpGlobalServerClient {
29
29
  private typedrouter: any = new plugins.typedrequest.TypedRouter();
30
30
  private typedsocket?: plugins.typedsocket.TypedSocket;
31
31
  private typedsocketDeferred = this.createConnectionDeferred();
32
- private publicKeyPushHandlers: Array<(publicKeyPemArg: string) => void | Promise<void>> = [];
33
32
  private publicKeysPushHandlers: Array<(
34
33
  publicKeysArg: plugins.idpInterfaces.data.IJwtVerificationKey[]
35
34
  ) => void | Promise<void>> = [];
@@ -42,16 +41,12 @@ export class IdpGlobalServerClient {
42
41
 
43
42
  constructor(private optionsArg: IIdpGlobalServerClientOptions = {}) {
44
43
  this.typedrouter.addTypedHandler(
45
- new plugins.typedrequest.TypedHandler<plugins.idpInterfaces.request.IReq_PushPublicKeyForValidation>(
46
- 'pushPublicKeyForValidation',
44
+ new plugins.typedrequest.TypedHandler<plugins.idpInterfaces.request.IReq_PushPublicKeysForValidation>(
45
+ 'pushPublicKeysForValidation',
47
46
  async (requestArg) => {
48
- const publicKeys = Array.isArray(requestArg.publicKeys) ? requestArg.publicKeys : [];
49
- await Promise.all([
50
- ...this.publicKeyPushHandlers.map((handlerArg) => handlerArg(requestArg.publicKeyPem)),
51
- ...publicKeys.length
52
- ? this.publicKeysPushHandlers.map((handlerArg) => handlerArg(publicKeys))
53
- : [],
54
- ]);
47
+ await Promise.all(
48
+ this.publicKeysPushHandlers.map((handlerArg) => handlerArg(requestArg.publicKeys))
49
+ );
55
50
  return {};
56
51
  }
57
52
  )
@@ -146,13 +141,6 @@ export class IdpGlobalServerClient {
146
141
  this.stopping = false;
147
142
  }
148
143
 
149
- public onPublicKeyPush(handlerArg: (publicKeyPemArg: string) => void | Promise<void>): () => void {
150
- this.publicKeyPushHandlers.push(handlerArg);
151
- return () => {
152
- this.publicKeyPushHandlers = this.publicKeyPushHandlers.filter((handler) => handler !== handlerArg);
153
- };
154
- }
155
-
156
144
  public onPublicKeysPush(
157
145
  handlerArg: (
158
146
  publicKeysArg: plugins.idpInterfaces.data.IJwtVerificationKey[]
@@ -177,23 +165,15 @@ export class IdpGlobalServerClient {
177
165
  await this.applyBackendServiceTag(socket, backendToken);
178
166
  }
179
167
 
180
- public async getPublicKeyForValidation(backendTokenArg = this.optionsArg.backendToken): Promise<string> {
181
- const backendToken = this.requireBackendToken(backendTokenArg);
182
- const socket = await this.connect();
183
- const request = socket.createTypedRequest<plugins.idpInterfaces.request.IReq_GetPublicKeyForValidation>('getPublicKeyForValidation');
184
- const response = await this.raceWithStop(request.fire({ backendToken }));
185
- return response.publicKeyPem;
186
- }
187
-
188
168
  public async getPublicKeysForValidation(
189
169
  backendTokenArg = this.optionsArg.backendToken
190
170
  ): Promise<plugins.idpInterfaces.data.IJwtVerificationKey[]> {
191
171
  const backendToken = this.requireBackendToken(backendTokenArg);
192
172
  const socket = await this.connect();
193
- const request = socket.createTypedRequest<plugins.idpInterfaces.request.IReq_GetPublicKeyForValidation>('getPublicKeyForValidation');
173
+ const request = socket.createTypedRequest<plugins.idpInterfaces.request.IReq_GetPublicKeysForValidation>('getPublicKeysForValidation');
194
174
  const response = await this.raceWithStop(request.fire({ backendToken }));
195
175
  if (!Array.isArray(response.publicKeys) || response.publicKeys.length === 0) {
196
- throw new Error('IdP did not return a JWT verification key set; upgrade the IdP before enabling key rollover.');
176
+ throw new Error('IdP returned an invalid JWT verification key set.');
197
177
  }
198
178
  return response.publicKeys;
199
179
  }