@idp.global/sdk 1.3.0 → 1.3.1

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
@@ -5,6 +5,16 @@
5
5
 
6
6
 
7
7
 
8
+
9
+ ## 2026-05-18 - 1.3.1
10
+
11
+ ### Fixes
12
+
13
+ - default IdpGlobalServerClient baseUrl to the hosted idp.global endpoint (server-client)
14
+ - make server client baseUrl optional and fall back to https://idp.global
15
+ - add a test covering default and custom typedrequest endpoint resolution
16
+ - update README examples and API docs to describe the default hosted endpoint behavior
17
+
8
18
  ## 2026-05-18 - 1.3.0
9
19
 
10
20
  ### Features
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@idp.global/sdk',
6
- version: '1.3.0',
6
+ version: '1.3.1',
7
7
  description: 'Reusable browser and server SDK for idp.global authentication.'
8
8
  };
9
9
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSxpQkFBaUI7SUFDdkIsT0FBTyxFQUFFLE9BQU87SUFDaEIsV0FBVyxFQUFFLGdFQUFnRTtDQUM5RSxDQUFBIn0=
@@ -1,7 +1,8 @@
1
1
  import * as plugins from './plugins.js';
2
2
  export interface IIdpGlobalServerClientOptions {
3
- baseUrl: string;
3
+ baseUrl?: string;
4
4
  }
