@tidecloak/js 0.14.41 → 0.14.42-staging

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/README.md +32 -47
  2. package/dist/cjs/lib/tidecloak-dpop.js +151 -42
  3. package/dist/cjs/lib/tidecloak-dpop.js.map +1 -1
  4. package/dist/cjs/lib/tidecloak.js +300 -378
  5. package/dist/cjs/lib/tidecloak.js.map +1 -1
  6. package/dist/cjs/src/AdminAPI.js +12 -19
  7. package/dist/cjs/src/AdminAPI.js.map +1 -1
  8. package/dist/cjs/src/IAMService.js +155 -2098
  9. package/dist/cjs/src/IAMService.js.map +1 -1
  10. package/dist/cjs/src/index.js +1 -7
  11. package/dist/cjs/src/index.js.map +1 -1
  12. package/dist/esm/lib/tidecloak-dpop.js +151 -42
  13. package/dist/esm/lib/tidecloak-dpop.js.map +1 -1
  14. package/dist/esm/lib/tidecloak.js +300 -377
  15. package/dist/esm/lib/tidecloak.js.map +1 -1
  16. package/dist/esm/src/AdminAPI.js +3 -7
  17. package/dist/esm/src/AdminAPI.js.map +1 -1
  18. package/dist/esm/src/IAMService.js +152 -2065
  19. package/dist/esm/src/IAMService.js.map +1 -1
  20. package/dist/esm/src/index.js +1 -7
  21. package/dist/esm/src/index.js.map +1 -1
  22. package/dist/types/AdminAPI.d.ts +1 -1
  23. package/dist/types/IAMService.d.ts +52 -603
  24. package/dist/types/index.d.ts +1 -11
  25. package/dist/types/lib/tidecloak-dpop.d.ts +19 -3
  26. package/dist/types/lib/tidecloak.d.ts +46 -38
  27. package/dist/types/src/AdminAPI.d.ts +1 -1
  28. package/dist/types/src/IAMService.d.ts +52 -603
  29. package/dist/types/src/index.d.ts +1 -11
  30. package/docs/FRONT_CHANNEL.md +55 -55
  31. package/lib/README.md +10 -14
  32. package/package.json +4 -25
  33. package/dist/cjs/lib/secureFetchPolicy.js +0 -45
  34. package/dist/cjs/lib/secureFetchPolicy.js.map +0 -1
  35. package/dist/cjs/src/dpopRoute.js +0 -30
  36. package/dist/cjs/src/dpopRoute.js.map +0 -1
  37. package/dist/cjs/src/dpopServer.js +0 -77
  38. package/dist/cjs/src/dpopServer.js.map +0 -1
  39. package/dist/cjs/src/generated/dpopAuthAsset.js +0 -7
  40. package/dist/cjs/src/generated/dpopAuthAsset.js.map +0 -1
  41. package/dist/cjs/src/policy-react.js +0 -51
  42. package/dist/cjs/src/policy-react.js.map +0 -1
  43. package/dist/cjs/src/types.js +0 -6
  44. package/dist/cjs/src/types.js.map +0 -1
  45. package/dist/cjs/src/utils/dpopAuthPage.js +0 -69
  46. package/dist/cjs/src/utils/dpopAuthPage.js.map +0 -1
  47. package/dist/cjs/src/utils/fetch.js +0 -39
  48. package/dist/cjs/src/utils/fetch.js.map +0 -1
  49. package/dist/cjs/src/utils/index.js +0 -17
  50. package/dist/cjs/src/utils/index.js.map +0 -1
  51. package/dist/cjs/src/utils/initOptions.js +0 -78
  52. package/dist/cjs/src/utils/initOptions.js.map +0 -1
  53. package/dist/cjs/src/utils/pkce.js +0 -48
  54. package/dist/cjs/src/utils/pkce.js.map +0 -1
  55. package/dist/cjs/src/utils/silentCheckSso.js +0 -138
  56. package/dist/cjs/src/utils/silentCheckSso.js.map +0 -1
  57. package/dist/cjs/src/vite.js +0 -43
  58. package/dist/cjs/src/vite.js.map +0 -1
  59. package/dist/esm/lib/secureFetchPolicy.js +0 -42
  60. package/dist/esm/lib/secureFetchPolicy.js.map +0 -1
  61. package/dist/esm/src/dpopRoute.js +0 -27
  62. package/dist/esm/src/dpopRoute.js.map +0 -1
  63. package/dist/esm/src/dpopServer.js +0 -68
  64. package/dist/esm/src/dpopServer.js.map +0 -1
  65. package/dist/esm/src/generated/dpopAuthAsset.js +0 -4
  66. package/dist/esm/src/generated/dpopAuthAsset.js.map +0 -1
  67. package/dist/esm/src/policy-react.js +0 -45
  68. package/dist/esm/src/policy-react.js.map +0 -1
  69. package/dist/esm/src/types.js +0 -5
  70. package/dist/esm/src/types.js.map +0 -1
  71. package/dist/esm/src/utils/dpopAuthPage.js +0 -63
  72. package/dist/esm/src/utils/dpopAuthPage.js.map +0 -1
  73. package/dist/esm/src/utils/fetch.js +0 -36
  74. package/dist/esm/src/utils/fetch.js.map +0 -1
  75. package/dist/esm/src/utils/index.js +0 -6
  76. package/dist/esm/src/utils/index.js.map +0 -1
  77. package/dist/esm/src/utils/initOptions.js +0 -75
  78. package/dist/esm/src/utils/initOptions.js.map +0 -1
  79. package/dist/esm/src/utils/pkce.js +0 -43
  80. package/dist/esm/src/utils/pkce.js.map +0 -1
  81. package/dist/esm/src/utils/silentCheckSso.js +0 -134
  82. package/dist/esm/src/utils/silentCheckSso.js.map +0 -1
  83. package/dist/esm/src/vite.js +0 -40
  84. package/dist/esm/src/vite.js.map +0 -1
  85. package/dist/types/dpopRoute.d.ts +0 -11
  86. package/dist/types/dpopServer.d.ts +0 -35
  87. package/dist/types/generated/dpopAuthAsset.d.ts +0 -2
  88. package/dist/types/lib/secureFetchPolicy.d.ts +0 -37
  89. package/dist/types/policy-react.d.ts +0 -40
  90. package/dist/types/src/dpopRoute.d.ts +0 -11
  91. package/dist/types/src/dpopServer.d.ts +0 -35
  92. package/dist/types/src/generated/dpopAuthAsset.d.ts +0 -2
  93. package/dist/types/src/policy-react.d.ts +0 -40
  94. package/dist/types/src/types.d.ts +0 -114
  95. package/dist/types/src/utils/dpopAuthPage.d.ts +0 -22
  96. package/dist/types/src/utils/fetch.d.ts +0 -11
  97. package/dist/types/src/utils/index.d.ts +0 -5
  98. package/dist/types/src/utils/initOptions.d.ts +0 -69
  99. package/dist/types/src/utils/pkce.d.ts +0 -24
  100. package/dist/types/src/utils/silentCheckSso.d.ts +0 -82
  101. package/dist/types/src/vite.d.ts +0 -13
  102. package/dist/types/types.d.ts +0 -114
  103. package/dist/types/utils/dpopAuthPage.d.ts +0 -22
  104. package/dist/types/utils/fetch.d.ts +0 -11
  105. package/dist/types/utils/index.d.ts +0 -5
  106. package/dist/types/utils/initOptions.d.ts +0 -69
  107. package/dist/types/utils/pkce.d.ts +0 -24
  108. package/dist/types/utils/silentCheckSso.d.ts +0 -82
  109. package/dist/types/vite.d.ts +0 -13
  110. package/docs/HYBRID_MODE.md +0 -185
  111. package/docs/NATIVE_MODE.md +0 -284
