@calimero-network/mero-js 1.0.2 → 1.2.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 (57) hide show
  1. package/dist/admin-api/admin-client.d.ts +29 -27
  2. package/dist/admin-api/admin-client.d.ts.map +1 -1
  3. package/dist/admin-api/admin-client.js +70 -58
  4. package/dist/admin-api/admin-client.js.map +1 -1
  5. package/dist/admin-api/admin-types.d.ts +57 -159
  6. package/dist/admin-api/admin-types.d.ts.map +1 -1
  7. package/dist/admin-api/admin-types.js +1 -1
  8. package/dist/admin-api/admin-types.js.map +1 -1
  9. package/dist/auth/index.d.ts +26 -0
  10. package/dist/auth/index.d.ts.map +1 -0
  11. package/dist/auth/index.js +51 -0
  12. package/dist/auth/index.js.map +1 -0
  13. package/dist/events/index.d.ts +5 -0
  14. package/dist/events/index.d.ts.map +1 -0
  15. package/dist/events/index.js +3 -0
  16. package/dist/events/index.js.map +1 -0
  17. package/dist/events/sse.d.ts +41 -0
  18. package/dist/events/sse.d.ts.map +1 -0
  19. package/dist/events/sse.js +237 -0
  20. package/dist/events/sse.js.map +1 -0
  21. package/dist/events/ws.d.ts +42 -0
  22. package/dist/events/ws.d.ts.map +1 -0
  23. package/dist/events/ws.js +178 -0
  24. package/dist/events/ws.js.map +1 -0
  25. package/dist/http-client/http-factory.d.ts +18 -0
  26. package/dist/http-client/http-factory.d.ts.map +1 -1
  27. package/dist/http-client/http-factory.js +2 -0
  28. package/dist/http-client/http-factory.js.map +1 -1
  29. package/dist/http-client/http-types.d.ts +6 -0
  30. package/dist/http-client/http-types.d.ts.map +1 -1
  31. package/dist/http-client/web-client.d.ts +2 -0
  32. package/dist/http-client/web-client.d.ts.map +1 -1
  33. package/dist/http-client/web-client.js +129 -58
  34. package/dist/http-client/web-client.js.map +1 -1
  35. package/dist/index.browser.mjs +2 -1
  36. package/dist/index.browser.mjs.map +4 -4
  37. package/dist/index.cjs +784 -148
  38. package/dist/index.cjs.map +4 -4
  39. package/dist/index.d.ts +8 -0
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js +8 -0
  42. package/dist/index.js.map +1 -1
  43. package/dist/index.mjs +784 -148
  44. package/dist/index.mjs.map +4 -4
  45. package/dist/mero-js.d.ts +47 -1
  46. package/dist/mero-js.d.ts.map +1 -1
  47. package/dist/mero-js.js +132 -16
  48. package/dist/mero-js.js.map +1 -1
  49. package/dist/rpc/index.d.ts +21 -0
  50. package/dist/rpc/index.d.ts.map +1 -0
  51. package/dist/rpc/index.js +39 -0
  52. package/dist/rpc/index.js.map +1 -0
  53. package/dist/token-store/index.d.ts +20 -0
  54. package/dist/token-store/index.d.ts.map +1 -0
  55. package/dist/token-store/index.js +62 -0
  56. package/dist/token-store/index.js.map +1 -0
  57. package/package.json +1 -1
