@addn/sdk 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/auth/storage.d.ts +25 -0
- package/dist/auth/storage.d.ts.map +1 -0
- package/dist/auth/storage.js +72 -0
- package/dist/auth/storage.js.map +1 -0
- package/dist/auth/token-manager.d.ts +39 -0
- package/dist/auth/token-manager.d.ts.map +1 -0
- package/dist/auth/token-manager.js +98 -0
- package/dist/auth/token-manager.js.map +1 -0
- package/dist/client.d.ts +31 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +39 -0
- package/dist/client.js.map +1 -0
- package/dist/http/errors.d.ts +51 -0
- package/dist/http/errors.d.ts.map +1 -0
- package/dist/http/errors.js +92 -0
- package/dist/http/errors.js.map +1 -0
- package/dist/http/http-client.d.ts +18 -0
- package/dist/http/http-client.d.ts.map +1 -0
- package/dist/http/http-client.js +221 -0
- package/dist/http/http-client.js.map +1 -0
- package/dist/http/types.d.ts +27 -0
- package/dist/http/types.d.ts.map +1 -0
- package/dist/http/types.js +3 -0
- package/dist/http/types.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +36 -0
- package/dist/index.js.map +1 -0
- package/dist/modules/accounts.module.d.ts +15 -0
- package/dist/modules/accounts.module.d.ts.map +1 -0
- package/dist/modules/accounts.module.js +57 -0
- package/dist/modules/accounts.module.js.map +1 -0
- package/dist/modules/analytics.module.d.ts +14 -0
- package/dist/modules/analytics.module.d.ts.map +1 -0
- package/dist/modules/analytics.module.js +24 -0
- package/dist/modules/analytics.module.js.map +1 -0
- package/dist/modules/auth.module.d.ts +18 -0
- package/dist/modules/auth.module.d.ts.map +1 -0
- package/dist/modules/auth.module.js +113 -0
- package/dist/modules/auth.module.js.map +1 -0
- package/dist/modules/content-plans.module.d.ts +58 -0
- package/dist/modules/content-plans.module.d.ts.map +1 -0
- package/dist/modules/content-plans.module.js +125 -0
- package/dist/modules/content-plans.module.js.map +1 -0
- package/dist/modules/customers.module.d.ts +12 -0
- package/dist/modules/customers.module.d.ts.map +1 -0
- package/dist/modules/customers.module.js +43 -0
- package/dist/modules/customers.module.js.map +1 -0
- package/dist/modules/notifications.module.d.ts +20 -0
- package/dist/modules/notifications.module.d.ts.map +1 -0
- package/dist/modules/notifications.module.js +37 -0
- package/dist/modules/notifications.module.js.map +1 -0
- package/dist/modules/orgs.module.d.ts +23 -0
- package/dist/modules/orgs.module.d.ts.map +1 -0
- package/dist/modules/orgs.module.js +112 -0
- package/dist/modules/orgs.module.js.map +1 -0
- package/dist/modules/projects.module.d.ts +26 -0
- package/dist/modules/projects.module.d.ts.map +1 -0
- package/dist/modules/projects.module.js +88 -0
- package/dist/modules/projects.module.js.map +1 -0
- package/dist/modules/scheduling.module.d.ts +13 -0
- package/dist/modules/scheduling.module.d.ts.map +1 -0
- package/dist/modules/scheduling.module.js +32 -0
- package/dist/modules/scheduling.module.js.map +1 -0
- package/dist/modules/storage.module.d.ts +36 -0
- package/dist/modules/storage.module.d.ts.map +1 -0
- package/dist/modules/storage.module.js +100 -0
- package/dist/modules/storage.module.js.map +1 -0
- package/dist/modules/subscriptions.module.d.ts +25 -0
- package/dist/modules/subscriptions.module.d.ts.map +1 -0
- package/dist/modules/subscriptions.module.js +62 -0
- package/dist/modules/subscriptions.module.js.map +1 -0
- package/dist/types/account.types.d.ts +17 -0
- package/dist/types/account.types.d.ts.map +1 -0
- package/dist/types/account.types.js +3 -0
- package/dist/types/account.types.js.map +1 -0
- package/dist/types/analytics.types.d.ts +15 -0
- package/dist/types/analytics.types.d.ts.map +1 -0
- package/dist/types/analytics.types.js +3 -0
- package/dist/types/analytics.types.js.map +1 -0
- package/dist/types/api.types.d.ts +20 -0
- package/dist/types/api.types.d.ts.map +1 -0
- package/dist/types/api.types.js +3 -0
- package/dist/types/api.types.js.map +1 -0
- package/dist/types/auth.types.d.ts +40 -0
- package/dist/types/auth.types.d.ts.map +1 -0
- package/dist/types/auth.types.js +3 -0
- package/dist/types/auth.types.js.map +1 -0
- package/dist/types/content-plan.types.d.ts +27 -0
- package/dist/types/content-plan.types.d.ts.map +1 -0
- package/dist/types/content-plan.types.js +3 -0
- package/dist/types/content-plan.types.js.map +1 -0
- package/dist/types/customer.types.d.ts +25 -0
- package/dist/types/customer.types.d.ts.map +1 -0
- package/dist/types/customer.types.js +3 -0
- package/dist/types/customer.types.js.map +1 -0
- package/dist/types/index.d.ts +585 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +6 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/notification.types.d.ts +11 -0
- package/dist/types/notification.types.d.ts.map +1 -0
- package/dist/types/notification.types.js +3 -0
- package/dist/types/notification.types.js.map +1 -0
- package/dist/types/org.types.d.ts +25 -0
- package/dist/types/org.types.d.ts.map +1 -0
- package/dist/types/org.types.js +3 -0
- package/dist/types/org.types.js.map +1 -0
- package/dist/types/project.types.d.ts +20 -0
- package/dist/types/project.types.d.ts.map +1 -0
- package/dist/types/project.types.js +3 -0
- package/dist/types/project.types.js.map +1 -0
- package/dist/types/scheduling.types.d.ts +31 -0
- package/dist/types/scheduling.types.d.ts.map +1 -0
- package/dist/types/scheduling.types.js +3 -0
- package/dist/types/scheduling.types.js.map +1 -0
- package/dist/types/storage.types.d.ts +8 -0
- package/dist/types/storage.types.d.ts.map +1 -0
- package/dist/types/storage.types.js +3 -0
- package/dist/types/storage.types.js.map +1 -0
- package/dist/types/subscription.types.d.ts +19 -0
- package/dist/types/subscription.types.d.ts.map +1 -0
- package/dist/types/subscription.types.js +3 -0
- package/dist/types/subscription.types.js.map +1 -0
- package/package.json +27 -0
- package/src/auth/storage.ts +75 -0
- package/src/auth/token-manager.ts +107 -0
- package/src/client.ts +51 -0
- package/src/http/errors.ts +97 -0
- package/src/http/http-client.ts +263 -0
- package/src/http/types.ts +32 -0
- package/src/index.ts +17 -0
- package/src/modules/accounts.module.ts +61 -0
- package/src/modules/analytics.module.ts +26 -0
- package/src/modules/auth.module.ts +129 -0
- package/src/modules/content-plans.module.ts +170 -0
- package/src/modules/customers.module.ts +48 -0
- package/src/modules/notifications.module.ts +41 -0
- package/src/modules/orgs.module.ts +122 -0
- package/src/modules/projects.module.ts +97 -0
- package/src/modules/scheduling.module.ts +35 -0
- package/src/modules/storage.module.ts +121 -0
- package/src/modules/subscriptions.module.ts +82 -0
- package/src/types/account.types.ts +17 -0
- package/src/types/analytics.types.ts +15 -0
- package/src/types/api.types.ts +21 -0
- package/src/types/auth.types.ts +45 -0
- package/src/types/content-plan.types.ts +28 -0
- package/src/types/customer.types.ts +25 -0
- package/src/types/index.ts +682 -0
- package/src/types/notification.types.ts +10 -0
- package/src/types/org.types.ts +27 -0
- package/src/types/project.types.ts +21 -0
- package/src/types/scheduling.types.ts +32 -0
- package/src/types/storage.types.ts +7 -0
- package/src/types/subscription.types.ts +19 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { StorageAdapter } from "../http/types";
|
|
2
|
+
export declare class MemoryStorageAdapter implements StorageAdapter {
|
|
3
|
+
private store;
|
|
4
|
+
getItem(key: string): string | null;
|
|
5
|
+
setItem(key: string, value: string): void;
|
|
6
|
+
removeItem(key: string): void;
|
|
7
|
+
}
|
|
8
|
+
export declare class LocalStorageAdapter implements StorageAdapter {
|
|
9
|
+
getItem(key: string): string | null;
|
|
10
|
+
setItem(key: string, value: string): void;
|
|
11
|
+
removeItem(key: string): void;
|
|
12
|
+
}
|
|
13
|
+
export declare class SessionStorageAdapter implements StorageAdapter {
|
|
14
|
+
getItem(key: string): string | null;
|
|
15
|
+
setItem(key: string, value: string): void;
|
|
16
|
+
removeItem(key: string): void;
|
|
17
|
+
}
|
|
18
|
+
export declare class CustomStorageAdapter implements StorageAdapter {
|
|
19
|
+
private readonly storage;
|
|
20
|
+
constructor(storage: StorageAdapter);
|
|
21
|
+
getItem(key: string): Promise<string | null>;
|
|
22
|
+
setItem(key: string, value: string): Promise<void>;
|
|
23
|
+
removeItem(key: string): Promise<void>;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/auth/storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,qBAAa,oBAAqB,YAAW,cAAc;IACzD,OAAO,CAAC,KAAK,CAAkC;IAE/C,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,qBAAa,mBAAoB,YAAW,cAAc;IACxD,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAOnC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAMzC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;CAK9B;AAED,qBAAa,qBAAsB,YAAW,cAAc;IAC1D,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAOnC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAMzC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;CAK9B;AAED,qBAAa,oBAAqB,YAAW,cAAc;IAC7C,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,cAAc;IAE9C,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAI5C,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlD,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAG7C"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CustomStorageAdapter = exports.SessionStorageAdapter = exports.LocalStorageAdapter = exports.MemoryStorageAdapter = void 0;
|
|
4
|
+
class MemoryStorageAdapter {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.store = new Map();
|
|
7
|
+
}
|
|
8
|
+
getItem(key) {
|
|
9
|
+
return this.store.get(key) ?? null;
|
|
10
|
+
}
|
|
11
|
+
setItem(key, value) {
|
|
12
|
+
this.store.set(key, value);
|
|
13
|
+
}
|
|
14
|
+
removeItem(key) {
|
|
15
|
+
this.store.delete(key);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
exports.MemoryStorageAdapter = MemoryStorageAdapter;
|
|
19
|
+
class LocalStorageAdapter {
|
|
20
|
+
getItem(key) {
|
|
21
|
+
if (typeof window !== "undefined" && window.localStorage) {
|
|
22
|
+
return window.localStorage.getItem(key);
|
|
23
|
+
}
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
setItem(key, value) {
|
|
27
|
+
if (typeof window !== "undefined" && window.localStorage) {
|
|
28
|
+
window.localStorage.setItem(key, value);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
removeItem(key) {
|
|
32
|
+
if (typeof window !== "undefined" && window.localStorage) {
|
|
33
|
+
window.localStorage.removeItem(key);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
exports.LocalStorageAdapter = LocalStorageAdapter;
|
|
38
|
+
class SessionStorageAdapter {
|
|
39
|
+
getItem(key) {
|
|
40
|
+
if (typeof window !== "undefined" && window.sessionStorage) {
|
|
41
|
+
return window.sessionStorage.getItem(key);
|
|
42
|
+
}
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
setItem(key, value) {
|
|
46
|
+
if (typeof window !== "undefined" && window.sessionStorage) {
|
|
47
|
+
window.sessionStorage.setItem(key, value);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
removeItem(key) {
|
|
51
|
+
if (typeof window !== "undefined" && window.sessionStorage) {
|
|
52
|
+
window.sessionStorage.removeItem(key);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
exports.SessionStorageAdapter = SessionStorageAdapter;
|
|
57
|
+
class CustomStorageAdapter {
|
|
58
|
+
constructor(storage) {
|
|
59
|
+
this.storage = storage;
|
|
60
|
+
}
|
|
61
|
+
async getItem(key) {
|
|
62
|
+
return await this.storage.getItem(key);
|
|
63
|
+
}
|
|
64
|
+
async setItem(key, value) {
|
|
65
|
+
await this.storage.setItem(key, value);
|
|
66
|
+
}
|
|
67
|
+
async removeItem(key) {
|
|
68
|
+
await this.storage.removeItem(key);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
exports.CustomStorageAdapter = CustomStorageAdapter;
|
|
72
|
+
//# sourceMappingURL=storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/auth/storage.ts"],"names":[],"mappings":";;;AAEA,MAAa,oBAAoB;IAAjC;QACU,UAAK,GAAwB,IAAI,GAAG,EAAE,CAAC;IAajD,CAAC;IAXC,OAAO,CAAC,GAAW;QACjB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;IACrC,CAAC;IAED,OAAO,CAAC,GAAW,EAAE,KAAa;QAChC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,UAAU,CAAC,GAAW;QACpB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;CACF;AAdD,oDAcC;AAED,MAAa,mBAAmB;IAC9B,OAAO,CAAC,GAAW;QACjB,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YACzD,OAAO,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CAAC,GAAW,EAAE,KAAa;QAChC,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YACzD,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,UAAU,CAAC,GAAW;QACpB,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YACzD,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;CACF;AAnBD,kDAmBC;AAED,MAAa,qBAAqB;IAChC,OAAO,CAAC,GAAW;QACjB,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;YAC3D,OAAO,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CAAC,GAAW,EAAE,KAAa;QAChC,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;YAC3D,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,UAAU,CAAC,GAAW;QACpB,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;YAC3D,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;CACF;AAnBD,sDAmBC;AAED,MAAa,oBAAoB;IAC/B,YAA6B,OAAuB;QAAvB,YAAO,GAAP,OAAO,CAAgB;IAAG,CAAC;IAExD,KAAK,CAAC,OAAO,CAAC,GAAW;QACvB,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,KAAa;QACtC,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,GAAW;QAC1B,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACrC,CAAC;CACF;AAdD,oDAcC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { StorageAdapter } from "../http/types";
|
|
2
|
+
export interface TokenPair {
|
|
3
|
+
accessToken: string;
|
|
4
|
+
refreshToken?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare class TokenManager {
|
|
7
|
+
private readonly storage;
|
|
8
|
+
private readonly onUnauthenticated?;
|
|
9
|
+
private readonly REFRESH_TOKEN_KEY;
|
|
10
|
+
private readonly USER_KEY;
|
|
11
|
+
private memoryAccessToken;
|
|
12
|
+
private memoryRefreshToken;
|
|
13
|
+
private refreshPromise;
|
|
14
|
+
constructor(storage?: StorageAdapter, onUnauthenticated?: (() => void) | undefined);
|
|
15
|
+
/**
|
|
16
|
+
* Returns the short-lived access token strictly from memory.
|
|
17
|
+
* Access tokens are NEVER stored in persistent browser/disk storage to prevent XSS exfiltration.
|
|
18
|
+
*/
|
|
19
|
+
getAccessToken(): Promise<string | null>;
|
|
20
|
+
/**
|
|
21
|
+
* Returns the refresh token from memory or secure storage for session restoration.
|
|
22
|
+
*/
|
|
23
|
+
getRefreshToken(): Promise<string | null>;
|
|
24
|
+
/**
|
|
25
|
+
* Sets access token in memory and persists refresh token securely.
|
|
26
|
+
*/
|
|
27
|
+
setTokens(accessToken: string, refreshToken?: string): Promise<void>;
|
|
28
|
+
setUser(user: any): Promise<void>;
|
|
29
|
+
getUser<T = any>(): Promise<T | null>;
|
|
30
|
+
/**
|
|
31
|
+
* Clears in-memory tokens and persistent session keys.
|
|
32
|
+
*/
|
|
33
|
+
clearTokens(): Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* Manages single-flight refresh queue without race conditions.
|
|
36
|
+
*/
|
|
37
|
+
handleRefresh(refreshFn: (refreshToken?: string) => Promise<TokenPair>): Promise<TokenPair | null>;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=token-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-manager.d.ts","sourceRoot":"","sources":["../../src/auth/token-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAG/C,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,YAAY;IASrB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IATrC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAwB;IAC1D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuB;IAEhD,OAAO,CAAC,iBAAiB,CAAuB;IAChD,OAAO,CAAC,kBAAkB,CAAuB;IACjD,OAAO,CAAC,cAAc,CAA0C;gBAG7C,OAAO,GAAE,cAA2C,EACpD,iBAAiB,CAAC,GAAE,MAAM,IAAI,aAAA;IAGjD;;;OAGG;IACU,cAAc,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAIrD;;OAEG;IACU,eAAe,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAStD;;OAEG;IACU,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQpE,OAAO,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAQjC,OAAO,CAAC,CAAC,GAAG,GAAG,KAAK,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAUlD;;OAEG;IACU,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAOzC;;OAEG;IACU,aAAa,CAAC,SAAS,EAAE,CAAC,YAAY,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;CAuBhH"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TokenManager = void 0;
|
|
4
|
+
const storage_1 = require("./storage");
|
|
5
|
+
class TokenManager {
|
|
6
|
+
constructor(storage = new storage_1.MemoryStorageAdapter(), onUnauthenticated) {
|
|
7
|
+
this.storage = storage;
|
|
8
|
+
this.onUnauthenticated = onUnauthenticated;
|
|
9
|
+
this.REFRESH_TOKEN_KEY = "addn_refresh_token";
|
|
10
|
+
this.USER_KEY = "addn_current_user";
|
|
11
|
+
this.memoryAccessToken = null;
|
|
12
|
+
this.memoryRefreshToken = null;
|
|
13
|
+
this.refreshPromise = null;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Returns the short-lived access token strictly from memory.
|
|
17
|
+
* Access tokens are NEVER stored in persistent browser/disk storage to prevent XSS exfiltration.
|
|
18
|
+
*/
|
|
19
|
+
async getAccessToken() {
|
|
20
|
+
return this.memoryAccessToken;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Returns the refresh token from memory or secure storage for session restoration.
|
|
24
|
+
*/
|
|
25
|
+
async getRefreshToken() {
|
|
26
|
+
if (this.memoryRefreshToken) {
|
|
27
|
+
return this.memoryRefreshToken;
|
|
28
|
+
}
|
|
29
|
+
const stored = await this.storage.getItem(this.REFRESH_TOKEN_KEY);
|
|
30
|
+
this.memoryRefreshToken = stored;
|
|
31
|
+
return stored;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Sets access token in memory and persists refresh token securely.
|
|
35
|
+
*/
|
|
36
|
+
async setTokens(accessToken, refreshToken) {
|
|
37
|
+
this.memoryAccessToken = accessToken;
|
|
38
|
+
if (refreshToken) {
|
|
39
|
+
this.memoryRefreshToken = refreshToken;
|
|
40
|
+
await this.storage.setItem(this.REFRESH_TOKEN_KEY, refreshToken);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
async setUser(user) {
|
|
44
|
+
if (user) {
|
|
45
|
+
await this.storage.setItem(this.USER_KEY, JSON.stringify(user));
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
await this.storage.removeItem(this.USER_KEY);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
async getUser() {
|
|
52
|
+
const raw = await this.storage.getItem(this.USER_KEY);
|
|
53
|
+
if (!raw)
|
|
54
|
+
return null;
|
|
55
|
+
try {
|
|
56
|
+
return JSON.parse(raw);
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Clears in-memory tokens and persistent session keys.
|
|
64
|
+
*/
|
|
65
|
+
async clearTokens() {
|
|
66
|
+
this.memoryAccessToken = null;
|
|
67
|
+
this.memoryRefreshToken = null;
|
|
68
|
+
await this.storage.removeItem(this.REFRESH_TOKEN_KEY);
|
|
69
|
+
await this.storage.removeItem(this.USER_KEY);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Manages single-flight refresh queue without race conditions.
|
|
73
|
+
*/
|
|
74
|
+
async handleRefresh(refreshFn) {
|
|
75
|
+
if (this.refreshPromise) {
|
|
76
|
+
return this.refreshPromise;
|
|
77
|
+
}
|
|
78
|
+
const currentRefreshToken = await this.getRefreshToken();
|
|
79
|
+
this.refreshPromise = (async () => {
|
|
80
|
+
try {
|
|
81
|
+
const newTokens = await refreshFn(currentRefreshToken || undefined);
|
|
82
|
+
await this.setTokens(newTokens.accessToken, newTokens.refreshToken);
|
|
83
|
+
return newTokens;
|
|
84
|
+
}
|
|
85
|
+
catch (err) {
|
|
86
|
+
await this.clearTokens();
|
|
87
|
+
this.onUnauthenticated?.();
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
finally {
|
|
91
|
+
this.refreshPromise = null;
|
|
92
|
+
}
|
|
93
|
+
})();
|
|
94
|
+
return this.refreshPromise;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
exports.TokenManager = TokenManager;
|
|
98
|
+
//# sourceMappingURL=token-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-manager.js","sourceRoot":"","sources":["../../src/auth/token-manager.ts"],"names":[],"mappings":"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"}
|
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { HttpClient } from "./http/http-client";
|
|
2
|
+
import { AddnClientOptions } from "./http/types";
|
|
3
|
+
import { AuthModule } from "./modules/auth.module";
|
|
4
|
+
import { OrgsModule } from "./modules/orgs.module";
|
|
5
|
+
import { CustomersModule } from "./modules/customers.module";
|
|
6
|
+
import { ProjectsModule } from "./modules/projects.module";
|
|
7
|
+
import { ContentPlansModule } from "./modules/content-plans.module";
|
|
8
|
+
import { SchedulingModule } from "./modules/scheduling.module";
|
|
9
|
+
import { AccountsModule } from "./modules/accounts.module";
|
|
10
|
+
import { AnalyticsModule } from "./modules/analytics.module";
|
|
11
|
+
import { NotificationsModule } from "./modules/notifications.module";
|
|
12
|
+
import { StorageModule } from "./modules/storage.module";
|
|
13
|
+
import { SubscriptionsModule } from "./modules/subscriptions.module";
|
|
14
|
+
export declare class AddnClient {
|
|
15
|
+
readonly http: HttpClient;
|
|
16
|
+
readonly auth: AuthModule;
|
|
17
|
+
readonly orgs: OrgsModule;
|
|
18
|
+
readonly customers: CustomersModule;
|
|
19
|
+
readonly projects: ProjectsModule;
|
|
20
|
+
readonly contentPlans: ContentPlansModule;
|
|
21
|
+
readonly scheduling: SchedulingModule;
|
|
22
|
+
readonly accounts: AccountsModule;
|
|
23
|
+
readonly analytics: AnalyticsModule;
|
|
24
|
+
readonly notifications: NotificationsModule;
|
|
25
|
+
readonly storage: StorageModule;
|
|
26
|
+
readonly subscriptions: SubscriptionsModule;
|
|
27
|
+
constructor(options: AddnClientOptions);
|
|
28
|
+
setTokens(accessToken: string, refreshToken: string): Promise<void>;
|
|
29
|
+
clearTokens(): Promise<void>;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAErE,qBAAa,UAAU;IACrB,SAAgB,IAAI,EAAE,UAAU,CAAC;IACjC,SAAgB,IAAI,EAAE,UAAU,CAAC;IACjC,SAAgB,IAAI,EAAE,UAAU,CAAC;IACjC,SAAgB,SAAS,EAAE,eAAe,CAAC;IAC3C,SAAgB,QAAQ,EAAE,cAAc,CAAC;IACzC,SAAgB,YAAY,EAAE,kBAAkB,CAAC;IACjD,SAAgB,UAAU,EAAE,gBAAgB,CAAC;IAC7C,SAAgB,QAAQ,EAAE,cAAc,CAAC;IACzC,SAAgB,SAAS,EAAE,eAAe,CAAC;IAC3C,SAAgB,aAAa,EAAE,mBAAmB,CAAC;IACnD,SAAgB,OAAO,EAAE,aAAa,CAAC;IACvC,SAAgB,aAAa,EAAE,mBAAmB,CAAC;gBAEvC,OAAO,EAAE,iBAAiB;IAezB,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAInE,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;CAG1C"}
|
package/dist/client.js
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AddnClient = void 0;
|
|
4
|
+
const http_client_1 = require("./http/http-client");
|
|
5
|
+
const auth_module_1 = require("./modules/auth.module");
|
|
6
|
+
const orgs_module_1 = require("./modules/orgs.module");
|
|
7
|
+
const customers_module_1 = require("./modules/customers.module");
|
|
8
|
+
const projects_module_1 = require("./modules/projects.module");
|
|
9
|
+
const content_plans_module_1 = require("./modules/content-plans.module");
|
|
10
|
+
const scheduling_module_1 = require("./modules/scheduling.module");
|
|
11
|
+
const accounts_module_1 = require("./modules/accounts.module");
|
|
12
|
+
const analytics_module_1 = require("./modules/analytics.module");
|
|
13
|
+
const notifications_module_1 = require("./modules/notifications.module");
|
|
14
|
+
const storage_module_1 = require("./modules/storage.module");
|
|
15
|
+
const subscriptions_module_1 = require("./modules/subscriptions.module");
|
|
16
|
+
class AddnClient {
|
|
17
|
+
constructor(options) {
|
|
18
|
+
this.http = new http_client_1.HttpClient(options);
|
|
19
|
+
this.auth = new auth_module_1.AuthModule(this.http);
|
|
20
|
+
this.orgs = new orgs_module_1.OrgsModule(this.http);
|
|
21
|
+
this.customers = new customers_module_1.CustomersModule(this.http);
|
|
22
|
+
this.projects = new projects_module_1.ProjectsModule(this.http);
|
|
23
|
+
this.contentPlans = new content_plans_module_1.ContentPlansModule(this.http);
|
|
24
|
+
this.scheduling = new scheduling_module_1.SchedulingModule(this.http);
|
|
25
|
+
this.accounts = new accounts_module_1.AccountsModule(this.http);
|
|
26
|
+
this.analytics = new analytics_module_1.AnalyticsModule(this.http);
|
|
27
|
+
this.notifications = new notifications_module_1.NotificationsModule(this.http);
|
|
28
|
+
this.storage = new storage_module_1.StorageModule(this.http);
|
|
29
|
+
this.subscriptions = new subscriptions_module_1.SubscriptionsModule(this.http);
|
|
30
|
+
}
|
|
31
|
+
async setTokens(accessToken, refreshToken) {
|
|
32
|
+
await this.http.tokenManager.setTokens(accessToken, refreshToken);
|
|
33
|
+
}
|
|
34
|
+
async clearTokens() {
|
|
35
|
+
await this.http.tokenManager.clearTokens();
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
exports.AddnClient = AddnClient;
|
|
39
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":";;;AAAA,oDAAgD;AAEhD,uDAAmD;AACnD,uDAAmD;AACnD,iEAA6D;AAC7D,+DAA2D;AAC3D,yEAAoE;AACpE,mEAA+D;AAC/D,+DAA2D;AAC3D,iEAA6D;AAC7D,yEAAqE;AACrE,6DAAyD;AACzD,yEAAqE;AAErE,MAAa,UAAU;IAcrB,YAAY,OAA0B;QACpC,IAAI,CAAC,IAAI,GAAG,IAAI,wBAAU,CAAC,OAAO,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,GAAG,IAAI,wBAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI,GAAG,IAAI,wBAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,SAAS,GAAG,IAAI,kCAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,CAAC,QAAQ,GAAG,IAAI,gCAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC,YAAY,GAAG,IAAI,yCAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtD,IAAI,CAAC,UAAU,GAAG,IAAI,oCAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,CAAC,QAAQ,GAAG,IAAI,gCAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC,SAAS,GAAG,IAAI,kCAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,CAAC,aAAa,GAAG,IAAI,0CAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxD,IAAI,CAAC,OAAO,GAAG,IAAI,8BAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,CAAC,aAAa,GAAG,IAAI,0CAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1D,CAAC;IAEM,KAAK,CAAC,SAAS,CAAC,WAAmB,EAAE,YAAoB;QAC9D,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IACpE,CAAC;IAEM,KAAK,CAAC,WAAW;QACtB,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;IAC7C,CAAC;CACF;AApCD,gCAoCC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { ValidationErrorDetail } from "../types";
|
|
2
|
+
export declare abstract class AddnError extends Error {
|
|
3
|
+
readonly cause?: unknown | undefined;
|
|
4
|
+
abstract readonly code: string;
|
|
5
|
+
constructor(message: string, cause?: unknown | undefined);
|
|
6
|
+
}
|
|
7
|
+
export declare class AddnNetworkError extends AddnError {
|
|
8
|
+
readonly code = "NETWORK_ERROR";
|
|
9
|
+
constructor(message?: string, cause?: unknown);
|
|
10
|
+
}
|
|
11
|
+
export declare class AddnTimeoutError extends AddnError {
|
|
12
|
+
readonly timeoutMs: number;
|
|
13
|
+
readonly code = "REQUEST_TIMEOUT";
|
|
14
|
+
constructor(timeoutMs: number, message?: string);
|
|
15
|
+
}
|
|
16
|
+
export declare class AddnApiError extends AddnError {
|
|
17
|
+
readonly statusCode: number;
|
|
18
|
+
readonly errorCode: string;
|
|
19
|
+
readonly details: unknown;
|
|
20
|
+
readonly rawResponse?: unknown | undefined;
|
|
21
|
+
readonly code: string;
|
|
22
|
+
constructor(message: string, statusCode: number, errorCode?: string, details?: unknown, rawResponse?: unknown | undefined);
|
|
23
|
+
}
|
|
24
|
+
export declare class AddnAuthError extends AddnApiError {
|
|
25
|
+
constructor(message?: string, statusCode?: number, errorCode?: string, details?: unknown);
|
|
26
|
+
}
|
|
27
|
+
export declare class AddnForbiddenError extends AddnApiError {
|
|
28
|
+
constructor(message?: string, statusCode?: number, errorCode?: string, details?: unknown);
|
|
29
|
+
}
|
|
30
|
+
export declare class AddnNotFoundError extends AddnApiError {
|
|
31
|
+
constructor(message?: string, statusCode?: number, errorCode?: string, details?: unknown);
|
|
32
|
+
}
|
|
33
|
+
export declare class AddnConflictError extends AddnApiError {
|
|
34
|
+
constructor(message?: string, statusCode?: number, errorCode?: string, details?: unknown);
|
|
35
|
+
}
|
|
36
|
+
export declare class AddnValidationError extends AddnApiError {
|
|
37
|
+
readonly validationDetails: ValidationErrorDetail[];
|
|
38
|
+
constructor(message?: string, details?: ValidationErrorDetail[], rawResponse?: unknown);
|
|
39
|
+
}
|
|
40
|
+
export declare class AddnRateLimitError extends AddnApiError {
|
|
41
|
+
readonly retryAfterSeconds?: number | undefined;
|
|
42
|
+
constructor(message?: string, retryAfterSeconds?: number | undefined);
|
|
43
|
+
}
|
|
44
|
+
export declare class AddnServerError extends AddnApiError {
|
|
45
|
+
constructor(message?: string, statusCode?: number, errorCode?: string, details?: unknown);
|
|
46
|
+
}
|
|
47
|
+
export declare class AddnUnexpectedError extends AddnError {
|
|
48
|
+
readonly code = "UNEXPECTED_ERROR";
|
|
49
|
+
constructor(message?: string, cause?: unknown);
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/http/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAEjD,8BAAsB,SAAU,SAAQ,KAAK;aAGE,KAAK,CAAC,EAAE,OAAO;IAF5D,kBAAyB,IAAI,EAAE,MAAM,CAAC;gBAE1B,OAAO,EAAE,MAAM,EAAkB,KAAK,CAAC,EAAE,OAAO,YAAA;CAO7D;AAED,qBAAa,gBAAiB,SAAQ,SAAS;IAC7C,SAAgB,IAAI,mBAAmB;gBAE3B,OAAO,GAAE,MAAmF,EAAE,KAAK,CAAC,EAAE,OAAO;CAG1H;AAED,qBAAa,gBAAiB,SAAQ,SAAS;aAGjB,SAAS,EAAE,MAAM;IAF7C,SAAgB,IAAI,qBAAqB;gBAEb,SAAS,EAAE,MAAM,EAAE,OAAO,GAAE,MAAiD;CAG1G;AAED,qBAAa,YAAa,SAAQ,SAAS;aAKvB,UAAU,EAAE,MAAM;aAClB,SAAS,EAAE,MAAM;aACjB,OAAO,EAAE,OAAO;aAChB,WAAW,CAAC,EAAE,OAAO;IAPvC,SAAgB,IAAI,EAAE,MAAM,CAAC;gBAG3B,OAAO,EAAE,MAAM,EACC,UAAU,EAAE,MAAM,EAClB,SAAS,GAAE,MAAoB,EAC/B,OAAO,GAAE,OAAc,EACvB,WAAW,CAAC,EAAE,OAAO,YAAA;CAKxC;AAED,qBAAa,aAAc,SAAQ,YAAY;gBACjC,OAAO,GAAE,MAAkD,EAAE,UAAU,GAAE,MAAY,EAAE,SAAS,GAAE,MAAgC,EAAE,OAAO,CAAC,EAAE,OAAO;CAGlK;AAED,qBAAa,kBAAmB,SAAQ,YAAY;gBACtC,OAAO,GAAE,MAA6D,EAAE,UAAU,GAAE,MAAY,EAAE,SAAS,GAAE,MAA4B,EAAE,OAAO,CAAC,EAAE,OAAO;CAGzK;AAED,qBAAa,iBAAkB,SAAQ,YAAY;gBACrC,OAAO,GAAE,MAAqD,EAAE,UAAU,GAAE,MAAY,EAAE,SAAS,GAAE,MAA6B,EAAE,OAAO,CAAC,EAAE,OAAO;CAGlK;AAED,qBAAa,iBAAkB,SAAQ,YAAY;gBACrC,OAAO,GAAE,MAAwC,EAAE,UAAU,GAAE,MAAY,EAAE,SAAS,GAAE,MAA6B,EAAE,OAAO,CAAC,EAAE,OAAO;CAGrJ;AAED,qBAAa,mBAAoB,SAAQ,YAAY;IACnD,SAAgB,iBAAiB,EAAE,qBAAqB,EAAE,CAAC;gBAE/C,OAAO,GAAE,MAA6B,EAAE,OAAO,GAAE,qBAAqB,EAAO,EAAE,WAAW,CAAC,EAAE,OAAO;CAIjH;AAED,qBAAa,kBAAmB,SAAQ,YAAY;aAC0C,iBAAiB,CAAC,EAAE,MAAM;gBAA1G,OAAO,GAAE,MAAqD,EAAkB,iBAAiB,CAAC,EAAE,MAAM,YAAA;CAGvH;AAED,qBAAa,eAAgB,SAAQ,YAAY;gBACnC,OAAO,GAAE,MAAqE,EAAE,UAAU,GAAE,MAAY,EAAE,SAAS,GAAE,MAAgC,EAAE,OAAO,CAAC,EAAE,OAAO;CAGrL;AAED,qBAAa,mBAAoB,SAAQ,SAAS;IAChD,SAAgB,IAAI,sBAAsB;gBAE9B,OAAO,GAAE,MAAuE,EAAE,KAAK,CAAC,EAAE,OAAO;CAG9G"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AddnUnexpectedError = exports.AddnServerError = exports.AddnRateLimitError = exports.AddnValidationError = exports.AddnConflictError = exports.AddnNotFoundError = exports.AddnForbiddenError = exports.AddnAuthError = exports.AddnApiError = exports.AddnTimeoutError = exports.AddnNetworkError = exports.AddnError = void 0;
|
|
4
|
+
class AddnError extends Error {
|
|
5
|
+
constructor(message, cause) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.cause = cause;
|
|
8
|
+
Object.setPrototypeOf(this, new.target.prototype);
|
|
9
|
+
if (Error.captureStackTrace) {
|
|
10
|
+
Error.captureStackTrace(this, this.constructor);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
exports.AddnError = AddnError;
|
|
15
|
+
class AddnNetworkError extends AddnError {
|
|
16
|
+
constructor(message = "Unable to connect to ADDN server. Please check your internet connection.", cause) {
|
|
17
|
+
super(message, cause);
|
|
18
|
+
this.code = "NETWORK_ERROR";
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.AddnNetworkError = AddnNetworkError;
|
|
22
|
+
class AddnTimeoutError extends AddnError {
|
|
23
|
+
constructor(timeoutMs, message = `Request timed out after ${timeoutMs}ms`) {
|
|
24
|
+
super(message);
|
|
25
|
+
this.timeoutMs = timeoutMs;
|
|
26
|
+
this.code = "REQUEST_TIMEOUT";
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
exports.AddnTimeoutError = AddnTimeoutError;
|
|
30
|
+
class AddnApiError extends AddnError {
|
|
31
|
+
constructor(message, statusCode, errorCode = "API_ERROR", details = null, rawResponse) {
|
|
32
|
+
super(message);
|
|
33
|
+
this.statusCode = statusCode;
|
|
34
|
+
this.errorCode = errorCode;
|
|
35
|
+
this.details = details;
|
|
36
|
+
this.rawResponse = rawResponse;
|
|
37
|
+
this.code = errorCode;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
exports.AddnApiError = AddnApiError;
|
|
41
|
+
class AddnAuthError extends AddnApiError {
|
|
42
|
+
constructor(message = "Authentication failed or token expired.", statusCode = 401, errorCode = "AUTHENTICATION_FAILED", details) {
|
|
43
|
+
super(message, statusCode, errorCode, details);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
exports.AddnAuthError = AddnAuthError;
|
|
47
|
+
class AddnForbiddenError extends AddnApiError {
|
|
48
|
+
constructor(message = "You do not have permission to perform this action.", statusCode = 403, errorCode = "PERMISSION_DENIED", details) {
|
|
49
|
+
super(message, statusCode, errorCode, details);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
exports.AddnForbiddenError = AddnForbiddenError;
|
|
53
|
+
class AddnNotFoundError extends AddnApiError {
|
|
54
|
+
constructor(message = "The requested resource could not be found.", statusCode = 404, errorCode = "RESOURCE_NOT_FOUND", details) {
|
|
55
|
+
super(message, statusCode, errorCode, details);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
exports.AddnNotFoundError = AddnNotFoundError;
|
|
59
|
+
class AddnConflictError extends AddnApiError {
|
|
60
|
+
constructor(message = "A resource conflict occurred.", statusCode = 409, errorCode = "DUPLICATE_RESOURCE", details) {
|
|
61
|
+
super(message, statusCode, errorCode, details);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
exports.AddnConflictError = AddnConflictError;
|
|
65
|
+
class AddnValidationError extends AddnApiError {
|
|
66
|
+
constructor(message = "Validation failed.", details = [], rawResponse) {
|
|
67
|
+
super(message, 422, "VALIDATION_ERROR", details, rawResponse);
|
|
68
|
+
this.validationDetails = details;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
exports.AddnValidationError = AddnValidationError;
|
|
72
|
+
class AddnRateLimitError extends AddnApiError {
|
|
73
|
+
constructor(message = "Too many requests. Please try again later.", retryAfterSeconds) {
|
|
74
|
+
super(message, 429, "RATE_LIMITED", { retryAfterSeconds });
|
|
75
|
+
this.retryAfterSeconds = retryAfterSeconds;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
exports.AddnRateLimitError = AddnRateLimitError;
|
|
79
|
+
class AddnServerError extends AddnApiError {
|
|
80
|
+
constructor(message = "An internal server error occurred. Please try again later.", statusCode = 500, errorCode = "INTERNAL_SERVER_ERROR", details) {
|
|
81
|
+
super(message, statusCode, errorCode, details);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
exports.AddnServerError = AddnServerError;
|
|
85
|
+
class AddnUnexpectedError extends AddnError {
|
|
86
|
+
constructor(message = "An unexpected error occurred processing the server response.", cause) {
|
|
87
|
+
super(message, cause);
|
|
88
|
+
this.code = "UNEXPECTED_ERROR";
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
exports.AddnUnexpectedError = AddnUnexpectedError;
|
|
92
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/http/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { AddnClientOptions, HttpRequestOptions } from "./types";
|
|
2
|
+
import { TokenManager } from "../auth/token-manager";
|
|
3
|
+
export declare class HttpClient {
|
|
4
|
+
private readonly baseUrl;
|
|
5
|
+
private readonly timeoutMs;
|
|
6
|
+
readonly tokenManager: TokenManager;
|
|
7
|
+
private readonly onRequest?;
|
|
8
|
+
private readonly onError?;
|
|
9
|
+
private readonly onUnauthenticated?;
|
|
10
|
+
constructor(options: AddnClientOptions);
|
|
11
|
+
request<T = any>(options: HttpRequestOptions): Promise<T>;
|
|
12
|
+
private executeRequest;
|
|
13
|
+
private parseResponse;
|
|
14
|
+
private rawRefreshTokenCall;
|
|
15
|
+
private buildUrl;
|
|
16
|
+
private handleErrorTrigger;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=http-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../../src/http/http-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAgBhE,OAAO,EAAE,YAAY,EAAa,MAAM,uBAAuB,CAAC;AAGhE,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,SAAgB,YAAY,EAAE,YAAY,CAAC;IAC3C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAiC;IAC5D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAA+B;IACxD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAyC;gBAEhE,OAAO,EAAE,iBAAiB;IAWzB,OAAO,CAAC,CAAC,GAAG,GAAG,EAAE,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC;YAoCxD,cAAc;YA2Dd,aAAa;YA8Eb,mBAAmB;IA0BjC,OAAO,CAAC,QAAQ;IAgBhB,OAAO,CAAC,kBAAkB;CAS3B"}
|