@neuroncloud/ido-client 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/dist/adapters/crypto.d.ts +6 -0
  2. package/dist/adapters/crypto.d.ts.map +1 -0
  3. package/dist/adapters/crypto.js +9 -0
  4. package/dist/adapters/crypto.js.map +1 -0
  5. package/dist/adapters/http.d.ts +24 -0
  6. package/dist/adapters/http.d.ts.map +1 -0
  7. package/dist/adapters/http.js +64 -0
  8. package/dist/adapters/http.js.map +1 -0
  9. package/dist/adapters/index.d.ts +6 -0
  10. package/dist/adapters/index.d.ts.map +1 -0
  11. package/dist/adapters/index.js +6 -0
  12. package/dist/adapters/index.js.map +1 -0
  13. package/dist/adapters/location.d.ts +6 -0
  14. package/dist/adapters/location.d.ts.map +1 -0
  15. package/dist/adapters/location.js +2 -0
  16. package/dist/adapters/location.js.map +1 -0
  17. package/dist/adapters/storage.d.ts +12 -0
  18. package/dist/adapters/storage.d.ts.map +1 -0
  19. package/dist/adapters/storage.js +2 -0
  20. package/dist/adapters/storage.js.map +1 -0
  21. package/dist/adapters/webauthn.d.ts +4 -0
  22. package/dist/adapters/webauthn.d.ts.map +1 -0
  23. package/dist/adapters/webauthn.js +2 -0
  24. package/dist/adapters/webauthn.js.map +1 -0
  25. package/dist/cache/cache.d.ts +18 -0
  26. package/dist/cache/cache.d.ts.map +1 -0
  27. package/dist/cache/cache.js +11 -0
  28. package/dist/cache/cache.js.map +1 -0
  29. package/dist/cache/memory-cache.d.ts +9 -0
  30. package/dist/cache/memory-cache.d.ts.map +1 -0
  31. package/dist/cache/memory-cache.js +14 -0
  32. package/dist/cache/memory-cache.js.map +1 -0
  33. package/dist/client-options.d.ts +35 -0
  34. package/dist/client-options.d.ts.map +1 -0
  35. package/dist/client-options.js +37 -0
  36. package/dist/client-options.js.map +1 -0
  37. package/dist/client.d.ts +49 -0
  38. package/dist/client.d.ts.map +1 -0
  39. package/dist/client.js +175 -0
  40. package/dist/client.js.map +1 -0
  41. package/dist/index.d.ts +17 -0
  42. package/dist/index.d.ts.map +1 -0
  43. package/dist/index.js +11 -0
  44. package/dist/index.js.map +1 -0
  45. package/dist/interaction/interaction-client.d.ts +26 -0
  46. package/dist/interaction/interaction-client.d.ts.map +1 -0
  47. package/dist/interaction/interaction-client.js +284 -0
  48. package/dist/interaction/interaction-client.js.map +1 -0
  49. package/dist/interaction/transaction.d.ts +11 -0
  50. package/dist/interaction/transaction.d.ts.map +1 -0
  51. package/dist/interaction/transaction.js +39 -0
  52. package/dist/interaction/transaction.js.map +1 -0
  53. package/dist/state-manager.d.ts +20 -0
  54. package/dist/state-manager.d.ts.map +1 -0
  55. package/dist/state-manager.js +40 -0
  56. package/dist/state-manager.js.map +1 -0
  57. package/dist/token/token-manager.d.ts +51 -0
  58. package/dist/token/token-manager.d.ts.map +1 -0
  59. package/dist/token/token-manager.js +303 -0
  60. package/dist/token/token-manager.js.map +1 -0
  61. package/package.json +27 -0