@@ -1,15 +1,5 @@
1
- export { default as IAMService } from './IAMService.js';
1
+ export { IAMService } from './IAMService.js';
2
2
  export { default as TideCloak } from "../lib/tidecloak.js";
3
3
  export { RequestEnclave, ApprovalEnclaveNew } from "../lib/tidecloak.js";
4
4
  export { Tools, Models } from "@tideorg/js";
5
- export type NativeAdapter = import('./types.js').NativeAdapter;
6
- export type NativeTokenData = import('./types.js').NativeTokenData;
7
- export type NativeAuthCallbackResult = import('./types.js').NativeAuthCallbackResult;
8
- export type NativeEncryptionCallbackResult = import('./types.js').NativeEncryptionCallbackResult;
9
- export type NativeConfig = import('./types.js').NativeConfig;
10
- /** @typedef {import('./types.js').NativeAdapter} NativeAdapter */
11
- /** @typedef {import('./types.js').NativeTokenData} NativeTokenData */
12
- /** @typedef {import('./types.js').NativeAuthCallbackResult} NativeAuthCallbackResult */
13
- /** @typedef {import('./types.js').NativeEncryptionCallbackResult} NativeEncryptionCallbackResult */
14
- /** @typedef {import('./types.js').NativeConfig} NativeConfig */
15
5
  export { default as AdminAPI, AdminAPI as AdminAPIClass } from './AdminAPI.js';
