@idp.global/sdk 11.0.0 → 13.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,35 @@
1
1
  # Changelog
2
2
 
3
+ ## 2026-07-18 - 13.0.0
4
+
5
+ ### Breaking Changes
6
+
7
+ - adopt encrypted OIDC client-secret delivery contracts (secret-delivery)
8
+ - Upgrade @idp.global/interfaces to ^22.0.0.
9
+ - Expose RSA-OAEP-256 secret-delivery context creation and verified envelope decryption from the browser entrypoint.
10
+ - Add acknowledgeAppSecretDelivery typed request accessor.
11
+ - Add tests for operation-bound envelope validation and malformed delivery rejection.
12
+
13
+ ## 2026-07-18 - 12.0.0
14
+
15
+ ### Breaking Changes
16
+
17
+ - adopt interfaces v20 current-user DTO for password auth results (server-client)
18
+ - Upgrade @idp.global/interfaces to ^20.0.1.
19
+ - Change IIdpPasswordAuthResult.user from IUser to ICurrentUserDto to match the privacy-safe whoIs response.
20
+
21
+ ## 2026-07-18 - next
22
+
23
+ ### Breaking Changes
24
+
25
+ - adopt encrypted OIDC client-secret delivery contracts
26
+ - Upgrade `@idp.global/interfaces` to ^22.0.0.
27
+ - Expose RSA-OAEP-256 delivery-key creation and verified envelope decryption in the browser entrypoint.
28
+ - Add the `acknowledgeAppSecretDelivery` typed request accessor.
29
+ - adopt `@idp.global/interfaces` 20 and type password-login identity data as the
30
+ privacy-safe `ICurrentUserDto` actually returned by `whoIs`, rather than the
31
+ persisted `IUser` shape that includes server-only credential fields
32
+
3
33
  ## 2026-07-16 - 11.0.0
4
34
 
5
35
  ### Breaking Changes
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@idp.global/sdk',
6
- version: '11.0.0',
6
+ version: '13.0.0',
7
7
  description: 'Reusable browser and server SDK for idp.global authentication.'
8
8
  };