5
+ export declare const defaultIdpGlobalBaseUrl = "https://idp.global";
5
6
  export interface IIdpPasswordAuthResult {
6
7
  user: plugins.idpInterfaces.data.IUser;
7
8
  jwt: string;
@@ -12,7 +13,7 @@ export declare class IdpGlobalServerClient {
12
13
  private typedrouter;
13
14
  private typedsocket?;
14
15
  private typedsocketDeferred;
15
- constructor(optionsArg: IIdpGlobalServerClientOptions);
16
+ constructor(optionsArg?: IIdpGlobalServerClientOptions);
16
17
  connect(): Promise<plugins.typedsocket.TypedSocket>;
17
18
  stop(): Promise<void>;
18
19
  loginWithEmailAndPassword(optionsArg: {
@@ -1,10 +1,11 @@
1
1
  import * as plugins from './plugins.js';
2
+ export const defaultIdpGlobalBaseUrl = 'https://idp.global';
2
3
  export class IdpGlobalServerClient {
3
4
  optionsArg;
4
5
  typedrouter = new plugins.typedrequest.TypedRouter();
5
6
  typedsocket;
6
7
  typedsocketDeferred = plugins.smartpromise.defer();
7
- constructor(optionsArg) {
8
+ constructor(optionsArg = {}) {
8
9
  this.optionsArg = optionsArg;
9
10
  }
10
11
  async connect() {
@@ -44,7 +45,7 @@ export class IdpGlobalServerClient {
44
45
  };
45
46
  }
46
47
  getTypedRequestUrl() {
47
- let baseUrl = this.optionsArg.baseUrl.trim();
48
+ let baseUrl = (this.optionsArg.baseUrl || defaultIdpGlobalBaseUrl).trim();
48
49
  if (baseUrl.endsWith('/')) {
49
50
  baseUrl = baseUrl.slice(0, -1);
50
51
  }
@@ -54,4 +55,4 @@ export class IdpGlobalServerClient {
54
55
  return baseUrl;
55
56
  }
56
57
  }
57
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5pZHAtZ2xvYmFsLXNlcnZlci1jbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c19zZXJ2ZXIvY2xhc3Nlcy5pZHAtZ2xvYmFsLXNlcnZlci1jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFZeEMsTUFBTSxPQUFPLHFCQUFxQjtJQUtaO0lBSlosV0FBVyxHQUFRLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUMxRCxXQUFXLENBQW1DO0lBQzlDLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFtQyxDQUFDO0lBRTVGLFlBQW9CLFVBQXlDO1FBQXpDLGVBQVUsR0FBVixVQUFVLENBQStCO0lBQUcsQ0FBQztJQUUxRCxLQUFLLENBQUMsT0FBTztRQUNsQixJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNyQyxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUM7UUFDMUMsQ0FBQztRQUNELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNqQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sT0FBTyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUNuRSxJQUFJLENBQUMsV0FBVyxFQUNoQixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FDMUIsQ0FBQztRQUNGLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25ELE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQztJQUMxQyxDQUFDO0lBRU0sS0FBSyxDQUFDLElBQUk7UUFDZixNQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUM7SUFDL0IsQ0FBQztJQUVNLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxVQUErQztRQUNwRixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNwQyxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQXlFLHFDQUFxQyxDQUFDLENBQUM7UUFDOUosTUFBTSxhQUFhLEdBQUcsTUFBTSxZQUFZLENBQUMsSUFBSSxDQUFDO1lBQzVDLFFBQVEsRUFBRSxVQUFVLENBQUMsS0FBSztZQUMxQixRQUFRLEVBQUUsVUFBVSxDQUFDLFFBQVE7U0FDOUIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLElBQUksYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzdELE1BQU0sSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsdUNBQXVDLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDNUcsQ0FBQztRQUVELE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBZ0QsWUFBWSxDQUFDLENBQUM7UUFDOUcsTUFBTSxlQUFlLEdBQUcsTUFBTSxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsWUFBWSxFQUFFLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQ2hHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFFRCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQTJDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xHLE1BQU0sYUFBYSxHQUFHLE1BQU0sWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxlQUFlLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUM1RSxPQUFPO1lBQ0wsSUFBSSxFQUFFLGFBQWEsQ0FBQyxJQUFJO1lBQ3hCLEdBQUcsRUFBRSxlQUFlLENBQUMsR0FBRztZQUN4QixZQUFZLEVBQUUsZUFBZSxDQUFDLFlBQVksSUFBSSxhQUFhLENBQUMsWUFBWTtTQUN6RSxDQUFDO0lBQ0osQ0FBQztJQUVPLGtCQUFrQjtRQUN4QixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM3QyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMxQixPQUFPLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztZQUN2QyxPQUFPLEdBQUcsR0FBRyxPQUFPLGVBQWUsQ0FBQztRQUN0QyxDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztDQUNGIn0=
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5pZHAtZ2xvYmFsLXNlcnZlci1jbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c19zZXJ2ZXIvY2xhc3Nlcy5pZHAtZ2xvYmFsLXNlcnZlci1jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFNeEMsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsb0JBQW9CLENBQUM7QUFRNUQsTUFBTSxPQUFPLHFCQUFxQjtJQUtaO0lBSlosV0FBVyxHQUFRLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUMxRCxXQUFXLENBQW1DO0lBQzlDLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFtQyxDQUFDO0lBRTVGLFlBQW9CLGFBQTRDLEVBQUU7UUFBOUMsZUFBVSxHQUFWLFVBQVUsQ0FBb0M7SUFBRyxDQUFDO0lBRS9ELEtBQUssQ0FBQyxPQUFPO1FBQ2xCLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3JDLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQztRQUMxQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxPQUFPLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQ25FLElBQUksQ0FBQyxXQUFXLEVBQ2hCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUMxQixDQUFDO1FBQ0YsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkQsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDO0lBQzFDLENBQUM7SUFFTSxLQUFLLENBQUMsSUFBSTtRQUNmLE1BQU0sSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQztJQUMvQixDQUFDO0lBRU0sS0FBSyxDQUFDLHlCQUF5QixDQUFDLFVBQStDO1FBQ3BGLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3BDLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBeUUscUNBQXFDLENBQUMsQ0FBQztRQUM5SixNQUFNLGFBQWEsR0FBRyxNQUFNLFlBQVksQ0FBQyxJQUFJLENBQUM7WUFDNUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxLQUFLO1lBQzFCLFFBQVEsRUFBRSxVQUFVLENBQUMsUUFBUTtTQUM5QixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksSUFBSSxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDN0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUM1RyxDQUFDO1FBRUQsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFnRCxZQUFZLENBQUMsQ0FBQztRQUM5RyxNQUFNLGVBQWUsR0FBRyxNQUFNLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxZQUFZLEVBQUUsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDaEcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN6QixNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDOUMsQ0FBQztRQUVELE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBMkMsT0FBTyxDQUFDLENBQUM7UUFDbEcsTUFBTSxhQUFhLEdBQUcsTUFBTSxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLGVBQWUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQzVFLE9BQU87WUFDTCxJQUFJLEVBQUUsYUFBYSxDQUFDLElBQUk7WUFDeEIsR0FBRyxFQUFFLGVBQWUsQ0FBQyxHQUFHO1lBQ3hCLFlBQVksRUFBRSxlQUFlLENBQUMsWUFBWSxJQUFJLGFBQWEsQ0FBQyxZQUFZO1NBQ3pFLENBQUM7SUFDSixDQUFDO0lBRU8sa0JBQWtCO1FBQ3hCLElBQUksT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLElBQUksdUJBQXVCLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMxRSxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMxQixPQUFPLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztZQUN2QyxPQUFPLEdBQUcsR0FBRyxPQUFPLGVBQWUsQ0FBQztRQUN0QyxDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztDQUNGIn0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@idp.global/sdk",
3
- "version": "1.3.0",
3
+ "version": "1.3.1",
4
4
  "private": false,
5
5
  "description": "Reusable browser and server SDK for idp.global authentication.",
6
6
  "type": "module",
package/readme.md CHANGED
@@ -208,9 +208,7 @@ import {
208
208
  } from '@idp.global/sdk/server';
209
209
 
210
210
  const accountStore = new SmartdataAccountStore({ smartdataDb });
211
- const idpClient = new IdpGlobalServerClient({
212
- baseUrl: 'https://sso.workspace.global',
213
- });
211
+ const idpClient = new IdpGlobalServerClient();
214
212
 
215
213
  const authService = new AccountAuthService({
216
214
  store: accountStore,
@@ -230,7 +228,7 @@ if (!authResult) {
230
228
  console.log(authResult.account.role, authResult.authSource);
231
229
  ```
232
230
 
233
- In `auto` mode, the service tries local auth first when the account allows `local`; if that fails and the account allows `idp.global`, it uses the configured `IdpGlobalServerClient`. idp.global authentication is accepted only when the returned user email matches the local account email and the returned user ID matches the stored `idpSubject` when one is already set.
231
+ In `auto` mode, the service tries local auth first when the account allows `local`; if that fails and the account allows `idp.global`, it uses the configured `IdpGlobalServerClient`. `IdpGlobalServerClient` defaults to the hosted `https://idp.global` endpoint; pass `{ baseUrl }` only for self-hosted or staging IdP instances. idp.global authentication is accepted only when the returned user email matches the local account email and the returned user ID matches the stored `idpSubject` when one is already set.
234
232
 
235
233
  ### Server API Surface
236
234
 
@@ -256,7 +254,7 @@ The server export includes these TypeScript types:
256
254
  | `ICreateIdpSdkAccountOptions` | Input for account creation. |
257
255
  | `IAuthenticateAccountOptions` | Input for `AccountAuthService.authenticate()`. |
258
256
  | `IAuthenticatedAccountResult` | Successful auth result with account, auth source, and optional idp.global tokens. |
259
- | `IIdpGlobalServerClientOptions` | Server client configuration with `baseUrl`. |
257
+ | `IIdpGlobalServerClientOptions` | Server client configuration with optional `baseUrl`; defaults to `https://idp.global`. |
260
258
  | `IIdpPasswordAuthResult` | idp.global user, JWT, and refresh-token result. |
261
259
 
262
260
  ## Runtime Notes
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@idp.global/sdk',
6
- version: '1.3.0',
6
+ version: '1.3.1',
7
7
  description: 'Reusable browser and server SDK for idp.global authentication.'
8
8
  }
@@ -1,9 +1,11 @@
1
1
  import * as plugins from './plugins.js';
2
2
 
3
3
  export interface IIdpGlobalServerClientOptions {
4
- baseUrl: string;
4
+ baseUrl?: string;
5
5
  }
6
6
 
7
+ export const defaultIdpGlobalBaseUrl = 'https://idp.global';
8
+
7
9
  export interface IIdpPasswordAuthResult {
8
10
  user: plugins.idpInterfaces.data.IUser;
9
11
  jwt: string;
@@ -15,7 +17,7 @@ export class IdpGlobalServerClient {
15
17
  private typedsocket?: plugins.typedsocket.TypedSocket;
16
18
  private typedsocketDeferred = plugins.smartpromise.defer<plugins.typedsocket.TypedSocket>();
17
19
 
18
- constructor(private optionsArg: IIdpGlobalServerClientOptions) {}
20
+ constructor(private optionsArg: IIdpGlobalServerClientOptions = {}) {}
19
21
 
20
22
  public async connect(): Promise<plugins.typedsocket.TypedSocket> {
21
23
  if (this.typedsocketDeferred.claimed) {
@@ -62,7 +64,7 @@ export class IdpGlobalServerClient {
62
64
  }
63
65
 
64
66
  private getTypedRequestUrl(): string {
65
- let baseUrl = this.optionsArg.baseUrl.trim();
67
+ let baseUrl = (this.optionsArg.baseUrl || defaultIdpGlobalBaseUrl).trim();
66
68
  if (baseUrl.endsWith('/')) {
67
69
  baseUrl = baseUrl.slice(0, -1);
68
70
  }