@@ -1,3 +1,7 @@
1
+ /**
2
+ * @import { DPoPState, DPoPSignatureProviderOptions } from "./tidecloak-dpop.js"
3
+ */
4
+ import type { DPoPSignatureProviderOptions } from "./tidecloak-dpop.js";
1
5
  /** @enum {string} */
2
6
  export declare const BrowserSignatureAlgs: {
3
7
  ES256: string;
@@ -51,8 +55,20 @@ export declare class DPoPSignatureProvider {
51
55
  */
52
56
  generateDPoPProof(url: string, httpMethod: string, accessToken?: string, nonce?: string): Promise<string>;
53
57
  /**
54
- * Compute the SHA256 thumbprint of the DPoP Public Key
55
- * @returns {string} Base64 URL Encoding of the thumbprint
58
+ * Compute the RFC 7638 JWK thumbprint of the DPoP public key.
59
+ * @returns {Promise<string>} Base64url-encoded SHA-256 thumbprint
56
60
  */
57
- generateJWKThumbprint(): string;
61
+ generateJWKThumbprint(): Promise<string>;
62
+ /**
63
+ * Sign a delegation request as a JWT using the DPoP private key.
64
+ * The resulting JWT proves the user authorizes the delegation described by the claims.
65
+ *
66
+ * @param {string} resourcePublicKeyInfo Base64 URL encoded Ed25519 SubjectPublicKeyInfo
67
+ * @param {string} challengeMessage UTF8 text
68
+ * @param {string} resourceChallengeSignature Base64 URL encoded signature
69
+ * @param {string} accessToken Access token if calling resource server
70
+ * @returns {Promise<string>} Compact JWT string (header.payload.signature)
71
+ * @throws {Error} If the resource's challenge signature cannot be verified
72
+ */
73
+ generateResourceDelegation(resourcePublicKeyInfo: string, challengeMessage: string, resourceChallengeSignature: string, accessToken: string): Promise<string>;
58
74
  }
@@ -18,7 +18,24 @@ export type LoginIframe = {
18
18
  iframe?: HTMLIFrameElement | undefined;
19
19
  iframeOrigin?: string | undefined;
20
20
  };
21
- export { shouldAttachDpopProof } from './secureFetchPolicy.js';
21
+ /**
22
+ * @typedef {Object} Endpoints
23
+ * @property {() => string} authorize
24
+ * @property {() => string} token
25
+ * @property {() => string} logout
26
+ * @property {() => string} checkSessionIframe
27
+ * @property {() => string=} thirdPartyCookiesIframe
28
+ * @property {() => string} register
29
+ * @property {() => string} userinfo
30
+ */
31
+ /**
32
+ * @typedef {Object} LoginIframe
33
+ * @property {boolean} enable
34
+ * @property {((error: Error | null, value?: boolean) => void)[]} callbackList
35
+ * @property {number} interval
36
+ * @property {HTMLIFrameElement=} iframe
37
+ * @property {string=} iframeOrigin
38
+ */
22
39
  export { RequestEnclave, ApprovalEnclave, ApprovalEnclaveNew, PolicySignRequest } from "heimdall-tide";
23
40
  export { Tools, Models } from "@tideorg/js";
24
41
  export type ParsedCallbackParams = {
@@ -57,7 +74,7 @@ export type AccessTokenResponse = {
57
74
  };
58
75
  export default class TideCloak {
59
76
  #private;
60
- useDPoP: import("./tidecloak.js").DPoPConfig | undefined;
77
+ dpopConfig: import("./tidecloak.js").DPoPConfig | undefined;
61
78
  dpopSigningAlgValuesSupported: string[] | undefined;
62
79
  issuer: string | undefined;
63
80
  didInitialize: boolean;
@@ -77,15 +94,6 @@ export default class TideCloak {
77
94
  silentCheckSsoRedirectUri: string | undefined;
78
95
  /** @type {boolean} */
79
96
  silentCheckSsoFallback: boolean;
80
- /**
81
- * Max time (ms) to wait for the hidden silent-check-sso iframe to post back
82
- * before treating the attempt as "not authenticated". Guards against the
83
- * post-logout wedge where the check-sso (or the Tide enclave it spins up)
84
- * never responds and init() would otherwise hang forever. Overridable via
85
- * initOptions.silentCheckSsoTimeout.
86
- * @type {number}
87
- */
88
- silentCheckSsoTimeout: number;
89
97
  /** @type {TideCloakPkceMethod} */
90
98
  pkceMethod: TideCloakPkceMethod;
91
99
  enableLogging: boolean;
@@ -106,9 +114,9 @@ export default class TideCloak {
106
114
  refreshToken: string | undefined;
107
115
  /** @type {TideCloakTokenParsed=} */
108
116
  refreshTokenParsed: TideCloakTokenParsed | undefined;
109
- /** @type {string | undefined} */
117
+ /** @type {string=} */
110
118
  doken: string | undefined;
111
- /** @type {TideCloakTokenParsed | undefined} */
119
+ /** @type {TideCloakTokenParsed=} */
112
120
  dokenParsed: TideCloakTokenParsed | undefined;
113
121
  /** @type {any} */
114
122
  requestEnclave: any;
@@ -166,11 +174,6 @@ export default class TideCloak {
166
174
  * @returns {Promise<void>}
167
175
  */
168
176
  login: (options?: TideCloakLoginOptions) => Promise<void>;
169
- /**
170
- * Ensure the access token is valid, refreshing if needed.
171
- * @returns {Promise<void>}
172
- */
173
- ensureTokenReady(): Promise<void>;
174
177
  /**
175
178
  * @param {TideCloakLoginOptions} [options]
176
179
  * @returns {Promise<string>}
@@ -234,8 +237,13 @@ export default class TideCloak {
234
237
  * @returns {Promise<boolean>}
235
238
  */
236
239
  updateToken: (minValidity: number) => Promise<boolean>;
237
- clearToken: () => void;
238
- secureFetch: (url: any, init?: {}) => Promise<Response>;
240
+ clearToken: () => Promise<void>;
241
+ fetch: (url: any, init?: {}) => Promise<Response>;
242
+ /**
243
+ * Ensure the access token is valid, refreshing if needed.
244
+ * @returns {Promise<void>}
245
+ */
246
+ ensureTokenReady(): Promise<void>;
239
247
  /**
240
248
  * Register a callback for when the browser blocks the Tide enclave popup.
241
249
  * It replaces the default "pop-ups are blocked" header.
@@ -253,40 +261,40 @@ export default class TideCloak {
253
261
  /**
254
262
  * Role-based encryption via Tide RequestEnclave.
255
263
  * @param {{ data: string | Uint8Array, tags: string[] }[]} toEncrypt
256
- * @param {Uint8Array} decryption_policy If you'd like the data to be protected by a decryption policy
264
+ * @param {Uint8Array | null} [decryption_policy] If you'd like the data to be protected by a decryption policy
257
265
  * @returns {Promise<(string | Uint8Array)[]>}
258
266
  */
259
267
  encrypt(toEncrypt: {
260
268
  data: string | Uint8Array;
261
269
  tags: string[];
262
- }[], decryption_policy?: Uint8Array): Promise<(string | Uint8Array)[]>;
270
+ }[], decryption_policy?: Uint8Array | null): Promise<(string | Uint8Array)[]>;
263
271
  /**
264
- * Begin the process of drafting a encryption request
265
- * @param {{ data: string | Uint8Array, tags: string[] }[]} toEncrypt
266
- * @returns
272
+ * Begin drafting an encryption request.
273
+ * @param {{ data: Uint8Array, tags: string[] }[]} toEncrypt
274
+ * @returns {Promise<Uint8Array>}
267
275
  */
268
276
  draftEncryption(toEncrypt: {
269
- data: string | Uint8Array;
277
+ data: Uint8Array;
270
278
  tags: string[];
271
- }[]): Promise<any>;
279
+ }[]): Promise<Uint8Array>;
272
280
  /**
273
- * Commit a encryption request with a specified policy
281
+ * Commit an encryption request with a specified policy.
274
282
  * @param {Uint8Array} request
275
283
  * @param {Uint8Array} decryption_policy
276
284
  * @returns {Promise<Uint8Array[]>}
277
285
  */
278
286
  commitEncryption(request: Uint8Array, decryption_policy: Uint8Array): Promise<Uint8Array[]>;
279
287
  /**
280
- * Begin the process of drafting a encryption request
281
- * @param {{ encrypted: string | Uint8Array, tags: string[] }[]} toDecrypt
282
- * @returns {Uint8Array}
288
+ * Begin drafting a decryption request.
289
+ * @param {{ encrypted: Uint8Array, tags: string[] }[]} toDecrypt
290
+ * @returns {Promise<Uint8Array>}
283
291
  */
284
292
  draftDecryption(toDecrypt: {
285
- encrypted: string | Uint8Array;
293
+ encrypted: Uint8Array;
286
294
  tags: string[];
287
- }[]): Uint8Array;
295
+ }[]): Promise<Uint8Array>;
288
296
  /**
289
- * Commit a decryption request with a specified policy
297
+ * Commit a decryption request with a specified policy.
290
298
  * @param {Uint8Array} request
291
299
  * @param {Uint8Array} decryption_policy
292
300
  * @returns {Promise<Uint8Array[]>}
@@ -312,22 +320,22 @@ export default class TideCloak {
312
320
  status: "approved" | "denied" | "pending";
313
321
  }[]>;
314
322
  /**
315
- * Execute a Tide Sign Request
323
+ * Execute a Tide Sign Request.
316
324
  * @param {Uint8Array} request
317
325
  * @param {boolean} [waitForAll=false]
318
- * @returns {Promise<Array>} Array of signatures
326
+ * @returns {Promise<any[]>} Array of signatures
319
327
  */