@@ -0,0 +1,6 @@
1
+ export interface CryptoAdapter {
2
+ randomBytes(length: number): Uint8Array;
3
+ digest(algorithm: AlgorithmIdentifier, data: BufferSource): Promise<ArrayBuffer>;
4
+ }
5
+ export declare const webCryptoAdapter: CryptoAdapter;
6
+ //# sourceMappingURL=crypto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../src/adapters/crypto.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC;IACxC,MAAM,CAAC,SAAS,EAAE,mBAAmB,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CAClF;AAED,eAAO,MAAM,gBAAgB,EAAE,aAO9B,CAAC"}
@@ -0,0 +1,9 @@
1
+ export const webCryptoAdapter = {
2
+ randomBytes(length) {
3
+ return crypto.getRandomValues(new Uint8Array(length));
4
+ },
5
+ digest(algorithm, data) {
6
+ return crypto.subtle.digest(algorithm, data);
7
+ },
8
+ };
9
+ //# sourceMappingURL=crypto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/adapters/crypto.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,gBAAgB,GAAkB;IAC7C,WAAW,CAAC,MAAM;QAChB,OAAO,MAAM,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IACxD,CAAC;IACD,MAAM,CAAC,SAAS,EAAE,IAAI;QACpB,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC/C,CAAC;CACF,CAAC"}
@@ -0,0 +1,24 @@
1
+ import type { ProtocolHttpClient, ProtocolHttpResponse } from "@neuroncloud/ido-core";
2
+ export interface HttpRequest {
3
+ method: string;
4
+ url: string;
5
+ headers?: Record<string, string>;
6
+ body?: Record<string, string>;
7
+ }
8
+ export type HttpResponse = ProtocolHttpResponse;
9
+ export interface HttpAdapter {
10
+ request(request: HttpRequest): Promise<HttpResponse>;
11
+ }
12
+ export interface ConfidentialAdapter {
13
+ applyClientAuth(body: Record<string, string>): Record<string, string>;
14
+ }
15
+ export declare const noopConfidentialAdapter: ConfidentialAdapter;
16
+ export declare const fetchHttpAdapter: HttpAdapter;
17
+ export declare class HttpClient implements ProtocolHttpClient {
18
+ private readonly http;
19
+ private readonly confidential;
20
+ constructor(http: HttpAdapter, confidential: ConfidentialAdapter);
21
+ postForm(url: string, body: Record<string, string>, clientAuth?: boolean): Promise<HttpResponse>;
22
+ get(url: string, headers?: Record<string, string>): Promise<HttpResponse>;
23
+ }
24
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/adapters/http.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAEtF,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAED,MAAM,MAAM,YAAY,GAAG,oBAAoB,CAAC;AAEhD,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CACtD;AAED,MAAM,WAAW,mBAAmB;IAClC,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvE;AAED,eAAO,MAAM,uBAAuB,EAAE,mBAIrC,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,WAwC9B,CAAC;AAEF,qBAAa,UAAW,YAAW,kBAAkB;IAEjD,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,YAAY;gBADZ,IAAI,EAAE,WAAW,EACjB,YAAY,EAAE,mBAAmB;IAGpD,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,UAAU,UAAQ,GAAG,OAAO,CAAC,YAAY,CAAC;IAQ9F,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC;CAG1E"}
@@ -0,0 +1,64 @@
1
+ export const noopConfidentialAdapter = {
2
+ applyClientAuth(body) {
3
+ return body;
4
+ },
5
+ };
6
+ export const fetchHttpAdapter = {
7
+ async request(request) {
8
+ const headers = {
9
+ Accept: "application/json",
10
+ ...request.headers,
11
+ };
12
+ let body;
13
+ if (request.body) {
14
+ headers["Content-Type"] ??= "application/x-www-form-urlencoded";
15
+ body = new URLSearchParams(request.body).toString();
16
+ }
17
+ const response = await fetch(request.url, {
18
+ method: request.method,
19
+ headers,
20
+ body,
21
+ });
22
+ const text = await response.text();
23
+ let parsed = text || undefined;
24
+ if (text) {
25
+ try {
26
+ parsed = JSON.parse(text);
27
+ }
28
+ catch {
29
+ parsed = text;
30
+ }
31
+ }
32
+ const responseHeaders = {};
33
+ response.headers.forEach((value, key) => {
34
+ responseHeaders[key] = value;
35
+ });
36
+ return {
37
+ status: response.status,
38
+ headers: responseHeaders,
39
+ body: parsed,
40
+ };
41
+ },
42
+ };
43
+ export class HttpClient {
44
+ http;
45
+ confidential;
46
+ constructor(http, confidential) {
47
+ this.http = http;
48
+ this.confidential = confidential;
49
+ }
50
+ postForm(url, body, clientAuth = false) {
51
+ return this.http.request({
52
+ method: "POST",
53
+ url,
54
+ body: clientAuth ? this.confidential.applyClientAuth(compact(body)) : compact(body),
55
+ });
56
+ }
57
+ get(url, headers) {
58
+ return this.http.request({ method: "GET", url, headers });
59
+ }
60
+ }
61
+ function compact(body) {
62
+ return Object.fromEntries(Object.entries(body).filter(([, value]) => value !== ""));
63
+ }
64
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/adapters/http.ts"],"names":[],"mappings":"AAmBA,MAAM,CAAC,MAAM,uBAAuB,GAAwB;IAC1D,eAAe,CAAC,IAAI;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAgB;IAC3C,KAAK,CAAC,OAAO,CAAC,OAAO;QACnB,MAAM,OAAO,GAA2B;YACtC,MAAM,EAAE,kBAAkB;YAC1B,GAAG,OAAO,CAAC,OAAO;SACnB,CAAC;QACF,IAAI,IAAwB,CAAC;QAE7B,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,cAAc,CAAC,KAAK,mCAAmC,CAAC;YAChE,IAAI,GAAG,IAAI,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;QACtD,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;YACxC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,OAAO;YACP,IAAI;SACL,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,MAAM,GAAY,IAAI,IAAI,SAAS,CAAC;QAExC,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC;gBACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAY,CAAC;YACvC,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,GAAG,IAAI,CAAC;YAChB,CAAC;QACH,CAAC;QAED,MAAM,eAAe,GAA2B,EAAE,CAAC;QACnD,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YACtC,eAAe,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAC/B,CAAC,CAAC,CAAC;QAEH,OAAO;YACL,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,OAAO,EAAE,eAAe;YACxB,IAAI,EAAE,MAAM;SACb,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,MAAM,OAAO,UAAU;IAEF;IACA;IAFnB,YACmB,IAAiB,EACjB,YAAiC;QADjC,SAAI,GAAJ,IAAI,CAAa;QACjB,iBAAY,GAAZ,YAAY,CAAqB;IACjD,CAAC;IAEJ,QAAQ,CAAC,GAAW,EAAE,IAA4B,EAAE,UAAU,GAAG,KAAK;QACpE,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;YACvB,MAAM,EAAE,MAAM;YACd,GAAG;YACH,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;SACpF,CAAC,CAAC;IACL,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,OAAgC;QAC/C,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;IAC5D,CAAC;CACF;AAED,SAAS,OAAO,CAAC,IAA4B;IAC3C,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC;AACtF,CAAC"}
@@ -0,0 +1,6 @@
1
+ export * from "./crypto.js";
2
+ export * from "./http.js";
3
+ export * from "./location.js";
4
+ export * from "./storage.js";
5
+ export * from "./webauthn.js";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC"}
@@ -0,0 +1,6 @@
1
+ export * from "./crypto.js";
2
+ export * from "./http.js";
3
+ export * from "./location.js";
4
+ export * from "./storage.js";
5
+ export * from "./webauthn.js";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC"}
@@ -0,0 +1,6 @@
1
+ export interface LocationAdapter {
2
+ getHref(): string;
3
+ assign(url: string): void;
4
+ replace(url: string): void;
5
+ }
6
+ //# sourceMappingURL=location.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"location.d.ts","sourceRoot":"","sources":["../../src/adapters/location.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,OAAO,IAAI,MAAM,CAAC;IAClB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=location.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"location.js","sourceRoot":"","sources":["../../src/adapters/location.ts"],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ export interface StorageChange {
2
+ key: string | null;
3
+ value: string | null;
4
+ }
5
+ export type StorageChangeListener = (event: StorageChange) => void;
6
+ export interface StorageAdapter {
7
+ getItem(key: string): string | null;
8
+ setItem(key: string, value: string): void;
9
+ removeItem(key: string): void;
10
+ subscribe?(listener: StorageChangeListener): () => void;
11
+ }
12
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/adapters/storage.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,MAAM,qBAAqB,GAAG,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;AAEnE,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACpC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,SAAS,CAAC,CAAC,QAAQ,EAAE,qBAAqB,GAAG,MAAM,IAAI,CAAC;CACzD"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/adapters/storage.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ export interface WebAuthnAdapter {
2
+ get(publicKey: unknown): Promise<string>;
3
+ }
4
+ //# sourceMappingURL=webauthn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webauthn.d.ts","sourceRoot":"","sources":["../../src/adapters/webauthn.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,GAAG,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC1C"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=webauthn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webauthn.js","sourceRoot":"","sources":["../../src/adapters/webauthn.ts"],"names":[],"mappings":""}
@@ -0,0 +1,18 @@
1
+ import type { StorageAdapter } from "../adapters/storage.js";
2
+ export interface Cache extends StorageAdapter {
3
+ }
4
+ export interface CacheSlots {
5
+ token: Cache;
6
+ transaction: Cache;
7
+ cache: Cache;
8
+ }
9
+ export type CacheSlot = keyof CacheSlots;
10
+ export declare class CacheManager {
11
+ private readonly slots;
12
+ constructor(slots: CacheSlots);
13
+ get(slot: CacheSlot): Cache;
14
+ }
15
+ export type StorageProvider = Cache;
16
+ export type StorageSlots = CacheSlots;
17
+ export { CacheManager as StorageManager };
18
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/cache/cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,MAAM,WAAW,KAAM,SAAQ,cAAc;CAAG;AAEhD,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,KAAK,CAAC;IACb,WAAW,EAAE,KAAK,CAAC;IACnB,KAAK,EAAE,KAAK,CAAC;CACd;AAED,MAAM,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC;AAEzC,qBAAa,YAAY;IACX,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,UAAU;IAE9C,GAAG,CAAC,IAAI,EAAE,SAAS,GAAG,KAAK;CAG5B;AAGD,MAAM,MAAM,eAAe,GAAG,KAAK,CAAC;AACpC,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC;AACtC,OAAO,EAAE,YAAY,IAAI,cAAc,EAAE,CAAC"}
@@ -0,0 +1,11 @@
1
+ export class CacheManager {
2
+ slots;
3
+ constructor(slots) {
4
+ this.slots = slots;
5
+ }
6
+ get(slot) {
7
+ return this.slots[slot];
8
+ }
9
+ }
10
+ export { CacheManager as StorageManager };
11
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/cache/cache.ts"],"names":[],"mappings":"AAYA,MAAM,OAAO,YAAY;IACM;IAA7B,YAA6B,KAAiB;QAAjB,UAAK,GAAL,KAAK,CAAY;IAAG,CAAC;IAElD,GAAG,CAAC,IAAe;QACjB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;CACF;AAKD,OAAO,EAAE,YAAY,IAAI,cAAc,EAAE,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { Cache } from "./cache.js";
2
+ export declare class MemoryCache implements Cache {
3
+ private readonly values;
4
+ getItem(key: string): string | null;
5
+ setItem(key: string, value: string): void;
6
+ removeItem(key: string): void;
7
+ }
8
+ export { MemoryCache as MemoryStorage };
9
+ //# sourceMappingURL=memory-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-cache.d.ts","sourceRoot":"","sources":["../../src/cache/memory-cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,qBAAa,WAAY,YAAW,KAAK;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6B;IAEpD,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAInC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAIzC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;CAG9B;AAED,OAAO,EAAE,WAAW,IAAI,aAAa,EAAE,CAAC"}
@@ -0,0 +1,14 @@
1
+ export class MemoryCache {
2
+ values = new Map();
3
+ getItem(key) {
4
+ return this.values.get(key) ?? null;
5
+ }
6
+ setItem(key, value) {
7
+ this.values.set(key, value);
8
+ }
9
+ removeItem(key) {
10
+ this.values.delete(key);
11
+ }
12
+ }
13
+ export { MemoryCache as MemoryStorage };
14
+ //# sourceMappingURL=memory-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-cache.js","sourceRoot":"","sources":["../../src/cache/memory-cache.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,WAAW;IACL,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEpD,OAAO,CAAC,GAAW;QACjB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;IACtC,CAAC;IAED,OAAO,CAAC,GAAW,EAAE,KAAa;QAChC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,UAAU,CAAC,GAAW;QACpB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;CACF;AAED,OAAO,EAAE,WAAW,IAAI,aAAa,EAAE,CAAC"}
@@ -0,0 +1,35 @@
1
+ import { type ProtocolEndpoints } from "@neuroncloud/ido-core";
2
+ import type { CacheSlots } from "./cache/cache.js";
3
+ export interface AuthEndpoints extends ProtocolEndpoints {
4
+ }
5
+ export type StorageSlots = CacheSlots;
6
+ export interface ClientOptions {
7
+ issuer: string;
8
+ clientId: string;
9
+ redirectUri?: string;
10
+ postLogoutRedirectUri?: string;
11
+ scopes?: string[];
12
+ prompt?: string;
13
+ idp?: string;
14
+ extraParams?: Record<string, string>;
15
+ endpoints?: Partial<AuthEndpoints>;
16
+ expireEarlySeconds?: number;
17
+ autoRenew?: boolean;
18
+ autoRemove?: boolean;
19
+ }
20
+ export interface ResolvedClientOptions {
21
+ issuer: string;
22
+ clientId: string;
23
+ redirectUri?: string;
24
+ postLogoutRedirectUri?: string;
25
+ scopes: string[];
26
+ prompt?: string;
27
+ idp?: string;
28
+ extraParams?: Record<string, string>;
29
+ endpoints: AuthEndpoints;
30
+ expireEarlySeconds: number;
31
+ autoRenew: boolean;
32
+ autoRemove: boolean;
33
+ }
34
+ export declare function resolveClientOptions(options: ClientOptions): ResolvedClientOptions;
35
+ //# sourceMappingURL=client-options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-options.d.ts","sourceRoot":"","sources":["../src/client-options.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0D,KAAK,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AACvH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,MAAM,WAAW,aAAc,SAAQ,iBAAiB;CAAG;AAC3D,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC;AAEtC,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,SAAS,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACnC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,SAAS,EAAE,aAAa,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,aAAa,GAAG,qBAAqB,CAqClF"}
@@ -0,0 +1,37 @@
1
+ import { DefaultExpireEarlySeconds, DefaultScopes, RuntimeError } from "@neuroncloud/ido-core";
2
+ export function resolveClientOptions(options) {
3
+ if (!options.issuer?.trim()) {
4
+ throw new RuntimeError("issuer is required.", { code: "issuer_required" });
5
+ }
6
+ if (!options.clientId?.trim()) {
7
+ throw new RuntimeError("clientId is required.", { code: "client_id_required" });
8
+ }
9
+ const issuer = options.issuer.replace(/\/+$/, "");
10
+ return {
11
+ issuer,
12
+ clientId: options.clientId,
13
+ redirectUri: options.redirectUri,
14
+ postLogoutRedirectUri: options.postLogoutRedirectUri,
15
+ scopes: options.scopes?.length ? [...options.scopes] : [...DefaultScopes],
16
+ prompt: options.prompt,
17
+ idp: options.idp,
18
+ extraParams: options.extraParams ? { ...options.extraParams } : undefined,
19
+ expireEarlySeconds: options.expireEarlySeconds ?? DefaultExpireEarlySeconds,
20
+ autoRenew: options.autoRenew ?? true,
21
+ autoRemove: options.autoRemove ?? true,
22
+ endpoints: {
23
+ authorize: options.endpoints?.authorize ?? `${issuer}/connect/authorize`,
24
+ token: options.endpoints?.token ?? `${issuer}/connect/token`,
25
+ userinfo: options.endpoints?.userinfo ?? `${issuer}/connect/userinfo`,
26
+ revocation: options.endpoints?.revocation ?? `${issuer}/connect/revocation`,
27
+ introspection: options.endpoints?.introspection ?? `${issuer}/connect/introspection`,
28
+ jwks: options.endpoints?.jwks ?? `${issuer}/.well-known/jwks`,
29
+ logout: options.endpoints?.logout ?? `${issuer}/connect/logout`,
30
+ initiate: options.endpoints?.initiate ?? `${issuer}/oauth2/v2.0/initiate`,
31
+ challenge: options.endpoints?.challenge ?? `${issuer}/oauth2/v2.0/challenge`,
32
+ passkeyInitiate: options.endpoints?.passkeyInitiate ?? `${issuer}/oauth2/v2.0/passkey/initiate`,
33
+ passkeyComplete: options.endpoints?.passkeyComplete ?? `${issuer}/oauth2/v2.0/passkey/complete`,
34
+ },
35
+ };
36
+ }
37
+ //# sourceMappingURL=client-options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-options.js","sourceRoot":"","sources":["../src/client-options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,aAAa,EAAE,YAAY,EAA0B,MAAM,uBAAuB,CAAC;AAoCvH,MAAM,UAAU,oBAAoB,CAAC,OAAsB;IACzD,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC;QAC5B,MAAM,IAAI,YAAY,CAAC,qBAAqB,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC;QAC9B,MAAM,IAAI,YAAY,CAAC,uBAAuB,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC,CAAC;IAClF,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAElD,OAAO;QACL,MAAM;QACN,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,qBAAqB,EAAE,OAAO,CAAC,qBAAqB;QACpD,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC;QACzE,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,WAAW,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS;QACzE,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,IAAI,yBAAyB;QAC3E,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI;QACpC,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,IAAI;QACtC,SAAS,EAAE;YACT,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,SAAS,IAAI,GAAG,MAAM,oBAAoB;YACxE,KAAK,EAAE,OAAO,CAAC,SAAS,EAAE,KAAK,IAAI,GAAG,MAAM,gBAAgB;YAC5D,QAAQ,EAAE,OAAO,CAAC,SAAS,EAAE,QAAQ,IAAI,GAAG,MAAM,mBAAmB;YACrE,UAAU,EAAE,OAAO,CAAC,SAAS,EAAE,UAAU,IAAI,GAAG,MAAM,qBAAqB;YAC3E,aAAa,EAAE,OAAO,CAAC,SAAS,EAAE,aAAa,IAAI,GAAG,MAAM,wBAAwB;YACpF,IAAI,EAAE,OAAO,CAAC,SAAS,EAAE,IAAI,IAAI,GAAG,MAAM,mBAAmB;YAC7D,MAAM,EAAE,OAAO,CAAC,SAAS,EAAE,MAAM,IAAI,GAAG,MAAM,iBAAiB;YAC/D,QAAQ,EAAE,OAAO,CAAC,SAAS,EAAE,QAAQ,IAAI,GAAG,MAAM,uBAAuB;YACzE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,SAAS,IAAI,GAAG,MAAM,wBAAwB;YAC5E,eAAe,EAAE,OAAO,CAAC,SAAS,EAAE,eAAe,IAAI,GAAG,MAAM,+BAA+B;YAC/F,eAAe,EAAE,OAAO,CAAC,SAAS,EAAE,eAAe,IAAI,GAAG,MAAM,+BAA+B;SAChG;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,49 @@
1
+ import { type AuthorizationRequestOptions, type AuthorizationRequestState, type Tokens, type UserClaims } from "@neuroncloud/ido-core";
2
+ import type { ConfidentialAdapter, HttpAdapter } from "./adapters/http.js";
3
+ import type { LocationAdapter } from "./adapters/location.js";
4
+ import type { WebAuthnAdapter } from "./adapters/webauthn.js";
5
+ import { type CacheSlots } from "./cache/cache.js";
6
+ import { type ClientOptions } from "./client-options.js";
7
+ import { type InteractionClient } from "./interaction/interaction-client.js";
8
+ import { ClientStateManager } from "./state-manager.js";
9
+ import { TokenManager, type TokenApi } from "./token/token-manager.js";
10
+ export interface ClientAdapters {
11
+ http?: HttpAdapter;
12
+ storage: CacheSlots;
13
+ confidential?: ConfidentialAdapter;
14
+ webauthn?: WebAuthnAdapter;
15
+ location?: LocationAdapter;
16
+ }
17
+ export interface SignOutOptions {
18
+ revoke?: boolean;
19
+ postLogoutRedirectUri?: string;
20
+ }
21
+ export interface SignInWithRedirectOptions extends AuthorizationRequestOptions {
22
+ }
23
+ export interface RedirectMeta extends AuthorizationRequestState {
24
+ }
25
+ export interface IdoClient {
26
+ interaction: InteractionClient;
27
+ token: TokenApi;
28
+ tokenManager: TokenManager;
29
+ clientStateManager: ClientStateManager;
30
+ start(): Promise<void>;
31
+ stop(): Promise<void>;
32
+ signOut(options?: SignOutOptions): Promise<void>;
33
+ signInWithRedirect(options?: SignInWithRedirectOptions): Promise<void>;
34
+ isLoginRedirect(url?: string): boolean;
35
+ handleRedirect(input?: string | {
36
+ url?: string;
37
+ originalUri?: string;
38
+ }): Promise<Tokens>;
39
+ setOriginalUri(uri: string): void;
40
+ getOriginalUri(): string | undefined;
41
+ removeOriginalUri(): void;
42
+ isAuthenticated(): Promise<boolean>;
43
+ getAccessToken(): string | undefined;
44
+ getIdToken(): string | undefined;
45
+ getUser(): Promise<UserClaims>;
46
+ }
47
+ export declare function createMemoryStorageSlots(): CacheSlots;
48
+ export declare function createClient(options: ClientOptions, adapters: ClientAdapters): IdoClient;
49
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAaL,KAAK,2BAA2B,EAChC,KAAK,yBAAyB,EAC9B,KAAK,MAAM,EACX,KAAK,UAAU,EAChB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAE3E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEjE,OAAO,EAAwB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAA2B,KAAK,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAEtG,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAkB,YAAY,EAAE,KAAK,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEvF,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,OAAO,EAAE,UAAU,CAAC;IACpB,YAAY,CAAC,EAAE,mBAAmB,CAAC;IACnC,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,QAAQ,CAAC,EAAE,eAAe,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,yBAA0B,SAAQ,2BAA2B;CAAG;AACjF,MAAM,WAAW,YAAa,SAAQ,yBAAyB;CAAG;AAElE,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE,iBAAiB,CAAC;IAC/B,KAAK,EAAE,QAAQ,CAAC;IAChB,YAAY,EAAE,YAAY,CAAC;IAC3B,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,OAAO,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,kBAAkB,CAAC,OAAO,CAAC,EAAE,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE,eAAe,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACvC,cAAc,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACzF,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,cAAc,IAAI,MAAM,GAAG,SAAS,CAAC;IACrC,iBAAiB,IAAI,IAAI,CAAC;IAC1B,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IACpC,cAAc,IAAI,MAAM,GAAG,SAAS,CAAC;IACrC,UAAU,IAAI,MAAM,GAAG,SAAS,CAAC;IACjC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC;CAChC;AAED,wBAAgB,wBAAwB,IAAI,UAAU,CAMrD;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,cAAc,GAAG,SAAS,CA2KxF"}
package/dist/client.js ADDED
@@ -0,0 +1,175 @@
1
+ import { cleanAuthorizationResponseUrl, createAuthorizationRequest, exchangeToken, GrantTypes, isAuthorizationResponse, Parameters, readAuthorizationResponse, readUserClaims, revokeToken, RuntimeError, StorageKeys, verifyIdToken, } from "@neuroncloud/ido-core";
2
+ import { fetchHttpAdapter, HttpClient, noopConfidentialAdapter } from "./adapters/http.js";
3
+ import { CacheManager } from "./cache/cache.js";
4
+ import { MemoryCache } from "./cache/memory-cache.js";
5
+ import { resolveClientOptions } from "./client-options.js";
6
+ import { createInteractionClient } from "./interaction/interaction-client.js";
7
+ import { InteractionTransactionManager } from "./interaction/transaction.js";
8
+ import { ClientStateManager } from "./state-manager.js";
9
+ import { createTokenApi, TokenManager } from "./token/token-manager.js";
10
+ export function createMemoryStorageSlots() {
11
+ return {
12
+ token: new MemoryCache(),
13
+ transaction: new MemoryCache(),
14
+ cache: new MemoryCache(),
15
+ };
16
+ }
17
+ export function createClient(options, adapters) {
18
+ const resolved = resolveClientOptions(options);
19
+ const cache = new CacheManager(adapters.storage);
20
+ const http = new HttpClient(adapters.http ?? fetchHttpAdapter, adapters.confidential ?? noopConfidentialAdapter);
21
+ const tokenManager = new TokenManager(cache, resolved);
22
+ const clientStateManager = new ClientStateManager(tokenManager);
23
+ const transactions = new InteractionTransactionManager(cache);
24
+ const interaction = createInteractionClient({
25
+ options: resolved,
26
+ http,
27
+ cache,
28
+ transactions,
29
+ tokenManager,
30
+ clientState: clientStateManager,
31
+ webauthn: adapters.webauthn,
32
+ });
33
+ const token = createTokenApi(http, resolved, tokenManager, clientStateManager, cache);
34
+ tokenManager.bindRenew(() => token.refresh());
35
+ tokenManager.on("changed", () => clientStateManager.updateClientState());
36
+ return {
37
+ interaction,
38
+ token,
39
+ tokenManager,
40
+ clientStateManager,
41
+ async start() {
42
+ tokenManager.start();
43
+ clientStateManager.updateClientState();
44
+ },
45
+ async stop() {
46
+ tokenManager.stop();
47
+ clientStateManager.unsubscribe();
48
+ },
49
+ async signOut(signOutOptions) {
50
+ const stored = tokenManager.getTokens();
51
+ const refresh = stored.refreshToken?.token;
52
+ const access = stored.accessToken?.token;
53
+ const idToken = stored.idToken?.token;
54
+ const postLogoutRedirectUri = signOutOptions?.postLogoutRedirectUri ?? resolved.postLogoutRedirectUri;
55
+ if (signOutOptions?.revoke !== false) {
56
+ if (refresh) {
57
+ await revokeToken(http, resolved, refresh, "refresh_token").catch(() => undefined);
58
+ }
59
+ if (access) {
60
+ await revokeToken(http, resolved, access, "access_token").catch(() => undefined);
61
+ }
62
+ }
63
+ transactions.clear();
64
+ tokenManager.clear();
65
+ clientStateManager.updateClientState();
66
+ if (adapters.location && postLogoutRedirectUri) {
67
+ const logout = new URL(resolved.endpoints.logout);
68
+ logout.searchParams.set(Parameters.PostLogoutRedirectUri, postLogoutRedirectUri);
69
+ if (idToken) {
70
+ logout.searchParams.set(Parameters.IdTokenHint, idToken);
71
+ }
72
+ adapters.location.assign(logout.toString());
73
+ }
74
+ },
75
+ async signInWithRedirect(request = {}) {
76
+ if (!adapters.location) {
77
+ throw new RuntimeError("signInWithRedirect requires a location adapter.", { code: "redirect_unavailable" });
78
+ }
79
+ const originalUri = request.originalUri ?? readOriginalUri(cache) ?? adapters.location.getHref();
80
+ const authorization = await createAuthorizationRequest(resolved, { ...request, originalUri });
81
+ cache.get("transaction").setItem(StorageKeys.Redirect, JSON.stringify(authorization.state));
82
+ if (request.originalUri) {
83
+ writeOriginalUri(cache, request.originalUri);
84
+ }
85
+ adapters.location.assign(authorization.url);
86
+ },
87
+ isLoginRedirect(url) {
88
+ return isAuthorizationResponse(url ?? adapters.location?.getHref() ?? "");
89
+ },
90
+ async handleRedirect(input) {
91
+ const request = typeof input === "string" ? (adapters.location ? { originalUri: input } : { url: input }) : (input ?? {});
92
+ const url = request.url ?? adapters.location?.getHref();
93
+ if (!url) {
94
+ throw new RuntimeError("handleRedirect requires the callback URL.", { code: "redirect_url_required" });
95
+ }
96
+ const response = readAuthorizationResponse(url);
97
+ const rawState = cache.get("transaction").getItem(StorageKeys.Redirect);
98
+ const state = rawState ? JSON.parse(rawState) : undefined;
99
+ if (!state || state.state !== response.state) {
100
+ throw new RuntimeError("The login redirect state is invalid.", { code: "invalid_state" });
101
+ }
102
+ const result = await exchangeToken(http, resolved, {
103
+ grantType: GrantTypes.AuthorizationCode,
104
+ scopes: state.scopes,
105
+ extra: {
106
+ [Parameters.Code]: response.code,
107
+ [Parameters.RedirectUri]: state.redirectUri,
108
+ [Parameters.CodeVerifier]: state.codeVerifier,
109
+ },
110
+ });
111
+ cache.get("transaction").removeItem(StorageKeys.Redirect);
112
+ if (!result.tokens) {
113
+ throw result.error ?? new RuntimeError("The authorization code could not be exchanged.");
114
+ }
115
+ const idToken = result.tokens.idToken?.token;
116
+ if (idToken) {
117
+ await verifyIdToken(idToken, {
118
+ issuer: resolved.issuer,
119
+ clientId: resolved.clientId,
120
+ nonce: state.nonce,
121
+ http,
122
+ jwksUri: resolved.endpoints.jwks,
123
+ cache: cache.get("cache"),
124
+ });
125
+ }
126
+ else if (state.scopes.split(/\s+/).includes("openid")) {
127
+ throw new RuntimeError("The token response did not include an ID token.", { code: "missing_id_token" });
128
+ }
129
+ tokenManager.setTokens(result.tokens);
130
+ clientStateManager.updateClientState();
131
+ const restore = request.originalUri ?? state.originalUri ?? readOriginalUri(cache);
132
+ removeOriginalUri(cache);
133
+ if (adapters.location) {
134
+ adapters.location.replace(restore ?? cleanAuthorizationResponseUrl(url));
135
+ }
136
+ return result.tokens;
137
+ },
138
+ async isAuthenticated() {
139
+ await tokenManager.get("accessToken");
140
+ return clientStateManager.updateClientState().isAuthenticated;
141
+ },
142
+ setOriginalUri(uri) {
143
+ writeOriginalUri(cache, uri);
144
+ },
145
+ getOriginalUri() {
146
+ return readOriginalUri(cache);
147
+ },
148
+ removeOriginalUri() {
149
+ removeOriginalUri(cache);
150
+ },
151
+ getAccessToken() {
152
+ return tokenManager.getSync("accessToken")?.token;
153
+ },
154
+ getIdToken() {
155
+ return tokenManager.getSync("idToken")?.token;
156
+ },
157
+ async getUser() {
158
+ const idToken = tokenManager.getSync("idToken")?.token;
159
+ if (!idToken) {
160
+ throw new RuntimeError("An ID token is not available.", { code: "no_id_token" });
161
+ }
162
+ return readUserClaims(idToken);
163
+ },
164
+ };
165
+ }
166
+ function writeOriginalUri(cache, uri) {
167
+ cache.get("transaction").setItem(StorageKeys.OriginalUri, uri);
168
+ }
169
+ function readOriginalUri(cache) {
170
+ return cache.get("transaction").getItem(StorageKeys.OriginalUri) ?? undefined;
171
+ }
172
+ function removeOriginalUri(cache) {
173
+ cache.get("transaction").removeItem(StorageKeys.OriginalUri);
174
+ }
175
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}