@@ -12,6 +12,7 @@ export function createBrowserHttpClient(options) {
12
12
  baseUrl: options.baseUrl,
13
13
  getAuthToken: options.getAuthToken,
14
14
  onTokenRefresh: options.onTokenRefresh,
15
+ refreshToken: options.refreshToken,
15
16
  defaultHeaders: options.defaultHeaders,
16
17
  timeoutMs: options.timeoutMs,
17
18
  credentials: options.credentials,
@@ -41,6 +42,7 @@ export function createNodeHttpClient(options) {
41
42
  baseUrl: options.baseUrl,
42
43
  getAuthToken: options.getAuthToken,
43
44
  onTokenRefresh: options.onTokenRefresh,
45
+ refreshToken: options.refreshToken,
44
46
  defaultHeaders: options.defaultHeaders,
45
47
  timeoutMs: options.timeoutMs,
46
48
  credentials: options.credentials,
@@ -1 +1 @@
1
- {"version":3,"file":"http-factory.js","sourceRoot":"","sources":["../../src/http-client/http-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG7C,gEAAgE;AAChE,MAAM,UAAU,gBAAgB,CAAC,SAAoB;IACnD,OAAO,IAAI,aAAa,CAAC,SAAS,CAAC,CAAC;AACtC,CAAC;AAED,4CAA4C;AAC5C,MAAM,UAAU,uBAAuB,CAAC,OAQvC;IACC,MAAM,SAAS,GAAc;QAC3B,qEAAqE;QACrE,iEAAiE;QACjE,KAAK,EAAE,CAAC,GAAsB,EAAE,IAAkB,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC;QAClF,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;KAC/C,CAAC;IAEF,OAAO,gBAAgB,CAAC,SAAS,CAAC,CAAC;AACrC,CAAC;AAED,4CAA4C;AAC5C,MAAM,UAAU,oBAAoB,CAAC,OASpC;IACC,2DAA2D;IAC3D,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC;IAEpD,IAAI,CAAC,SAAS,EAAE;QACd,MAAM,IAAI,KAAK,CACb,2EAA2E;YACzE,yEAAyE,CAC5E,CAAC;KACH;IAED,wEAAwE;IACxE,uFAAuF;IACvF,sFAAsF;IACtF,MAAM,cAAc,GAAG,SAAS,KAAK,UAAU,CAAC,KAAK,CAAC;IAEtD,MAAM,SAAS,GAAc;QAC3B,qEAAqE;QACrE,oEAAoE;QACpE,mEAAmE;QACnE,KAAK,EAAE,cAAc;YACnB,CAAC,CAAC,CAAC,GAAsB,EAAE,IAAkB,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC;YAC7E,CAAC,CAAC,CAAC,GAAsB,EAAE,IAAkB,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC;QACxE,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;KAC/C,CAAC;IAEF,OAAO,gBAAgB,CAAC,SAAS,CAAC,CAAC;AACrC,CAAC;AAED,oDAAoD;AACpD,MAAM,UAAU,yBAAyB,CAAC,OASzC;IACC,wDAAwD;IACxD,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;QACjC,sBAAsB;QACtB,OAAO,uBAAuB,CAAC,OAAO,CAAC,CAAC;KACzC;SAAM;QACL,sBAAsB;QACtB,OAAO,oBAAoB,CAAC,OAAO,CAAC,CAAC;KACtC;AACH,CAAC"}
1
+ {"version":3,"file":"http-factory.js","sourceRoot":"","sources":["../../src/http-client/http-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG7C,gEAAgE;AAChE,MAAM,UAAU,gBAAgB,CAAC,SAAoB;IACnD,OAAO,IAAI,aAAa,CAAC,SAAS,CAAC,CAAC;AACtC,CAAC;AAED,4CAA4C;AAC5C,MAAM,UAAU,uBAAuB,CAAC,OAcvC;IACC,MAAM,SAAS,GAAc;QAC3B,qEAAqE;QACrE,iEAAiE;QACjE,KAAK,EAAE,CAAC,GAAsB,EAAE,IAAkB,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC;QAClF,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;KAC/C,CAAC;IAEF,OAAO,gBAAgB,CAAC,SAAS,CAAC,CAAC;AACrC,CAAC;AAED,4CAA4C;AAC5C,MAAM,UAAU,oBAAoB,CAAC,OAepC;IACC,2DAA2D;IAC3D,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC;IAEpD,IAAI,CAAC,SAAS,EAAE;QACd,MAAM,IAAI,KAAK,CACb,2EAA2E;YACzE,yEAAyE,CAC5E,CAAC;KACH;IAED,wEAAwE;IACxE,uFAAuF;IACvF,sFAAsF;IACtF,MAAM,cAAc,GAAG,SAAS,KAAK,UAAU,CAAC,KAAK,CAAC;IAEtD,MAAM,SAAS,GAAc;QAC3B,qEAAqE;QACrE,oEAAoE;QACpE,mEAAmE;QACnE,KAAK,EAAE,cAAc;YACnB,CAAC,CAAC,CAAC,GAAsB,EAAE,IAAkB,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC;YAC7E,CAAC,CAAC,CAAC,GAAsB,EAAE,IAAkB,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC;QACxE,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;KAC/C,CAAC;IAEF,OAAO,gBAAgB,CAAC,SAAS,CAAC,CAAC;AACrC,CAAC;AAED,oDAAoD;AACpD,MAAM,UAAU,yBAAyB,CAAC,OAezC;IACC,wDAAwD;IACxD,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;QACjC,sBAAsB;QACtB,OAAO,uBAAuB,CAAC,OAAO,CAAC,CAAC;KACzC;SAAM;QACL,sBAAsB;QACtB,OAAO,oBAAoB,CAAC,OAAO,CAAC,CAAC;KACtC;AACH,CAAC"}
@@ -5,6 +5,12 @@ export interface Transport {
5
5
  defaultHeaders?: Record<string, string>;
6
6
  getAuthToken?: () => Promise<string | undefined>;
7
7
  onTokenRefresh?: (newToken: string) => Promise<void>;
8
+ /**
9
+ * Callback to refresh the access token when a 401 error with 'token_expired' is detected.
10
+ * Should return the new access token, or throw an error if refresh fails.
11
+ * If provided, the client will automatically retry the request after a successful refresh.
12
+ */
13
+ refreshToken?: () => Promise<string>;
8
14
  timeoutMs?: number;
9
15
  credentials?: RequestCredentials;
10
16
  defaultAbortSignal?: AbortSignal;
@@ -1 +1 @@
1
- {"version":3,"file":"http-types.d.ts","sourceRoot":"","sources":["../../src/http-client/http-types.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,SAAS,GAAG,CACtB,KAAK,EAAE,WAAW,EAClB,IAAI,CAAC,EAAE,WAAW,KACf,OAAO,CAAC,QAAQ,CAAC,CAAC;AAEvB,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACjD,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,kBAAkB,CAAC,EAAE,WAAW,CAAC;CAClC;AAGD,MAAM,MAAM,cAAc,GACtB,MAAM,GACN,MAAM,GACN,MAAM,GACN,aAAa,GACb,UAAU,CAAC;AAEf,MAAM,WAAW,cAAe,SAAQ,WAAW;IACjD,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACxD,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACzE,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACxE,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3D,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1E,IAAI,CACF,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,cAAc,GACpB,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChE,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAC7D;AAGD,MAAM,WAAW,MAAM;IACrB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,YAAY,CAAC,EAAE,aAAa,GAAG,MAAM,GAAG,MAAM,CAAC;CAChD"}
1
+ {"version":3,"file":"http-types.d.ts","sourceRoot":"","sources":["../../src/http-client/http-types.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,SAAS,GAAG,CACtB,KAAK,EAAE,WAAW,EAClB,IAAI,CAAC,EAAE,WAAW,KACf,OAAO,CAAC,QAAQ,CAAC,CAAC;AAEvB,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACjD,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,kBAAkB,CAAC,EAAE,WAAW,CAAC;CAClC;AAGD,MAAM,MAAM,cAAc,GACtB,MAAM,GACN,MAAM,GACN,MAAM,GACN,aAAa,GACb,UAAU,CAAC;AAEf,MAAM,WAAW,cAAe,SAAQ,WAAW;IACjD,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACxD,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACzE,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACxE,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3D,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1E,IAAI,CACF,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,cAAc,GACpB,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChE,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAC7D;AAGD,MAAM,WAAW,MAAM;IACrB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,YAAY,CAAC,EAAE,aAAa,GAAG,MAAM,GAAG,MAAM,CAAC;CAChD"}
@@ -17,6 +17,8 @@ export declare class HTTPError extends Error {
17
17
  }
18
18
  export declare class WebHttpClient implements HttpClient {
19
19
  private transport;
20
+ private refreshTokenPromise;
21
+ private onTokenRefreshPromise;
20
22
  constructor(transport: Transport);
21
23
  get<T>(path: string, init?: RequestOptions): Promise<T>;
22
24
  post<T>(path: string, body?: unknown, init?: RequestOptions): Promise<T>;
@@ -1 +1 @@
1
- {"version":3,"file":"web-client.d.ts","sourceRoot":"","sources":["../../src/http-client/web-client.ts"],"names":[],"mappings":"AACA,OAAO,EACL,UAAU,EACV,SAAS,EACT,cAAc,EAEf,MAAM,cAAc,CAAC;AAItB,qBAAa,SAAU,SAAQ,KAAK;IAIzB,MAAM,EAAE,MAAM;IACd,UAAU,EAAE,MAAM;IAClB,GAAG,EAAE,MAAM;IACX,OAAO,EAAE,OAAO;IAChB,QAAQ,CAAC,EAAE,MAAM;IAP1B,IAAI,cAAwB;gBAGnB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,OAAO,EAChB,QAAQ,CAAC,EAAE,MAAM;IAK1B,MAAM,IAAI;QACR,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,GAAG,EAAE,MAAM,CAAC;QACZ,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB;CASF;AAYD,qBAAa,aAAc,YAAW,UAAU;IAClC,OAAO,CAAC,SAAS;gBAAT,SAAS,EAAE,SAAS;IAElC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC;IAIvD,IAAI,CAAC,CAAC,EACV,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,OAAO,EACd,IAAI,CAAC,EAAE,cAAc,GACpB,OAAO,CAAC,CAAC,CAAC;IAYP,GAAG,CAAC,CAAC,EACT,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,OAAO,EACd,IAAI,CAAC,EAAE,cAAc,GACpB,OAAO,CAAC,CAAC,CAAC;IAYP,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC;IAI1D,KAAK,CAAC,CAAC,EACX,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,OAAO,EACd,IAAI,CAAC,EAAE,cAAc,GACpB,OAAO,CAAC,CAAC,CAAC;IAYP,IAAI,CACR,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,cAAc,GACpB,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAYzD,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC;YAInD,WAAW;IAyJzB,OAAO,CAAC,QAAQ;IAmBhB,OAAO,CAAC,iBAAiB;YAyBX,YAAY;YAqCZ,aAAa;YAmBb,WAAW;CAQ1B"}
1
+ {"version":3,"file":"web-client.d.ts","sourceRoot":"","sources":["../../src/http-client/web-client.ts"],"names":[],"mappings":"AACA,OAAO,EACL,UAAU,EACV,SAAS,EACT,cAAc,EAEf,MAAM,cAAc,CAAC;AAItB,qBAAa,SAAU,SAAQ,KAAK;IAIzB,MAAM,EAAE,MAAM;IACd,UAAU,EAAE,MAAM;IAClB,GAAG,EAAE,MAAM;IACX,OAAO,EAAE,OAAO;IAChB,QAAQ,CAAC,EAAE,MAAM;IAP1B,IAAI,cAAwB;gBAGnB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,OAAO,EAChB,QAAQ,CAAC,EAAE,MAAM;IAK1B,MAAM,IAAI;QACR,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,GAAG,EAAE,MAAM,CAAC;QACZ,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB;CASF;AAYD,qBAAa,aAAc,YAAW,UAAU;IAMlC,OAAO,CAAC,SAAS;IAJ7B,OAAO,CAAC,mBAAmB,CAAgC;IAE3D,OAAO,CAAC,qBAAqB,CAA8B;gBAEvC,SAAS,EAAE,SAAS;IAElC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC;IAIvD,IAAI,CAAC,CAAC,EACV,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,OAAO,EACd,IAAI,CAAC,EAAE,cAAc,GACpB,OAAO,CAAC,CAAC,CAAC;IAYP,GAAG,CAAC,CAAC,EACT,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,OAAO,EACd,IAAI,CAAC,EAAE,cAAc,GACpB,OAAO,CAAC,CAAC,CAAC;IAYP,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC;IAI1D,KAAK,CAAC,CAAC,EACX,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,OAAO,EACd,IAAI,CAAC,EAAE,cAAc,GACpB,OAAO,CAAC,CAAC,CAAC;IAYP,IAAI,CACR,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,cAAc,GACpB,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAYzD,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC;YAInD,WAAW;IA4NzB,OAAO,CAAC,QAAQ;IAmBhB,OAAO,CAAC,iBAAiB;YAmBX,YAAY;YAqCZ,aAAa;YAmBb,WAAW;CAQ1B"}
@@ -32,6 +32,10 @@ function headersToRecord(headers) {
32
32
  export class WebHttpClient {
33
33
  constructor(transport) {
34
34
  this.transport = transport;
35
+ // Cache for concurrent refresh token calls to prevent race conditions
36
+ this.refreshTokenPromise = null;
37
+ // Cache for concurrent onTokenRefresh calls to prevent duplicate callbacks
38
+ this.onTokenRefreshPromise = null;
35
39
  }
36
40
  async get(path, init) {
37
41
  return this.request(path, { ...init, method: 'GET' });
@@ -86,56 +90,15 @@ export class WebHttpClient {
86
90
  async request(path, init) {
87
91
  return this.makeRequest(path, init);
88
92
  }
89
- async makeRequest(path, init) {
93
+ async makeRequest(path, init, retryCount = 0, requestStartTime) {
94
+ // Maximum retry attempts to prevent infinite loops
95
+ const MAX_RETRY_ATTEMPTS = 1;
90
96
  const url = this.buildUrl(path);
91
- // Detect Tauri - check multiple ways since __TAURI_INTERNALS__ might not be available
92
- // Also use minimal path if credentials is 'omit' (Tauri workaround)
93
- const hasTauriInternals = typeof window !== 'undefined' && '__TAURI_INTERNALS__' in window;
94
- const hasTauri = typeof window !== 'undefined' && '__TAURI__' in window;
95
- const isTauri = hasTauriInternals || hasTauri || this.transport.credentials === 'omit';
96
- // In Tauri, use absolute minimal RequestInit - just like a direct fetch call
97
- if (isTauri) {
98
- const headers = await this.buildHeaders(init?.headers);
99
- let headersObj;
100
- if (headers instanceof Headers) {
101
- headersObj = {};
102
- headers.forEach((value, key) => {
103
- headersObj[key] = value;
104
- });
105
- }
106
- else {
107
- headersObj = headers;
108
- }
109
- // Build minimal RequestInit - only what's absolutely necessary
110
- const requestInit = {};
111
- if (init?.method && init.method !== 'GET') {
112
- requestInit.method = init.method;
113
- }
114
- if (headersObj && Object.keys(headersObj).length > 0) {
115
- requestInit.headers = headersObj;
116
- }
117
- if (init?.body !== undefined && init.body !== null) {
118
- requestInit.body = init.body;
119
- }
120
- if (this.transport.credentials !== undefined) {
121
- requestInit.credentials = this.transport.credentials;
122
- }
123
- try {
124
- const response = await globalThis.fetch(url, requestInit);
125
- if (!response.ok) {
126
- const bodyText = await this.getBodyText(response);
127
- throw new HTTPError(response.status, response.statusText, url, response.headers, bodyText);
128
- }
129
- return this.parseResponse(response, init?.parse);
130
- }
131
- catch (error) {
132
- if (error instanceof HTTPError) {
133
- throw error;
134
- }
135
- throw new HTTPError(0, 'Network Error', url, new Headers(), error instanceof Error ? error.message : 'Unknown error');
136
- }
137
- }
138
- // Non-Tauri: use full implementation with signals, etc.
97
+ // Track request start time for timeout calculation (only on first attempt)
98
+ // Use per-request start time to avoid corruption from concurrent requests
99
+ const startTime = requestStartTime ?? Date.now();
100
+ // Note: Tauri proxy script now handles AbortSignal, so we can use full RequestInit
101
+ // Removed Tauri-specific minimal path - proxy script handles AbortSignal properly
139
102
  const signal = this.createAbortSignal(init);
140
103
  const headers = await this.buildHeaders(init?.headers);
141
104
  let headersObj;
@@ -152,11 +115,41 @@ export class WebHttpClient {
152
115
  method: init?.method || 'GET',
153
116
  headers: headersObj,
154
117
  };
155
- if (init?.body !== undefined) {
118
+ // Check if body is a stream (ReadableStream) that can't be reused
119
+ // Note: Blob is reusable, so it's not included here
120
+ const isStreamBody = init?.body instanceof ReadableStream ||
121
+ (typeof init?.body === 'object' && init?.body !== null && 'getReader' in init.body && !(init.body instanceof Blob));
122
+ if (init?.body !== undefined && !isStreamBody) {
156
123
  requestInit.body = init.body;
157
124
  }
158
- if (signal) {
159
- requestInit.signal = signal;
125
+ else if (init?.body !== undefined && isStreamBody && retryCount === 0) {
126
+ // Only include stream body on first attempt - can't retry with streams
127
+ requestInit.body = init.body;
128
+ }
129
+ // For retries, calculate remaining timeout to prevent timeout reset
130
+ // Track elapsed time and use remaining timeout for retry
131
+ // Note: This is calculated before the request, so it doesn't include token refresh time
132
+ // The actual remaining timeout check happens after token refresh completes
133
+ let retrySignal;
134
+ if (retryCount > 0 && requestStartTime !== undefined) {
135
+ const timeoutMs = init?.timeoutMs || this.transport.timeoutMs;
136
+ if (timeoutMs) {
137
+ // Calculate elapsed time (will be recalculated after token refresh if needed)
138
+ const elapsed = Date.now() - startTime;
139
+ const remaining = Math.max(0, timeoutMs - elapsed);
140
+ // Create signal with remaining timeout, preserving user's signal
141
+ retrySignal = this.createAbortSignal({ ...init, timeoutMs: remaining });
142
+ }
143
+ else {
144
+ // No timeout, just preserve user's signal
145
+ retrySignal = this.createAbortSignal(init);
146
+ }
147
+ }
148
+ else {
149
+ retrySignal = signal;
150
+ }
151
+ if (retrySignal) {
152
+ requestInit.signal = retrySignal;
160
153
  }
161
154
  if (this.transport.credentials !== undefined) {
162
155
  requestInit.credentials = this.transport.credentials;
@@ -186,7 +179,86 @@ export class WebHttpClient {
186
179
  const response = await this.transport.fetch(url, requestInit);
187
180
  if (!response.ok) {
188
181
  const bodyText = await this.getBodyText(response);
189
- throw new HTTPError(response.status, response.statusText, url, response.headers, bodyText);
182
+ const httpError = new HTTPError(response.status, response.statusText, url, response.headers, bodyText);
183
+ // Handle 401 with token_expired - attempt automatic token refresh
184
+ const userAborted = init?.signal?.aborted === true;
185
+ if (response.status === 401 &&
186
+ this.transport.refreshToken &&
187
+ response.headers.get('x-auth-error') === 'token_expired' &&
188
+ retryCount < MAX_RETRY_ATTEMPTS &&
189
+ !isStreamBody &&
190
+ !userAborted) {
191
+ try {
192
+ // Use cached refresh promise if one is in progress (prevents race conditions)
193
+ let refreshPromise = this.refreshTokenPromise;
194
+ if (!refreshPromise) {
195
+ refreshPromise = this.transport.refreshToken();
196
+ this.refreshTokenPromise = refreshPromise;
197
+ }
198
+ // Attempt to refresh the token
199
+ const newToken = await refreshPromise;
200
+ // Validate token - must be non-empty
201
+ if (!newToken || newToken.trim() === '') {
202
+ // Clear caches on error
203
+ this.refreshTokenPromise = null;
204
+ this.onTokenRefreshPromise = null;
205
+ throw new Error('Refresh token returned empty token');
206
+ }
207
+ // onTokenRefresh is required when refreshToken is provided
208
+ // Without it, the new token cannot be stored and getAuthToken() will return the old token
209
+ if (!this.transport.onTokenRefresh) {
210
+ // Clear caches on error
211
+ this.refreshTokenPromise = null;
212
+ this.onTokenRefreshPromise = null;
213
+ throw new Error('onTokenRefresh callback is required when refreshToken is provided. ' +
214
+ 'The callback must update the token storage so getAuthToken() returns the new token.');
215
+ }
216
+ // Use cached onTokenRefresh promise if one is in progress (prevents duplicate callbacks)
217
+ // This ensures onTokenRefresh is only called once per token refresh, even with concurrent requests
218
+ let onTokenRefreshPromise = this.onTokenRefreshPromise;
219
+ if (!onTokenRefreshPromise) {
220
+ onTokenRefreshPromise = this.transport.onTokenRefresh(newToken);
221
+ this.onTokenRefreshPromise = onTokenRefreshPromise;
222
+ }
223
+ // Update token via callback (only called once per refresh, even with concurrent requests)
224
+ // Errors from onTokenRefresh callback should be preserved (don't mask as 401)
225
+ // This helps developers debug token storage issues
226
+ await onTokenRefreshPromise;
227
+ // Clear caches after both refresh and callback complete
228
+ this.refreshTokenPromise = null;
229
+ this.onTokenRefreshPromise = null;
230
+ // Check if timeout has expired during token refresh
231
+ // If so, throw the original 401 error instead of retrying with 0ms timeout
232
+ // This prevents timeout/abort errors that obscure the root cause (expired token)
233
+ const timeoutMs = init?.timeoutMs || this.transport.timeoutMs;
234
+ if (timeoutMs && requestStartTime !== undefined) {
235
+ const elapsed = Date.now() - startTime;
236
+ const remaining = timeoutMs - elapsed;
237
+ if (remaining <= 0) {
238
+ // Timeout expired during token refresh - throw original 401 error
239
+ // This is better than retrying with 0ms timeout which would cause confusing timeout errors
240
+ throw httpError;
241
+ }
242
+ }
243
+ // Retry the request with the new token (increment retry count)
244
+ // Preserve user's abort signal and start time in retry
245
+ return this.makeRequest(path, init, retryCount + 1, startTime);
246
+ }
247
+ catch (refreshError) {
248
+ // Clear caches on error
249
+ this.refreshTokenPromise = null;
250
+ this.onTokenRefreshPromise = null;
251
+ // Configuration errors (missing onTokenRefresh) should be thrown as-is
252
+ if (refreshError instanceof Error && refreshError.message.includes('onTokenRefresh')) {
253
+ throw refreshError;
254
+ }
255
+ // Errors from onTokenRefresh callback are already thrown above, so if we get here,
256
+ // it's either a refreshToken() failure or empty token - throw original 401
257
+ // This matches the PR description: "If refresh fails, throws the original 401 error"
258
+ throw httpError;
259
+ }
260
+ }
261
+ throw httpError;
190
262
  }
191
263
  return this.parseResponse(response, init?.parse);
192
264
  }
@@ -194,6 +266,10 @@ export class WebHttpClient {
194
266
  if (error instanceof HTTPError) {
195
267
  throw error;
196
268
  }
269
+ // Preserve configuration errors (like missing onTokenRefresh)
270
+ if (error instanceof Error && error.message.includes('onTokenRefresh')) {
271
+ throw error;
272
+ }
197
273
  throw new HTTPError(0, 'Network Error', url, new Headers(), error instanceof Error ? error.message : 'Unknown error');
198
274
  }
199
275
  }
@@ -216,11 +292,6 @@ export class WebHttpClient {
216
292
  }
217
293
  }
218
294
  createAbortSignal(init) {
219
- // Skip AbortSignal in Tauri - it causes HTTP 0 Network Error
220
- const isTauri = typeof window !== 'undefined' && '__TAURI_INTERNALS__' in window;
221
- if (isTauri) {
222
- return undefined;
223
- }
224
295
  const signals = [];
225
296
  if (this.transport.defaultAbortSignal) {
226
297
  signals.push(this.transport.defaultAbortSignal);
@@ -1 +1 @@
1
- {"version":3,"file":"web-client.js","sourceRoot":"","sources":["../../src/http-client/web-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"web-client.js","sourceRoot":"","sources":["../../src/http-client/web-client.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,3 @@
1
- function b(n){let e=n.filter(Boolean);if(e.length===0)return;let t=AbortSignal;if(typeof t.any=="function")try{return t.any(e)}catch{}let s=new AbortController,r=o=>{s.abort(o.target.reason);for(let u of e)u.removeEventListener("abort",r)};for(let o of e){if(o.aborted)return AbortSignal.abort(o.reason);o.addEventListener("abort",r,{once:!0})}return s.signal}function P(n){if(typeof AbortSignal.timeout=="function")return AbortSignal.timeout(n);let e=new AbortController;return setTimeout(()=>{e.abort(new DOMException("Timeout","TimeoutError"))},n),e.signal}var c=class extends Error{constructor(t,s,r,o,u){super(`HTTP ${t} ${s}`);this.status=t;this.statusText=s;this.url=r;this.headers=o;this.bodyText=u;this.name="HTTPError"}toJSON(){return{status:this.status,statusText:this.statusText,url:this.url,headers:x(this.headers),bodyText:this.bodyText}}};function x(n){let e={};return n.forEach((t,s)=>{e[s]=t}),e}var g=class{constructor(e){this.transport=e}async get(e,t){return this.request(e,{...t,method:"GET"})}async post(e,t,s){return this.request(e,{...s,method:"POST",body:t?JSON.stringify(t):void 0,headers:{"Content-Type":"application/json",...s?.headers}})}async put(e,t,s){return this.request(e,{...s,method:"PUT",body:t?JSON.stringify(t):void 0,headers:{"Content-Type":"application/json",...s?.headers}})}async delete(e,t){return this.request(e,{...t,method:"DELETE"})}async patch(e,t,s){return this.request(e,{...s,method:"PATCH",body:t?JSON.stringify(t):void 0,headers:{"Content-Type":"application/json",...s?.headers}})}async head(e,t){let s=await this.makeRequest(e,{...t,method:"HEAD",parse:"response"});return{headers:x(s.headers),status:s.status}}async request(e,t){return this.makeRequest(e,t)}async makeRequest(e,t){let s=this.buildUrl(e),r=typeof window<"u"&&"__TAURI_INTERNALS__"in window,o=typeof window<"u"&&"__TAURI__"in window;if(r||o||this.transport.credentials==="omit"){let i=await this.buildHeaders(t?.headers),p;i instanceof Headers?(p={},i.forEach((l,k)=>{p[k]=l})):p=i;let f={};t?.method&&t.method!=="GET"&&(f.method=t.method),p&&Object.keys(p).length>0&&(f.headers=p),t?.body!==void 0&&t.body!==null&&(f.body=t.body),this.transport.credentials!==void 0&&(f.credentials=this.transport.credentials);try{let l=await globalThis.fetch(s,f);if(!l.ok){let k=await this.getBodyText(l);throw new c(l.status,l.statusText,s,l.headers,k)}return this.parseResponse(l,t?.parse)}catch(l){throw l instanceof c?l:new c(0,"Network Error",s,new Headers,l instanceof Error?l.message:"Unknown error")}}let w=this.createAbortSignal(t),C=await this.buildHeaders(t?.headers),h;C instanceof Headers?(h={},C.forEach((i,p)=>{h[p]=i})):h=C;let a={method:t?.method||"GET",headers:h};t?.body!==void 0&&(a.body=t.body),w&&(a.signal=w),this.transport.credentials!==void 0&&(a.credentials=this.transport.credentials),t?.mode!==void 0&&(a.mode=t.mode),t?.cache!==void 0&&(a.cache=t.cache),t?.redirect!==void 0&&(a.redirect=t.redirect),t?.referrer!==void 0&&(a.referrer=t.referrer),t?.referrerPolicy!==void 0&&(a.referrerPolicy=t.referrerPolicy),t?.integrity!==void 0&&(a.integrity=t.integrity),t?.keepalive!==void 0&&(a.keepalive=t.keepalive);try{let i=await this.transport.fetch(s,a);if(!i.ok){let p=await this.getBodyText(i);throw new c(i.status,i.statusText,s,i.headers,p)}return this.parseResponse(i,t?.parse)}catch(i){throw i instanceof c?i:new c(0,"Network Error",s,new Headers,i instanceof Error?i.message:"Unknown error")}}buildUrl(e){if(e.startsWith("http://")||e.startsWith("https://"))return e;let t=this.transport.baseUrl;return e.startsWith("/")?`${t.endsWith("/")?t.slice(0,-1):t}${e}`:`${t.endsWith("/")?t:`${t}/`}${e}`}createAbortSignal(e){if(typeof window<"u"&&"__TAURI_INTERNALS__"in window)return;let s=[];this.transport.defaultAbortSignal&&s.push(this.transport.defaultAbortSignal),e?.signal&&s.push(e.signal);let r=e?.timeoutMs||this.transport.timeoutMs;return r&&s.push(P(r)),s.length>0?b(s):void 0}async buildHeaders(e){let t={...this.transport.defaultHeaders};if(this.transport.getAuthToken)try{let s=await this.transport.getAuthToken();s&&s.trim()!==""&&(t.Authorization=`Bearer ${s}`)}catch{}return e&&(e instanceof Headers?e.forEach((s,r)=>{t[r]=s}):Array.isArray(e)?e.forEach(([s,r])=>{t[s]=r}):Object.assign(t,e)),t}async parseResponse(e,t){switch(t){case"text":return await e.text();case"blob":return await e.blob();case"arrayBuffer":return await e.arrayBuffer();case"response":return e;case"json":default:return await e.json()}}async getBodyText(e){try{let t=await e.text();return t.length>65536?t.slice(0,65536)+"...":t}catch{return""}}};function H(n){return new g(n)}function y(n){let e={fetch:(t,s)=>globalThis.fetch(t,s),baseUrl:n.baseUrl,getAuthToken:n.getAuthToken,onTokenRefresh:n.onTokenRefresh,defaultHeaders:n.defaultHeaders,timeoutMs:n.timeoutMs,credentials:n.credentials,defaultAbortSignal:n.defaultAbortSignal};return H(e)}function S(n){let e=n.fetch??globalThis.fetch;if(!e)throw new Error("No fetch implementation available. Please provide a fetch implementation (e.g., undici.fetch) or use Node.js 18+ which has native fetch support.");let s={fetch:e===globalThis.fetch?(r,o)=>globalThis.fetch(r,o):(r,o)=>e(r,o),baseUrl:n.baseUrl,getAuthToken:n.getAuthToken,onTokenRefresh:n.onTokenRefresh,defaultHeaders:n.defaultHeaders,timeoutMs:n.timeoutMs,credentials:n.credentials,defaultAbortSignal:n.defaultAbortSignal};return H(s)}function D(n){return typeof window<"u"?y(n):S(n)}function _(n,e){if(e<=0)return!1;let s=n?.name;if(s==="TimeoutError")return!0;if(s==="AbortError")return!1;let r=n;if("status"in r&&typeof r.status=="number"){let o=r.status;return o>=500||o===429}return s==="TypeError"}function N(n){let t=250*Math.pow(2,n-1),s=(Math.random()-.5)*.4*t;return Math.max(0,t+s)}async function E(n,e={}){let{attempts:t=3}=e,s;for(let r=1;r<=t;r++)try{return await n(r)}catch(o){if(s=o,!_(s,t-r))throw s;let u=N(r),h=s.headers?.get?.("Retry-After");if(h){let a=parseInt(h,10);if(!isNaN(a))u=Math.max(u,a*1e3);else{let i=new Date(h);if(!isNaN(i.getTime())){let p=Math.max(0,i.getTime()-Date.now());u=Math.max(u,Math.min(p,6e4))}}}await new Promise(a=>setTimeout(a,u))}throw s||new Error("Retry failed without error")}function U(n,e={}){return async(...t)=>E(()=>n(...t),e)}var d=class{constructor(e){this.httpClient=e}async getHealth(){let e=await this.httpClient.get("/auth/health");if(!e.data)throw new Error("Health response data is null");return e.data}async getIdentity(){let e=await this.httpClient.get("/admin/identity");if(!e.data)throw new Error("Identity response data is null");return e.data}async getProviders(){let e=await this.httpClient.get("/auth/providers");if(!e.data)throw new Error("Providers response data is null");return e.data}async getLoginPage(){return this.httpClient.get("/auth/login",{parse:"text"})}async generateTokens(e){return this.httpClient.post("/auth/token",e)}async refreshToken(e){return this.httpClient.post("/auth/refresh",e)}async generateMockTokens(e){return this.httpClient.post("/auth/mock-token",e)}async getChallenge(){return this.httpClient.get("/auth/challenge")}async validateToken(e){try{let t=await this.validateTokenGet(e);return{valid:t.status===200,headers:t.headers,status:t.status}}catch{return{valid:!1,headers:{},status:401}}}async validateTokenGet(e){let t=await this.httpClient.head("/auth/validate",{headers:{Authorization:`Bearer ${e}`}});return{status:t.status,headers:t.headers}}async isAuthed(){return this.httpClient.get("/auth/is-authed")}async revokeTokens(e){return this.httpClient.post("/admin/revoke",e)}async listRootKeys(){let e=await this.httpClient.get("/admin/keys");if(!e.data)throw new Error("Root keys response data is null");return e.data}async createRootKey(e){return this.httpClient.post("/admin/keys",e)}async deleteRootKey(e){return this.httpClient.delete(`/admin/keys/${e}`)}async listClientKeys(){let e=await this.httpClient.get("/admin/keys/clients");if(!e.data)throw new Error("Client keys response data is null");return e.data}async generateClientKey(e){return this.httpClient.post("/admin/client-key",e)}async deleteClientKey(e,t){return this.httpClient.delete(`/admin/keys/${e}/clients/${t}`)}async getKeyPermissions(e){return this.httpClient.get(`/admin/keys/${e}/permissions`)}async updateKeyPermissions(e,t){return this.httpClient.put(`/admin/keys/${e}/permissions`,{permissions:t})}};var T=class{async get(){throw new Error("HTTP client not implemented - use createAuthApiClientFromHttpClient with a real HTTP client")}async post(){throw new Error("HTTP client not implemented - use createAuthApiClientFromHttpClient with a real HTTP client")}async put(){throw new Error("HTTP client not implemented - use createAuthApiClientFromHttpClient with a real HTTP client")}async delete(){throw new Error("HTTP client not implemented - use createAuthApiClientFromHttpClient with a real HTTP client")}async patch(){throw new Error("HTTP client not implemented - use createAuthApiClientFromHttpClient with a real HTTP client")}async head(){throw new Error("HTTP client not implemented - use createAuthApiClientFromHttpClient with a real HTTP client")}async request(){throw new Error("HTTP client not implemented - use createAuthApiClientFromHttpClient with a real HTTP client")}};function Y(n){let e=new T;return new d(e)}function Z(n){let e=new T;return new d(e)}function ee(n){let e=new T;return new d(e)}function q(n,e){return new d(n)}var m=class{constructor(e){this.httpClient=e}async healthCheck(){let e=await this.httpClient.get("/health");if(!e.data)throw new Error("Health response data is null");return e.data}async isAuthed(){return this.httpClient.get("/is-authed")}async installApplication(e){return this.httpClient.post("/install-application",e)}async installDevApplication(e){return this.httpClient.post("/install-dev-application",e)}async uninstallApplication(e){return this.httpClient.delete(`/applications/${e}`)}async listApplications(){return this.httpClient.get("/applications")}async getApplication(e){return this.httpClient.get(`/applications/${e}`)}async createContext(e){return this.httpClient.post("/contexts",e)}async deleteContext(e){return this.httpClient.delete(`/contexts/${e}`)}async getContexts(){return this.httpClient.get("/contexts")}async getContext(e){return this.httpClient.get(`/contexts/${e}`)}async uploadBlob(e){return this.httpClient.post("/blobs",e)}async deleteBlob(e){return this.httpClient.delete(`/blobs/${e}`)}async listBlobs(){return this.httpClient.get("/blobs")}async getBlob(e){return this.httpClient.get(`/blobs/${e}`)}async createAlias(e){return this.httpClient.post("/alias",e)}async deleteAlias(e){return this.httpClient.delete(`/alias/${e}`)}async listAliases(){return this.httpClient.get("/alias")}async getAlias(e){return this.httpClient.get(`/alias/${e}`)}async getNetworkPeers(){return this.httpClient.get("/network/peers")}async getNetworkStats(){return this.httpClient.get("/network/stats")}async getNetworkConfig(){return this.httpClient.get("/network/config")}async updateNetworkConfig(e){return this.httpClient.put("/network/config",e)}async getPeersCount(){return this.httpClient.get("/network/peers/count")}async getSystemInfo(){return this.httpClient.get("/system/info")}async getSystemLogs(){return this.httpClient.get("/system/logs")}async getSystemMetrics(){return this.httpClient.get("/system/metrics")}async restartSystem(){return this.httpClient.post("/system/restart")}async shutdownSystem(){return this.httpClient.post("/system/shutdown")}};var R=class{async get(){throw new Error("HTTP client not implemented - use createAdminApiClientFromHttpClient with a real HTTP client")}async post(){throw new Error("HTTP client not implemented - use createAdminApiClientFromHttpClient with a real HTTP client")}async put(){throw new Error("HTTP client not implemented - use createAdminApiClientFromHttpClient with a real HTTP client")}async delete(){throw new Error("HTTP client not implemented - use createAdminApiClientFromHttpClient with a real HTTP client")}async patch(){throw new Error("HTTP client not implemented - use createAdminApiClientFromHttpClient with a real HTTP client")}async head(){throw new Error("HTTP client not implemented - use createAdminApiClientFromHttpClient with a real HTTP client")}async request(){throw new Error("HTTP client not implemented - use createAdminApiClientFromHttpClient with a real HTTP client")}};function re(n){let e=new R;return new m(e)}function ie(n){let e=new R;return new m(e)}function oe(n){let e=new R;return new m(e)}function v(n,e){return new m(n)}var A=class{constructor(e){this.tokenData=null;this.refreshPromise=null;this.config={timeoutMs:1e4,...e};let t=typeof window<"u"&&"__TAURI_INTERNALS__"in window;this.httpClient=y({baseUrl:this.config.baseUrl,getAuthToken:async()=>(await this.getValidToken())?.access_token||"",timeoutMs:this.config.timeoutMs,credentials:this.config.requestCredentials??(t?"omit":void 0)}),this.authClient=q(this.httpClient,{baseUrl:this.config.baseUrl,getAuthToken:async()=>(await this.getValidToken())?.access_token||"",timeoutMs:this.config.timeoutMs}),this.adminClient=v(this.httpClient,{baseUrl:this.config.baseUrl,getAuthToken:async()=>(await this.getValidToken())?.access_token||"",timeoutMs:this.config.timeoutMs})}get auth(){return this.authClient}get admin(){return this.adminClient}async authenticate(e){let t=e||this.config.credentials;if(!t)throw new Error("No credentials provided for authentication");try{let s={auth_method:"user_password",public_key:t.username,client_name:"mero-js-sdk",permissions:["admin"],timestamp:Math.floor(Date.now()/1e3),provider_data:{username:t.username,password:t.password}},r=await this.authClient.generateTokens(s);return this.tokenData={access_token:r.data.access_token,refresh_token:r.data.refresh_token,expires_at:Date.now()+1440*60*1e3},this.tokenData}catch(s){throw new Error(`Authentication failed: ${s instanceof Error?s.message:"Unknown error"}`)}}async getValidToken(){if(!this.tokenData)return null;let e=300*1e3;return Date.now()>=this.tokenData.expires_at-e?await this.refreshToken():this.tokenData}async refreshToken(){if(!this.tokenData?.refresh_token)throw new Error("No refresh token available");if(this.refreshPromise)return this.refreshPromise;this.refreshPromise=this.performTokenRefresh();try{return await this.refreshPromise}finally{this.refreshPromise=null}}async performTokenRefresh(){if(!this.tokenData?.refresh_token)throw new Error("No refresh token available");try{let e=await this.authClient.refreshToken({access_token:this.tokenData.access_token,refresh_token:this.tokenData.refresh_token});return this.tokenData={access_token:e.data.access_token,refresh_token:e.data.refresh_token,expires_at:Date.now()+1440*60*1e3},this.tokenData}catch(e){throw this.clearToken(),new Error(`Token refresh failed: ${e instanceof Error?e.message:"Unknown error"}`)}}clearToken(){this.tokenData=null}isAuthenticated(){return this.tokenData!==null}getTokenData(){return this.tokenData}};function M(n){return new A(n)}export{m as AdminApiClient,d as AuthApiClient,c as HTTPError,A as MeroJs,g as WebHttpClient,b as combineSignals,oe as createAdminApiClient,v as createAdminApiClientFromHttpClient,ee as createAuthApiClient,q as createAuthApiClientFromHttpClient,re as createBrowserAdminApiClient,Y as createBrowserAuthApiClient,y as createBrowserHttpClient,H as createHttpClient,M as createMeroJs,ie as createNodeAdminApiClient,Z as createNodeAuthApiClient,S as createNodeHttpClient,U as createRetryableMethod,P as createTimeoutSignal,D as createUniversalHttpClient,E as withRetry};
1
+ function M(r){let e=r.filter(Boolean);if(e.length===0)return;let t=AbortSignal;if(typeof t.any=="function")try{return t.any(e)}catch{}let n=new AbortController,s=i=>{n.abort(i.target.reason);for(let l of e)l.removeEventListener("abort",s)};for(let i of e){if(i.aborted)return AbortSignal.abort(i.reason);i.addEventListener("abort",s,{once:!0})}return n.signal}function U(r){if(typeof AbortSignal.timeout=="function")return AbortSignal.timeout(r);let e=new AbortController;return setTimeout(()=>{e.abort(new DOMException("Timeout","TimeoutError"))},r),e.signal}var g=class extends Error{constructor(t,n,s,i,l){super(`HTTP ${t} ${n}`);this.status=t;this.statusText=n;this.url=s;this.headers=i;this.bodyText=l;this.name="HTTPError"}toJSON(){return{status:this.status,statusText:this.statusText,url:this.url,headers:K(this.headers),bodyText:this.bodyText}}};function K(r){let e={};return r.forEach((t,n)=>{e[n]=t}),e}var R=class{constructor(e){this.transport=e;this.refreshTokenPromise=null;this.onTokenRefreshPromise=null}async get(e,t){return this.request(e,{...t,method:"GET"})}async post(e,t,n){return this.request(e,{...n,method:"POST",body:t?JSON.stringify(t):void 0,headers:{"Content-Type":"application/json",...n?.headers}})}async put(e,t,n){return this.request(e,{...n,method:"PUT",body:t?JSON.stringify(t):void 0,headers:{"Content-Type":"application/json",...n?.headers}})}async delete(e,t){return this.request(e,{...t,method:"DELETE"})}async patch(e,t,n){return this.request(e,{...n,method:"PATCH",body:t?JSON.stringify(t):void 0,headers:{"Content-Type":"application/json",...n?.headers}})}async head(e,t){let n=await this.makeRequest(e,{...t,method:"HEAD",parse:"response"});return{headers:K(n.headers),status:n.status}}async request(e,t){return this.makeRequest(e,t)}async makeRequest(e,t,n=0,s){let l=this.buildUrl(e),d=s??Date.now(),C=this.createAbortSignal(t),h=await this.buildHeaders(t?.headers),p;h instanceof Headers?(p={},h.forEach((a,b)=>{p[b]=a})):p=h;let c={method:t?.method||"GET",headers:p},y=t?.body instanceof ReadableStream||typeof t?.body=="object"&&t?.body!==null&&"getReader"in t.body&&!(t.body instanceof Blob);(t?.body!==void 0&&!y||t?.body!==void 0&&y&&n===0)&&(c.body=t.body);let w;if(n>0&&s!==void 0){let a=t?.timeoutMs||this.transport.timeoutMs;if(a){let b=Date.now()-d,A=Math.max(0,a-b);w=this.createAbortSignal({...t,timeoutMs:A})}else w=this.createAbortSignal(t)}else w=C;w&&(c.signal=w),this.transport.credentials!==void 0&&(c.credentials=this.transport.credentials),t?.mode!==void 0&&(c.mode=t.mode),t?.cache!==void 0&&(c.cache=t.cache),t?.redirect!==void 0&&(c.redirect=t.redirect),t?.referrer!==void 0&&(c.referrer=t.referrer),t?.referrerPolicy!==void 0&&(c.referrerPolicy=t.referrerPolicy),t?.integrity!==void 0&&(c.integrity=t.integrity),t?.keepalive!==void 0&&(c.keepalive=t.keepalive);try{let a=await this.transport.fetch(l,c);if(!a.ok){let b=await this.getBodyText(a),A=new g(a.status,a.statusText,l,a.headers,b),V=t?.signal?.aborted===!0;if(a.status===401&&this.transport.refreshToken&&a.headers.get("x-auth-error")==="token_expired"&&n<1&&!y&&!V)try{let u=this.refreshTokenPromise;u||(u=this.transport.refreshToken(),this.refreshTokenPromise=u);let _=await u;if(!_||_.trim()==="")throw this.refreshTokenPromise=null,this.onTokenRefreshPromise=null,new Error("Refresh token returned empty token");if(!this.transport.onTokenRefresh)throw this.refreshTokenPromise=null,this.onTokenRefreshPromise=null,new Error("onTokenRefresh callback is required when refreshToken is provided. The callback must update the token storage so getAuthToken() returns the new token.");let S=this.onTokenRefreshPromise;S||(S=this.transport.onTokenRefresh(_),this.onTokenRefreshPromise=S),await S,this.refreshTokenPromise=null,this.onTokenRefreshPromise=null;let J=t?.timeoutMs||this.transport.timeoutMs;if(J&&s!==void 0){let z=Date.now()-d;if(J-z<=0)throw A}return this.makeRequest(e,t,n+1,d)}catch(u){throw this.refreshTokenPromise=null,this.onTokenRefreshPromise=null,u instanceof Error&&u.message.includes("onTokenRefresh")?u:A}throw A}return this.parseResponse(a,t?.parse)}catch(a){throw a instanceof g||a instanceof Error&&a.message.includes("onTokenRefresh")?a:new g(0,"Network Error",l,new Headers,a instanceof Error?a.message:"Unknown error")}}buildUrl(e){if(e.startsWith("http://")||e.startsWith("https://"))return e;let t=this.transport.baseUrl;return e.startsWith("/")?`${t.endsWith("/")?t.slice(0,-1):t}${e}`:`${t.endsWith("/")?t:`${t}/`}${e}`}createAbortSignal(e){let t=[];this.transport.defaultAbortSignal&&t.push(this.transport.defaultAbortSignal),e?.signal&&t.push(e.signal);let n=e?.timeoutMs||this.transport.timeoutMs;return n&&t.push(U(n)),t.length>0?M(t):void 0}async buildHeaders(e){let t={...this.transport.defaultHeaders};if(this.transport.getAuthToken)try{let n=await this.transport.getAuthToken();n&&n.trim()!==""&&(t.Authorization=`Bearer ${n}`)}catch{}return e&&(e instanceof Headers?e.forEach((n,s)=>{t[s]=n}):Array.isArray(e)?e.forEach(([n,s])=>{t[n]=s}):Object.assign(t,e)),t}async parseResponse(e,t){switch(t){case"text":return await e.text();case"blob":return await e.blob();case"arrayBuffer":return await e.arrayBuffer();case"response":return e;case"json":default:return await e.json()}}async getBodyText(e){try{let t=await e.text();return t.length>65536?t.slice(0,65536)+"...":t}catch{return""}}};function W(r){return new R(r)}function E(r){let e={fetch:(t,n)=>globalThis.fetch(t,n),baseUrl:r.baseUrl,getAuthToken:r.getAuthToken,onTokenRefresh:r.onTokenRefresh,refreshToken:r.refreshToken,defaultHeaders:r.defaultHeaders,timeoutMs:r.timeoutMs,credentials:r.credentials,defaultAbortSignal:r.defaultAbortSignal};return W(e)}function B(r){let e=r.fetch??globalThis.fetch;if(!e)throw new Error("No fetch implementation available. Please provide a fetch implementation (e.g., undici.fetch) or use Node.js 18+ which has native fetch support.");let n={fetch:e===globalThis.fetch?(s,i)=>globalThis.fetch(s,i):(s,i)=>e(s,i),baseUrl:r.baseUrl,getAuthToken:r.getAuthToken,onTokenRefresh:r.onTokenRefresh,refreshToken:r.refreshToken,defaultHeaders:r.defaultHeaders,timeoutMs:r.timeoutMs,credentials:r.credentials,defaultAbortSignal:r.defaultAbortSignal};return W(n)}function X(r){return typeof window<"u"?E(r):B(r)}function Y(r,e){if(e<=0)return!1;let n=r?.name;if(n==="TimeoutError")return!0;if(n==="AbortError")return!1;let s=r;if("status"in s&&typeof s.status=="number"){let i=s.status;return i>=500||i===429}return n==="TypeError"}function Q(r){let t=250*Math.pow(2,r-1),n=(Math.random()-.5)*.4*t;return Math.max(0,t+n)}async function G(r,e={}){let{attempts:t=3}=e,n;for(let s=1;s<=t;s++)try{return await r(s)}catch(i){if(n=i,!Y(n,t-s))throw n;let l=Q(s),h=n.headers?.get?.("Retry-After");if(h){let p=parseInt(h,10);if(!isNaN(p))l=Math.max(l,p*1e3);else{let c=new Date(h);if(!isNaN(c.getTime())){let y=Math.max(0,c.getTime()-Date.now());l=Math.max(l,Math.min(y,6e4))}}}await new Promise(p=>setTimeout(p,l))}throw n||new Error("Retry failed without error")}function Z(r,e={}){return async(...t)=>G(()=>r(...t),e)}var m=class{constructor(e){this.httpClient=e}async getHealth(){let e=await this.httpClient.get("/auth/health");if(!e.data)throw new Error("Health response data is null");return e.data}async getIdentity(){let e=await this.httpClient.get("/admin/identity");if(!e.data)throw new Error("Identity response data is null");return e.data}async getProviders(){let e=await this.httpClient.get("/auth/providers");if(!e.data)throw new Error("Providers response data is null");return e.data}async getLoginPage(){return this.httpClient.get("/auth/login",{parse:"text"})}async generateTokens(e){return this.httpClient.post("/auth/token",e)}async refreshToken(e){return this.httpClient.post("/auth/refresh",e)}async generateMockTokens(e){return this.httpClient.post("/auth/mock-token",e)}async getChallenge(){return this.httpClient.get("/auth/challenge")}async validateToken(e){try{let t=await this.validateTokenGet(e);return{valid:t.status===200,headers:t.headers,status:t.status}}catch{return{valid:!1,headers:{},status:401}}}async validateTokenGet(e){let t=await this.httpClient.head("/auth/validate",{headers:{Authorization:`Bearer ${e}`}});return{status:t.status,headers:t.headers}}async isAuthed(){return this.httpClient.get("/auth/is-authed")}async revokeTokens(e){return this.httpClient.post("/admin/revoke",e)}async listRootKeys(){let e=await this.httpClient.get("/admin/keys");if(!e.data)throw new Error("Root keys response data is null");return e.data}async createRootKey(e){return this.httpClient.post("/admin/keys",e)}async deleteRootKey(e){return this.httpClient.delete(`/admin/keys/${e}`)}async listClientKeys(){let e=await this.httpClient.get("/admin/keys/clients");if(!e.data)throw new Error("Client keys response data is null");return e.data}async generateClientKey(e){return this.httpClient.post("/admin/client-key",e)}async deleteClientKey(e,t){return this.httpClient.delete(`/admin/keys/${e}/clients/${t}`)}async getKeyPermissions(e){return this.httpClient.get(`/admin/keys/${e}/permissions`)}async updateKeyPermissions(e,t){return this.httpClient.put(`/admin/keys/${e}/permissions`,{permissions:t})}};var v=class{async get(){throw new Error("HTTP client not implemented - use createAuthApiClientFromHttpClient with a real HTTP client")}async post(){throw new Error("HTTP client not implemented - use createAuthApiClientFromHttpClient with a real HTTP client")}async put(){throw new Error("HTTP client not implemented - use createAuthApiClientFromHttpClient with a real HTTP client")}async delete(){throw new Error("HTTP client not implemented - use createAuthApiClientFromHttpClient with a real HTTP client")}async patch(){throw new Error("HTTP client not implemented - use createAuthApiClientFromHttpClient with a real HTTP client")}async head(){throw new Error("HTTP client not implemented - use createAuthApiClientFromHttpClient with a real HTTP client")}async request(){throw new Error("HTTP client not implemented - use createAuthApiClientFromHttpClient with a real HTTP client")}};function Te(r){let e=new v;return new m(e)}function Ce(r){let e=new v;return new m(e)}function ye(r){let e=new v;return new m(e)}function F(r,e){return new m(r)}function o(r){return r.data}var f=class{constructor(e){this.httpClient=e}async healthCheck(){return o(await this.httpClient.get("/admin-api/health"))}async isAuthed(){return this.httpClient.get("/admin-api/is-authed")}async installApplication(e){return o(await this.httpClient.post("/admin-api/install-application",e))}async installDevApplication(e){return o(await this.httpClient.post("/admin-api/install-dev-application",e))}async uninstallApplication(e){return o(await this.httpClient.delete(`/admin-api/applications/${e}`))}async listApplications(){return o(await this.httpClient.get("/admin-api/applications"))}async getApplication(e){return o(await this.httpClient.get(`/admin-api/applications/${e}`))}async getLatestPackageVersion(e){return this.httpClient.get(`/admin-api/packages/${encodeURIComponent(e)}/latest`)}async createContext(e){return o(await this.httpClient.post("/admin-api/contexts",e))}async deleteContext(e){return o(await this.httpClient.delete(`/admin-api/contexts/${e}`))}async getContexts(){return o(await this.httpClient.get("/admin-api/contexts"))}async getContext(e){return o(await this.httpClient.get(`/admin-api/contexts/${e}`))}async getContextsForApplication(e){return o(await this.httpClient.get(`/admin-api/contexts/for-application/${e}`))}async generateContextIdentity(){return o(await this.httpClient.post("/admin-api/identity/context",{}))}async getContextIdentities(e){return o(await this.httpClient.get(`/admin-api/contexts/${e}/identities`))}async getContextIdentitiesOwned(e){return o(await this.httpClient.get(`/admin-api/contexts/${e}/identities-owned`))}async inviteToContext(e){return o(await this.httpClient.post("/admin-api/contexts/invite",e))}async joinContext(e){return o(await this.httpClient.post("/admin-api/contexts/join",e))}async uploadBlob(e){return o(await this.httpClient.put("/admin-api/blobs",e))}async deleteBlob(e){return o(await this.httpClient.delete(`/admin-api/blobs/${e}`))}async listBlobs(){return o(await this.httpClient.get("/admin-api/blobs"))}async getBlob(e){return o(await this.httpClient.get(`/admin-api/blobs/${e}`))}async createContextAlias(e){return this.httpClient.post("/admin-api/alias/create/context",e)}async createApplicationAlias(e){return this.httpClient.post("/admin-api/alias/create/application",e)}async lookupContextAlias(e){return this.httpClient.post(`/admin-api/alias/lookup/context/${encodeURIComponent(e)}`,{})}async lookupApplicationAlias(e){return this.httpClient.post(`/admin-api/alias/lookup/application/${encodeURIComponent(e)}`,{})}async deleteContextAlias(e){return this.httpClient.post(`/admin-api/alias/delete/context/${encodeURIComponent(e)}`,{})}async deleteApplicationAlias(e){return this.httpClient.post(`/admin-api/alias/delete/application/${encodeURIComponent(e)}`,{})}async listContextAliases(){return o(await this.httpClient.get("/admin-api/alias/list/context"))}async listApplicationAliases(){return o(await this.httpClient.get("/admin-api/alias/list/application"))}async getPeersCount(){return this.httpClient.get("/admin-api/peers")}};var x=class{async get(){throw new Error("HTTP client not implemented - use createAdminApiClientFromHttpClient with a real HTTP client")}async post(){throw new Error("HTTP client not implemented - use createAdminApiClientFromHttpClient with a real HTTP client")}async put(){throw new Error("HTTP client not implemented - use createAdminApiClientFromHttpClient with a real HTTP client")}async delete(){throw new Error("HTTP client not implemented - use createAdminApiClientFromHttpClient with a real HTTP client")}async patch(){throw new Error("HTTP client not implemented - use createAdminApiClientFromHttpClient with a real HTTP client")}async head(){throw new Error("HTTP client not implemented - use createAdminApiClientFromHttpClient with a real HTTP client")}async request(){throw new Error("HTTP client not implemented - use createAdminApiClientFromHttpClient with a real HTTP client")}};function Re(r){let e=new x;return new f(e)}function ve(r){let e=new x;return new f(e)}function xe(r){let e=new x;return new f(e)}function j(r,e){return new f(r)}function q(r){try{let e=r.indexOf("#");if(e===-1)return null;let t=r.substring(e+1),n=new URLSearchParams(t),s=n.get("access_token");return s?{accessToken:s,refreshToken:n.get("refresh_token")??"",applicationId:n.get("application_id")??"",contextId:n.get("context_id")??"",contextIdentity:n.get("context_identity")??"",nodeUrl:n.get("node_url")??""}:null}catch{return null}}function O(r,e){let t=new URLSearchParams;return t.set("callback-url",e.callbackUrl),e.permissions&&e.permissions.length>0&&t.set("permissions",e.permissions.join(",")),t.set("mode",e.mode),e.packageName&&(t.set("package-name",e.packageName),e.packageVersion&&t.set("package-version",e.packageVersion),e.registryUrl&&t.set("registry-url",e.registryUrl)),`${r.replace(/\/+$/,"")}/auth/login?${t.toString()}`}var H=class extends Error{constructor(e,t,n,s){super(t),this.name="RpcError",this.code=e,this.data=n,this.type=s}},P=class{constructor(e){this.httpClient=e.httpClient}async execute(e){let t={jsonrpc:"2.0",id:1,method:"execute",params:{contextId:e.contextId,method:e.method,argsJson:e.argsJson??{},executorPublicKey:e.executorPublicKey}},n=await this.httpClient.post("/jsonrpc",t);if(n.error){let s=n.error,i=s.code??-1,l=s.message??s.type??"RPC error";throw new H(i,l,s.data,s.type)}return n.result&&"output"in n.result?n.result.output:n.result}};var k=class{constructor(e){this.sessionId=null;this.abortController=null;this.reconnectTimer=null;this.subscribedContextIds=new Set;this.closed=!1;this.listeners={connect:[],event:[],error:[]};this.baseUrl=e.baseUrl.replace(/\/+$/,""),this.getAuthToken=e.getAuthToken,this.reconnectDelayMs=e.reconnectDelayMs??3e3}on(e,t){let n=e;if(n in this.listeners){let s=this.listeners[n];s.includes(t)||s.push(t)}}off(e,t){let n=e;if(n in this.listeners){let s=this.listeners[n],i=s.indexOf(t);i!==-1&&s.splice(i,1)}}emit(e,t){let n=e;if(n in this.listeners)for(let s of this.listeners[n])try{s(t)}catch{}}async connect(){if(!(this.abortController&&!this.closed)){this.closed=!1,this.abortController=new AbortController;try{let e=await this.getAuthToken(),t=await fetch(`${this.baseUrl}/sse`,{headers:{Authorization:`Bearer ${e}`,Accept:"text/event-stream"},signal:this.abortController.signal});if(!t.ok)throw new Error(`SSE connection failed: ${t.status}`);if(!t.body)throw new Error("SSE response has no body");this.readStream(t.body).catch(n=>{if(this.closed)return;let s=n instanceof Error?n:new Error(String(n));this.emit("error",s),this.scheduleReconnect()})}catch(e){if(this.closed)return;let t=e instanceof Error?e:new Error(String(e));this.emit("error",t),this.scheduleReconnect()}}}async readStream(e){let t=e.getReader(),n=new TextDecoder,s="";try{for(;;){let{done:i,value:l}=await t.read();if(i)break;s+=n.decode(l,{stream:!0});let d=s.split(`
2
+ `);s=d.pop()??"";for(let C of d)if(C.startsWith("data:")){let h=C.slice(5).trim();h&&this.handleMessage(h)}}if(s+=n.decode(),s.startsWith("data:")){let i=s.slice(5).trim();i&&this.handleMessage(i)}}catch(i){if(this.closed)return;let l=i instanceof Error?i:new Error(String(i));this.emit("error",l)}this.closed||this.scheduleReconnect()}handleMessage(e){try{let t=JSON.parse(e);if(t.type==="connect"&&t.session_id){this.sessionId=t.session_id,this.emit("connect",t.session_id),this.subscribedContextIds.size>0&&this.sendSubscription("subscribe",[...this.subscribedContextIds]);return}if(t.result&&t.result.contextId){let n=t.result.data;if(Array.isArray(n))try{let s=new Uint8Array(n),i=new TextDecoder().decode(s);n=JSON.parse(i)}catch{}this.emit("event",{contextId:t.result.contextId,data:n})}}catch{}}async subscribe(e){let t=e.filter(n=>!this.subscribedContextIds.has(n));for(let n of e)this.subscribedContextIds.add(n);t.length>0&&this.sessionId&&await this.sendSubscription("subscribe",t)}async unsubscribe(e){let t=e.filter(n=>this.subscribedContextIds.has(n));for(let n of e)this.subscribedContextIds.delete(n);t.length>0&&this.sessionId&&await this.sendSubscription("unsubscribe",t)}async sendSubscription(e,t){try{let n=await this.getAuthToken(),s=await fetch(`${this.baseUrl}/sse/subscription`,{method:"POST",headers:{Authorization:`Bearer ${n}`,"Content-Type":"application/json"},body:JSON.stringify({id:this.sessionId,method:e,params:{contextIds:t}})});s.ok||this.emit("error",new Error(`SSE ${e} failed: ${s.status}`))}catch(n){this.emit("error",n instanceof Error?n:new Error(`SSE ${e} failed`))}}forceReconnect(){this.abortController&&(this.abortController.abort(),this.abortController=null),this.sessionId=null,this.connect()}scheduleReconnect(){this.closed||(this.reconnectTimer&&clearTimeout(this.reconnectTimer),this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=null,this.forceReconnect()},this.reconnectDelayMs))}close(){this.closed=!0,this.abortController&&(this.abortController.abort(),this.abortController=null),this.reconnectTimer&&(clearTimeout(this.reconnectTimer),this.reconnectTimer=null),this.sessionId=null,this.subscribedContextIds.clear()}};var D=class D{constructor(e){this.ws=null;this.closed=!1;this.reconnectAttempt=0;this.reconnectTimer=null;this.subscribedContextIds=new Set;this.listeners={connect:[],event:[],error:[]};this.baseUrl=e.baseUrl.replace(/\/+$/,""),this.getAuthToken=e.getAuthToken}on(e,t){let n=e;if(n in this.listeners){let s=this.listeners[n];s.includes(t)||s.push(t)}}off(e,t){let n=e;if(n in this.listeners){let s=this.listeners[n],i=s.indexOf(t);i!==-1&&s.splice(i,1)}}emit(e,t){let n=e;if(n in this.listeners)for(let s of this.listeners[n])try{s(t)}catch{}}async connect(){if(!(this.ws&&(this.ws.readyState===WebSocket.CONNECTING||this.ws.readyState===WebSocket.OPEN))){this.closed=!1;try{let e=await this.getAuthToken();if(!e)throw new Error("No authentication token available for WebSocket connection");let t=this.baseUrl.replace(/^http/,"ws");this.ws=new WebSocket(`${t}/ws?token=${encodeURIComponent(e)}`),this.ws.onopen=()=>{this.reconnectAttempt=0,this.emit("connect"),this.subscribedContextIds.size>0&&this.sendMessage({id:null,method:"subscribe",params:{contextIds:[...this.subscribedContextIds]}})},this.ws.onmessage=n=>{this.handleMessage(n.data)},this.ws.onerror=()=>{this.emit("error",new Error("WebSocket error"))},this.ws.onclose=()=>{this.closed||this.scheduleReconnect()}}catch(e){if(this.closed)return;let t=e instanceof Error?e:new Error(String(e));this.emit("error",t),this.scheduleReconnect()}}}handleMessage(e){if(typeof e=="string")try{let t=JSON.parse(e);if(t.result&&t.result.contextId){let n=t.result.data;if(Array.isArray(n))try{let s=new Uint8Array(n),i=new TextDecoder().decode(s);n=JSON.parse(i)}catch{}this.emit("event",{contextId:t.result.contextId,data:n})}}catch{}}subscribe(e){for(let t of e)this.subscribedContextIds.add(t);this.ws&&this.ws.readyState===WebSocket.OPEN&&this.sendMessage({id:null,method:"subscribe",params:{contextIds:e}})}unsubscribe(e){for(let t of e)this.subscribedContextIds.delete(t);this.ws&&this.ws.readyState===WebSocket.OPEN&&this.sendMessage({id:null,method:"unsubscribe",params:{contextIds:e}})}sendMessage(e){this.ws&&this.ws.readyState===WebSocket.OPEN&&this.ws.send(JSON.stringify(e))}scheduleReconnect(){if(this.closed)return;this.reconnectTimer&&clearTimeout(this.reconnectTimer);let e=Math.min(1e3*Math.pow(2,this.reconnectAttempt),D.MAX_BACKOFF_MS);this.reconnectAttempt++,this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=null,this.connect()},e)}close(){this.closed=!0,this.reconnectTimer&&(clearTimeout(this.reconnectTimer),this.reconnectTimer=null),this.ws&&(this.ws.onclose=null,this.ws.close(),this.ws=null),this.subscribedContextIds.clear()}};D.MAX_BACKOFF_MS=3e4;var T=D;function $(r,e){try{let t=r.split(".");if(t.length===3){let n=t[1].replace(/-/g,"+").replace(/_/g,"/");for(;n.length%4;)n+="=";let s=JSON.parse(atob(n));if(typeof s.exp=="number")return s.exp*1e3}}catch{}return e}var I=class{constructor(e){this.tokenData=null;this.refreshPromise=null;this.rpcClient=null;this.sseClient=null;this.wsClient=null;this.wsWarned=!1;this.config={timeoutMs:1e4,...e},this.tokenStore=e.tokenStore??null,this.tokenStore&&(this.tokenData=this.tokenStore.getTokens());let t=typeof window<"u"&&"__TAURI_INTERNALS__"in window;this.httpClient=E({baseUrl:this.config.baseUrl,getAuthToken:async()=>(await this.getValidToken())?.access_token||"",refreshToken:async()=>(await this.performTokenRefresh()).access_token,onTokenRefresh:async n=>{this.tokenData&&(this.tokenData.access_token=n,this.tokenStore?.setTokens(this.tokenData))},timeoutMs:this.config.timeoutMs,credentials:this.config.requestCredentials??(t?"omit":void 0)}),this.authClient=F(this.httpClient,{baseUrl:this.config.baseUrl,getAuthToken:async()=>(await this.getValidToken())?.access_token||"",timeoutMs:this.config.timeoutMs}),this.adminClient=j(this.httpClient,{baseUrl:this.config.baseUrl,getAuthToken:async()=>(await this.getValidToken())?.access_token||"",timeoutMs:this.config.timeoutMs})}get auth(){return this.authClient}get admin(){return this.adminClient}get rpc(){return this.rpcClient||(this.rpcClient=new P({httpClient:this.httpClient})),this.rpcClient}get events(){return this.sseClient||(this.sseClient=new k({baseUrl:this.config.baseUrl,getAuthToken:async()=>(await this.getValidToken())?.access_token||""})),this.sseClient}get ws(){return this.wsWarned||(this.wsWarned=!0,console.warn("[mero-js] WsClient is experimental. Use mero.events (SSE) for production.")),this.wsClient||(this.wsClient=new T({baseUrl:this.config.baseUrl,getAuthToken:async()=>(await this.getValidToken())?.access_token||""})),this.wsClient}async authenticate(e){let t=e||this.config.credentials;if(!t)throw new Error("No credentials provided for authentication");try{let n={auth_method:"user_password",public_key:t.username,client_name:"mero-js-sdk",permissions:["admin"],timestamp:Math.floor(Date.now()/1e3),provider_data:{username:t.username,password:t.password}},s=await this.authClient.generateTokens(n),i=s.data.access_token;return this.tokenData={access_token:i,refresh_token:s.data.refresh_token,expires_at:$(i,Date.now()+36e5)},this.tokenStore?.setTokens(this.tokenData),this.tokenData}catch(n){throw new Error(`Authentication failed: ${n instanceof Error?n.message:"Unknown error"}`)}}async getValidToken(){return this.tokenData}async refreshToken(){if(!this.tokenData?.refresh_token)throw new Error("No refresh token available");if(this.refreshPromise)return this.refreshPromise;this.refreshPromise=this.performTokenRefresh();try{return await this.refreshPromise}finally{this.refreshPromise=null}}async performTokenRefresh(){if(!this.tokenData?.refresh_token)throw new Error("No refresh token available");try{let e=await this.authClient.refreshToken({access_token:this.tokenData.access_token,refresh_token:this.tokenData.refresh_token}),t=e.data.access_token;return this.tokenData={access_token:t,refresh_token:e.data.refresh_token,expires_at:$(t,Date.now()+36e5)},this.tokenStore?.setTokens(this.tokenData),this.tokenData}catch(e){throw new Error(`Token refresh failed: ${e instanceof Error?e.message:"Unknown error"}`)}}clearToken(){this.tokenData=null,this.tokenStore?.clear()}isAuthenticated(){return this.tokenData!==null}setTokenData(e){let t=e.expires_at||$(e.access_token,Date.now()+36e5);this.tokenData={...e,expires_at:t},this.tokenStore?.setTokens(this.tokenData)}getTokenData(){return this.tokenData}close(){this.sseClient?.close(),this.wsClient?.close()}static parseAuthCallback(e){return q(e)}static buildAuthLoginUrl(e,t){return O(e,t)}};function ee(r){return new I(r)}var N=class{constructor(){this.tokens=null}getTokens(){return this.tokens}setTokens(e){this.tokens=e}clear(){this.tokens=null}},te="mero-tokens",L=class{constructor(e=te){this.key=e}getTokens(){try{if(typeof localStorage>"u")return null;let e=localStorage.getItem(this.key);if(!e)return null;let t=JSON.parse(e);return t&&t.access_token&&t.refresh_token?{access_token:t.access_token,refresh_token:t.refresh_token,expires_at:typeof t.expires_at=="number"?t.expires_at:Date.now()+36e5}:null}catch{return null}}setTokens(e){try{if(typeof localStorage>"u")return;localStorage.setItem(this.key,JSON.stringify(e))}catch{}}clear(){try{if(typeof localStorage>"u")return;localStorage.removeItem(this.key)}catch{}}};export{f as AdminApiClient,m as AuthApiClient,g as HTTPError,L as LocalStorageTokenStore,N as MemoryTokenStore,I as MeroJs,P as RpcClient,H as RpcError,k as SseClient,R as WebHttpClient,T as WsClient,O as buildAuthLoginUrl,M as combineSignals,xe as createAdminApiClient,j as createAdminApiClientFromHttpClient,ye as createAuthApiClient,F as createAuthApiClientFromHttpClient,Re as createBrowserAdminApiClient,Te as createBrowserAuthApiClient,E as createBrowserHttpClient,W as createHttpClient,ee as createMeroJs,ve as createNodeAdminApiClient,Ce as createNodeAuthApiClient,B as createNodeHttpClient,Z as createRetryableMethod,U as createTimeoutSignal,X as createUniversalHttpClient,q as parseAuthCallback,G as withRetry};
2
3
  //# sourceMappingURL=index.browser.mjs.map