320
328
  executeSignRequest(request: Uint8Array, waitForAll?: boolean): Promise<any[]>;
321
329
  /**
322
330
  * Role-based decryption via Tide RequestEnclave.
323
331
  * @param {{ encrypted: string | Uint8Array, tags: string[] }[]} toDecrypt
324
- * @param {Uint8Array} decryption_policy If the data is protected by a decryption policy
332
+ * @param {Uint8Array | null} [decryption_policy] If the data is protected by a decryption policy
325
333
  * @returns {Promise<(string | Uint8Array)[]>}
326
334
  */
327
335
  decrypt(toDecrypt: {
328
336
  encrypted: string | Uint8Array;
329
337
  tags: string[];
330
- }[], decryption_policy?: Uint8Array): Promise<(string | Uint8Array)[]>;
338
+ }[], decryption_policy?: Uint8Array | null): Promise<(string | Uint8Array)[]>;
331
339
  }
332
340
  export type CallbackState = {
333
341
  state: string;
@@ -21,7 +21,7 @@ declare class AdminAPI {
21
21
  * When DPoP is enabled the issued token is sender-constrained (`typ: DPoP`,
22
22
  * `cnf.jkt`), and RFC 9449 says a bound token presented as a plain `Bearer` is
23
23
  * invalid - the server answers a bare `401` explaining nothing. So every admin
24
- * call goes through `IAMService.secureFetch`, which:
24
+ * call goes through `IAMService.fetch`, which:
25
25
  *
26
26
  * - with a DPoP provider: upgrades `Authorization: Bearer <our token>` to
27
27
  * `Authorization: DPoP <our token>` + a `DPoP:` proof (and handles nonces);