9
9
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSxpQkFBaUI7SUFDdkIsT0FBTyxFQUFFLFFBQVE7SUFDakIsV0FBVyxFQUFFLGdFQUFnRTtDQUM5RSxDQUFBIn0=
@@ -87,6 +87,7 @@ export declare class IdpRequests {
87
87
  get updateGlobalApp(): plugins.typedrequest.TypedRequest<plugins.idpInterfaces.request.IReq_UpdateGlobalApp>;
88
88
  get deleteGlobalApp(): plugins.typedrequest.TypedRequest<plugins.idpInterfaces.request.IReq_DeleteGlobalApp>;
89
89
  get regenerateAppCredentials(): plugins.typedrequest.TypedRequest<plugins.idpInterfaces.request.IReq_RegenerateAppCredentials>;
90
+ get acknowledgeAppSecretDelivery(): plugins.typedrequest.TypedRequest<plugins.idpInterfaces.request.IReq_AcknowledgeAppSecretDelivery>;
90
91
  get rotateOidcSigningKey(): plugins.typedrequest.TypedRequest<plugins.idpInterfaces.request.IReq_RotateOidcSigningKey>;
91
92
  get getGlobalUsers(): plugins.typedrequest.TypedRequest<plugins.idpInterfaces.request.IReq_GetGlobalUsers>;
92
93
  get setUserSuspension(): plugins.typedrequest.TypedRequest<plugins.idpInterfaces.request.IReq_SetUserSuspension>;
@@ -256,6 +256,9 @@ export class IdpRequests {
256
256
  get regenerateAppCredentials() {
257
257
  return this.idpClientArg.typedsocket.createTypedRequest('regenerateAppCredentials');
258
258
  }
259
+ get acknowledgeAppSecretDelivery() {
260
+ return this.idpClientArg.typedsocket.createTypedRequest('acknowledgeAppSecretDelivery');
261
+ }
259
262
  get rotateOidcSigningKey() {
260
263
  return this.idpClientArg.typedsocket.createTypedRequest('rotateOidcSigningKey');
261
264
  }
@@ -305,4 +308,4 @@ export class IdpRequests {
305
308
  return this.idpClientArg.typedsocket.createTypedRequest('discoverSsoForEmail');
306
309
  }
307
310
  }
308
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5pZHByZXF1ZXN0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzX2Jyb3dzZXIvY2xhc3Nlcy5pZHByZXF1ZXN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUd4QyxNQUFNLE9BQU8sV0FBVztJQUNGO0lBQXBCLFlBQW9CLFlBQXVCO1FBQXZCLGlCQUFZLEdBQVosWUFBWSxDQUFXO0lBQUcsQ0FBQztJQUUvQyxJQUFXLDZCQUE2QjtRQUN0QyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFtRSwrQkFBK0IsQ0FBQyxDQUFDO0lBQzdKLENBQUM7SUFFRCxJQUFXLE9BQU87UUFDaEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBNEQsd0JBQXdCLENBQUMsQ0FBQztJQUMvSSxDQUFDO0lBRUQsSUFBVyxrQkFBa0I7UUFDM0IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBd0Qsb0JBQW9CLENBQUMsQ0FBQztJQUN2SSxDQUFDO0lBRUQsSUFBVyw0QkFBNEI7UUFDckMsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBeUUscUNBQXFDLENBQUMsQ0FBQztJQUN6SyxDQUFDO0lBRUQsSUFBVyxTQUFTO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQWdELFlBQVksQ0FBQyxDQUFDO0lBQ3ZILENBQUM7SUFFRCxJQUFXLGtCQUFrQjtRQUMzQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUEwRSxzQ0FBc0MsQ0FBQyxDQUFDO0lBQzNLLENBQUM7SUFFRCxJQUFXLGNBQWM7UUFDdkIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxrQkFB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
311
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5pZHByZXF1ZXN0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzX2Jyb3dzZXIvY2xhc3Nlcy5pZHByZXF1ZXN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUd4QyxNQUFNLE9BQU8sV0FBVztJQUNGO0lBQXBCLFlBQW9CLFlBQXVCO1FBQXZCLGlCQUFZLEdBQVosWUFBWSxDQUFXO0lBQUcsQ0FBQztJQUUvQyxJQUFXLDZCQUE2QjtRQUN0QyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFtRSwrQkFBK0IsQ0FBQyxDQUFDO0lBQzdKLENBQUM7SUFFRCxJQUFXLE9BQU87UUFDaEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBNEQsd0JBQXdCLENBQUMsQ0FBQztJQUMvSSxDQUFDO0lBRUQsSUFBVyxrQkFBa0I7UUFDM0IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBd0Qsb0JBQW9CLENBQUMsQ0FBQztJQUN2SSxDQUFDO0lBRUQsSUFBVyw0QkFBNEI7UUFDckMsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBeUUscUNBQXFDLENBQUMsQ0FBQztJQUN6SyxDQUFDO0lBRUQsSUFBVyxTQUFTO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQWdELFlBQVksQ0FBQyxDQUFDO0lBQ3ZILENBQUM7SUFFRCxJQUFXLGtCQUFrQjtRQUMzQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUEwRSxzQ0FBc0MsQ0FBQyxDQUFDO0lBQzNLLENBQUM7SUFFRCxJQUFXLGNBQWM7UUFDdkIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxrQkFB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
@@ -1,2 +1,3 @@
1
1
  export * from './classes.idpclient.js';
2
2
  export * from './classes.idprequests.js';
3
+ export * from './secret-delivery.js';
@@ -1,3 +1,4 @@
1
1
  export * from './classes.idpclient.js';
2
2
  export * from './classes.idprequests.js';
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c19icm93c2VyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYywwQkFBMEIsQ0FBQyJ9
3
+ export * from './secret-delivery.js';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c19icm93c2VyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLHNCQUFzQixDQUFDIn0=
@@ -0,0 +1,13 @@
1
+ import type * as plugins from './plugins.js';
2
+ export interface ISecretDeliveryContext {
3
+ operationId: string;
4
+ request: plugins.idpInterfaces.request.ISecretDeliveryRequest;
5
+ privateKey: CryptoKey;
6
+ }
7
+ /**
8
+ * Creates one caller-held, non-exportable decryption key and its canonical
9
+ * RSA-OAEP-256 delivery request. Keep the returned context until acknowledgement.
10
+ */
11
+ export declare const createSecretDeliveryContext: (operationIdArg?: `${string}-${string}-${string}-${string}-${string}`) => Promise<ISecretDeliveryContext>;
12
+ /** Verifies and decrypts one pending delivery envelope. */
13
+ export declare const decryptSecretDeliveryEnvelope: (contextArg: ISecretDeliveryContext, envelopeArg: plugins.idpInterfaces.request.TSecretDeliveryEnvelope) => Promise<string>;
@@ -0,0 +1,90 @@
1
+ const requireOperationId = (valueArg) => {
2
+ if (typeof valueArg !== 'string'
3
+ || valueArg.length === 0
4
+ || valueArg.length > 128
5
+ || valueArg.trim() !== valueArg
6
+ || /[\u0000-\u001f\u007f]/.test(valueArg)) {
7
+ throw new Error('Secret-delivery operation id is malformed.');
8
+ }
9
+ return valueArg;
10
+ };
11
+ const bytesToBase64 = (bytesArg) => {
12
+ let binary = '';
13
+ for (const byte of bytesArg)
14
+ binary += String.fromCharCode(byte);
15
+ return globalThis.btoa(binary);
16
+ };
17
+ const base64ToBytes = (valueArg) => {
18
+ if (typeof valueArg !== 'string'
19
+ || valueArg.length === 0
20
+ || valueArg.length > 16_384
21
+ || !/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(valueArg)) {
22
+ throw new Error('Secret-delivery base64 value is malformed.');
23
+ }
24
+ const binary = globalThis.atob(valueArg);
25
+ const bytes = Uint8Array.from(binary, (characterArg) => characterArg.charCodeAt(0));
26
+ if (bytesToBase64(bytes) !== valueArg) {
27
+ throw new Error('Secret-delivery base64 value is not canonical.');
28
+ }
29
+ return bytes;
30
+ };
31
+ const copyToArrayBuffer = (bytesArg) => {
32
+ const copy = new Uint8Array(bytesArg.byteLength);
33
+ copy.set(bytesArg);
34
+ return copy.buffer;
35
+ };
36
+ const sha256Hex = async (bytesArg) => {
37
+ const digest = new Uint8Array(await globalThis.crypto.subtle.digest('SHA-256', copyToArrayBuffer(bytesArg)));
38
+ return [...digest].map((byteArg) => byteArg.toString(16).padStart(2, '0')).join('');
39
+ };
40
+ /**
41
+ * Creates one caller-held, non-exportable decryption key and its canonical
42
+ * RSA-OAEP-256 delivery request. Keep the returned context until acknowledgement.
43
+ */
44
+ export const createSecretDeliveryContext = async (operationIdArg = globalThis.crypto.randomUUID()) => {
45
+ const operationId = requireOperationId(operationIdArg);
46
+ const algorithm = {
47
+ name: 'RSA-OAEP',
48
+ modulusLength: 3072,
49
+ publicExponent: new Uint8Array([1, 0, 1]),
50
+ hash: 'SHA-256',
51
+ };
52
+ const generated = await globalThis.crypto.subtle.generateKey(algorithm, true, ['encrypt', 'decrypt']);
53
+ const [publicKeySpki, privateKeyPkcs8] = await Promise.all([
54
+ globalThis.crypto.subtle.exportKey('spki', generated.publicKey),
55
+ globalThis.crypto.subtle.exportKey('pkcs8', generated.privateKey),
56
+ ]);
57
+ const privateKey = await globalThis.crypto.subtle.importKey('pkcs8', privateKeyPkcs8, { name: 'RSA-OAEP', hash: 'SHA-256' }, false, ['decrypt']);
58
+ new Uint8Array(privateKeyPkcs8).fill(0);
59
+ return {
60
+ operationId,
61
+ request: {
62
+ algorithm: 'RSA-OAEP-256',
63
+ publicKeySpkiBase64: bytesToBase64(new Uint8Array(publicKeySpki)),
64
+ },
65
+ privateKey,
66
+ };
67
+ };
68
+ /** Verifies and decrypts one pending delivery envelope. */
69
+ export const decryptSecretDeliveryEnvelope = async (contextArg, envelopeArg) => {
70
+ if (envelopeArg.status !== 'pending'
71
+ || envelopeArg.operationId !== contextArg.operationId
72
+ || envelopeArg.algorithm !== 'RSA-OAEP-256') {
73
+ throw new Error('Secret-delivery envelope does not match this operation.');
74
+ }
75
+ const publicKeyBytes = base64ToBytes(contextArg.request.publicKeySpkiBase64);
76
+ if (await sha256Hex(publicKeyBytes) !== envelopeArg.publicKeySha256) {
77
+ throw new Error('Secret-delivery public-key fingerprint does not match.');
78
+ }
79
+ const ciphertext = base64ToBytes(envelopeArg.ciphertextBase64);
80
+ if (await sha256Hex(ciphertext) !== envelopeArg.ciphertextSha256) {
81
+ throw new Error('Secret-delivery ciphertext digest does not match.');
82
+ }
83
+ const plaintext = await globalThis.crypto.subtle.decrypt({ name: 'RSA-OAEP' }, contextArg.privateKey, copyToArrayBuffer(ciphertext));
84
+ const secret = new TextDecoder('utf-8', { fatal: true }).decode(plaintext);
85
+ if (!/^[A-Za-z0-9_-]{43}$/.test(secret)) {
86
+ throw new Error('Decrypted client secret is malformed.');
87
+ }
88
+ return secret;
89
+ };
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjcmV0LWRlbGl2ZXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHNfYnJvd3Nlci9zZWNyZXQtZGVsaXZlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUUEsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLFFBQWdCLEVBQUUsRUFBRTtJQUM5QyxJQUNFLE9BQU8sUUFBUSxLQUFLLFFBQVE7V0FDekIsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDO1dBQ3JCLFFBQVEsQ0FBQyxNQUFNLEdBQUcsR0FBRztXQUNyQixRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssUUFBUTtXQUM1Qix1QkFBdUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQ3pDLENBQUM7UUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUNELE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUMsQ0FBQztBQUVGLE1BQU0sYUFBYSxHQUFHLENBQUMsUUFBb0IsRUFBRSxFQUFFO0lBQzdDLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUNoQixLQUFLLE1BQU0sSUFBSSxJQUFJLFFBQVE7UUFBRSxNQUFNLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqRSxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDakMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxhQUFhLEdBQUcsQ0FBQyxRQUFnQixFQUFFLEVBQUU7SUFDekMsSUFDRSxPQUFPLFFBQVEsS0FBSyxRQUFRO1dBQ3pCLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQztXQUNyQixRQUFRLENBQUMsTUFBTSxHQUFHLE1BQU07V0FDeEIsQ0FBQyxrRUFBa0UsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQ3JGLENBQUM7UUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUNELE1B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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
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@idp.global/sdk",
3
- "version": "11.0.0",
3
+ "version": "13.0.0",
4
4
  "private": false,
5
5
  "description": "Reusable browser and server SDK for idp.global authentication.",
6
6
  "type": "module",
@@ -16,7 +16,7 @@
16
16
  "dependencies": {
17
17
  "@api.global/typedrequest": "^3.3.2",
18
18
  "@api.global/typedsocket": "^4.2.5",
19
- "@idp.global/interfaces": "^13.1.0",
19
+ "@idp.global/interfaces": "^22.0.0",
20
20
  "@push.rocks/smartdata": "^7.2.1",
21
21
  "@push.rocks/smartjson": "^6.0.1",
22
22
  "@push.rocks/smartpromise": "^4.2.4",
package/readme.md CHANGED
@@ -294,7 +294,7 @@ The server export includes these TypeScript types:
294
294
  | `IAuthenticateAccountOptions` | Input for `AccountAuthService.authenticate()`. |
295
295
  | `IAuthenticatedAccountResult` | Successful auth result with account, auth source, and optional idp.global tokens. |
296
296
  | `IIdpGlobalServerClientOptions` | Server client configuration with optional `baseUrl` and `backendToken`; defaults to `https://idp.global`. |
297
- | `IIdpPasswordAuthResult` | idp.global user, JWT, and refresh-token result. |
297
+ | `IIdpPasswordAuthResult` | Privacy-safe current-user DTO, JWT, and refresh-token result. |
298
298
 
299
299
  ## Runtime Notes
300
300
 
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@idp.global/sdk',
6
- version: '11.0.0',
6
+ version: '13.0.0',
7
7
  description: 'Reusable browser and server SDK for idp.global authentication.'
8
8
  }
@@ -340,6 +340,10 @@ export class IdpRequests {
340
340
  return this.idpClientArg.typedsocket.createTypedRequest<plugins.idpInterfaces.request.IReq_RegenerateAppCredentials>('regenerateAppCredentials');
341
341
  }
342
342
 
343
+ public get acknowledgeAppSecretDelivery() {
344
+ return this.idpClientArg.typedsocket.createTypedRequest<plugins.idpInterfaces.request.IReq_AcknowledgeAppSecretDelivery>('acknowledgeAppSecretDelivery');
345
+ }
346
+
343
347
  public get rotateOidcSigningKey() {
344
348
  return this.idpClientArg.typedsocket.createTypedRequest<plugins.idpInterfaces.request.IReq_RotateOidcSigningKey>('rotateOidcSigningKey');
345
349
  }
@@ -1,2 +1,3 @@
1
1
  export * from './classes.idpclient.js';
2
2
  export * from './classes.idprequests.js';
3
+ export * from './secret-delivery.js';
@@ -0,0 +1,130 @@
1
+ import type * as plugins from './plugins.js';
2
+
3
+ export interface ISecretDeliveryContext {
4
+ operationId: string;
5
+ request: plugins.idpInterfaces.request.ISecretDeliveryRequest;
6
+ privateKey: CryptoKey;
7
+ }
8
+
9
+ const requireOperationId = (valueArg: string) => {
10
+ if (
11
+ typeof valueArg !== 'string'
12
+ || valueArg.length === 0
13
+ || valueArg.length > 128
14
+ || valueArg.trim() !== valueArg
15
+ || /[\u0000-\u001f\u007f]/.test(valueArg)
16
+ ) {
17
+ throw new Error('Secret-delivery operation id is malformed.');
18
+ }
19
+ return valueArg;
20
+ };
21
+
22
+ const bytesToBase64 = (bytesArg: Uint8Array) => {
23
+ let binary = '';
24
+ for (const byte of bytesArg) binary += String.fromCharCode(byte);
25
+ return globalThis.btoa(binary);
26
+ };
27
+
28
+ const base64ToBytes = (valueArg: string) => {
29
+ if (
30
+ typeof valueArg !== 'string'
31
+ || valueArg.length === 0
32
+ || valueArg.length > 16_384
33
+ || !/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(valueArg)
34
+ ) {
35
+ throw new Error('Secret-delivery base64 value is malformed.');
36
+ }
37
+ const binary = globalThis.atob(valueArg);
38
+ const bytes = Uint8Array.from(binary, (characterArg) => characterArg.charCodeAt(0));
39
+ if (bytesToBase64(bytes) !== valueArg) {
40
+ throw new Error('Secret-delivery base64 value is not canonical.');
41
+ }
42
+ return bytes;
43
+ };
44
+
45
+ const copyToArrayBuffer = (bytesArg: Uint8Array) => {
46
+ const copy = new Uint8Array(bytesArg.byteLength);
47
+ copy.set(bytesArg);
48
+ return copy.buffer;
49
+ };
50
+
51
+ const sha256Hex = async (bytesArg: Uint8Array) => {
52
+ const digest = new Uint8Array(await globalThis.crypto.subtle.digest(
53
+ 'SHA-256',
54
+ copyToArrayBuffer(bytesArg),
55
+ ));
56
+ return [...digest].map((byteArg) => byteArg.toString(16).padStart(2, '0')).join('');
57
+ };
58
+
59
+ /**
60
+ * Creates one caller-held, non-exportable decryption key and its canonical
61
+ * RSA-OAEP-256 delivery request. Keep the returned context until acknowledgement.
62
+ */
63
+ export const createSecretDeliveryContext = async (
64
+ operationIdArg = globalThis.crypto.randomUUID(),
65
+ ): Promise<ISecretDeliveryContext> => {
66
+ const operationId = requireOperationId(operationIdArg);
67
+ const algorithm: RsaHashedKeyGenParams = {
68
+ name: 'RSA-OAEP',
69
+ modulusLength: 3072,
70
+ publicExponent: new Uint8Array([1, 0, 1]),
71
+ hash: 'SHA-256',
72
+ };
73
+ const generated = await globalThis.crypto.subtle.generateKey(
74
+ algorithm,
75
+ true,
76
+ ['encrypt', 'decrypt'],
77
+ ) as CryptoKeyPair;
78
+ const [publicKeySpki, privateKeyPkcs8] = await Promise.all([
79
+ globalThis.crypto.subtle.exportKey('spki', generated.publicKey),
80
+ globalThis.crypto.subtle.exportKey('pkcs8', generated.privateKey),
81
+ ]);
82
+ const privateKey = await globalThis.crypto.subtle.importKey(
83
+ 'pkcs8',
84
+ privateKeyPkcs8,
85
+ { name: 'RSA-OAEP', hash: 'SHA-256' },
86
+ false,
87
+ ['decrypt'],
88
+ );
89
+ new Uint8Array(privateKeyPkcs8).fill(0);
90
+ return {
91
+ operationId,
92
+ request: {
93
+ algorithm: 'RSA-OAEP-256',
94
+ publicKeySpkiBase64: bytesToBase64(new Uint8Array(publicKeySpki)),
95
+ },
96
+ privateKey,
97
+ };
98
+ };
99
+
100
+ /** Verifies and decrypts one pending delivery envelope. */
101
+ export const decryptSecretDeliveryEnvelope = async (
102
+ contextArg: ISecretDeliveryContext,
103
+ envelopeArg: plugins.idpInterfaces.request.TSecretDeliveryEnvelope,
104
+ ) => {
105
+ if (
106
+ envelopeArg.status !== 'pending'
107
+ || envelopeArg.operationId !== contextArg.operationId
108
+ || envelopeArg.algorithm !== 'RSA-OAEP-256'
109
+ ) {
110
+ throw new Error('Secret-delivery envelope does not match this operation.');
111
+ }
112
+ const publicKeyBytes = base64ToBytes(contextArg.request.publicKeySpkiBase64);
113
+ if (await sha256Hex(publicKeyBytes) !== envelopeArg.publicKeySha256) {
114
+ throw new Error('Secret-delivery public-key fingerprint does not match.');
115
+ }
116
+ const ciphertext = base64ToBytes(envelopeArg.ciphertextBase64);
117
+ if (await sha256Hex(ciphertext) !== envelopeArg.ciphertextSha256) {
118
+ throw new Error('Secret-delivery ciphertext digest does not match.');
119
+ }
120
+ const plaintext = await globalThis.crypto.subtle.decrypt(
121
+ { name: 'RSA-OAEP' },
122
+ contextArg.privateKey,
123
+ copyToArrayBuffer(ciphertext),
124
+ );
125
+ const secret = new TextDecoder('utf-8', { fatal: true }).decode(plaintext);
126
+ if (!/^[A-Za-z0-9_-]{43}$/.test(secret)) {
127
+ throw new Error('Decrypted client secret is malformed.');
128
+ }
129
+ return secret;
130
+ };
@@ -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
  }