@babelforce/manager-sdk 0.38.0 → 0.40.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +19 -0
- package/README.md +7 -3
- package/dist/index.d.ts +995 -67
- package/dist/index.js +92 -3
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -3,6 +3,29 @@ import { createClient, createConfig, urlSearchParamsBodySerializer, formDataBody
|
|
|
3
3
|
// src/client.ts
|
|
4
4
|
|
|
5
5
|
// src/auth.ts
|
|
6
|
+
function base64url(bytes) {
|
|
7
|
+
let bin = "";
|
|
8
|
+
for (const b of bytes) bin += String.fromCharCode(b);
|
|
9
|
+
return btoa(bin).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
|
|
10
|
+
}
|
|
11
|
+
async function pkceChallenge() {
|
|
12
|
+
const codeVerifier = base64url(crypto.getRandomValues(new Uint8Array(32)));
|
|
13
|
+
const digest = await crypto.subtle.digest("SHA-256", new TextEncoder().encode(codeVerifier));
|
|
14
|
+
return { codeVerifier, codeChallenge: base64url(new Uint8Array(digest)), codeChallengeMethod: "S256" };
|
|
15
|
+
}
|
|
16
|
+
function buildAuthorizeUrl(opts) {
|
|
17
|
+
const base = opts.baseUrl.replace(/\/+$/, "");
|
|
18
|
+
const params = new URLSearchParams({
|
|
19
|
+
response_type: "code",
|
|
20
|
+
client_id: opts.clientId,
|
|
21
|
+
redirect_uri: opts.redirectUri,
|
|
22
|
+
scope: opts.scope,
|
|
23
|
+
code_challenge: opts.codeChallenge,
|
|
24
|
+
code_challenge_method: opts.codeChallengeMethod ?? "S256"
|
|
25
|
+
});
|
|
26
|
+
if (opts.state !== void 0) params.set("state", opts.state);
|
|
27
|
+
return `${base}/oauth/authorize?${params.toString()}`;
|
|
28
|
+
}
|
|
6
29
|
async function passwordGrant(opts) {
|
|
7
30
|
const base = opts.baseUrl.replace(/\/+$/, "");
|
|
8
31
|
const body = new URLSearchParams({
|
|
@@ -42,18 +65,71 @@ async function clientCredentialsGrant(opts) {
|
|
|
42
65
|
}
|
|
43
66
|
return json;
|
|
44
67
|
}
|
|
68
|
+
async function authorizationCodeGrant(opts) {
|
|
69
|
+
const base = opts.baseUrl.replace(/\/+$/, "");
|
|
70
|
+
const body = new URLSearchParams({
|
|
71
|
+
grant_type: "authorization_code",
|
|
72
|
+
code: opts.code,
|
|
73
|
+
redirect_uri: opts.redirectUri,
|
|
74
|
+
client_id: opts.clientId,
|
|
75
|
+
code_verifier: opts.codeVerifier
|
|
76
|
+
});
|
|
77
|
+
if (opts.clientSecret !== void 0) body.set("client_secret", opts.clientSecret);
|
|
78
|
+
const doFetch = opts.fetch ?? fetch;
|
|
79
|
+
const resp = await doFetch(`${base}/oauth/token`, {
|
|
80
|
+
method: "POST",
|
|
81
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
82
|
+
body
|
|
83
|
+
});
|
|
84
|
+
const json = await resp.json().catch(() => ({}));
|
|
85
|
+
if (!resp.ok || !json.access_token) {
|
|
86
|
+
throw new Error(`authorization_code grant failed (status ${resp.status})`);
|
|
87
|
+
}
|
|
88
|
+
return json;
|
|
89
|
+
}
|
|
90
|
+
async function refreshTokenGrant(opts) {
|
|
91
|
+
const base = opts.baseUrl.replace(/\/+$/, "");
|
|
92
|
+
const body = new URLSearchParams({
|
|
93
|
+
grant_type: "refresh_token",
|
|
94
|
+
refresh_token: opts.refreshToken
|
|
95
|
+
});
|
|
96
|
+
if (opts.clientId !== void 0) body.set("client_id", opts.clientId);
|
|
97
|
+
if (opts.clientSecret !== void 0) body.set("client_secret", opts.clientSecret);
|
|
98
|
+
const doFetch = opts.fetch ?? fetch;
|
|
99
|
+
const resp = await doFetch(`${base}/oauth/token`, {
|
|
100
|
+
method: "POST",
|
|
101
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
102
|
+
body
|
|
103
|
+
});
|
|
104
|
+
const json = await resp.json().catch(() => ({}));
|
|
105
|
+
if (!resp.ok || !json.access_token) {
|
|
106
|
+
throw new Error(`refresh_token grant failed (status ${resp.status})`);
|
|
107
|
+
}
|
|
108
|
+
return json;
|
|
109
|
+
}
|
|
45
110
|
var TokenManager = class {
|
|
46
|
-
constructor(grant) {
|
|
111
|
+
constructor(grant, initialRefresh) {
|
|
47
112
|
this.grant = grant;
|
|
113
|
+
this.refreshToken = initialRefresh;
|
|
48
114
|
}
|
|
49
115
|
grant;
|
|
50
116
|
token;
|
|
51
117
|
expiresAt = 0;
|
|
118
|
+
refreshToken;
|
|
119
|
+
inflight;
|
|
52
120
|
async get() {
|
|
53
121
|
if (this.token && Date.now() < this.expiresAt - 3e4) return this.token;
|
|
54
|
-
|
|
122
|
+
if (this.inflight) return this.inflight;
|
|
123
|
+
this.inflight = this.fetchToken().finally(() => {
|
|
124
|
+
this.inflight = void 0;
|
|
125
|
+
});
|
|
126
|
+
return this.inflight;
|
|
127
|
+
}
|
|
128
|
+
async fetchToken() {
|
|
129
|
+
const tok = await this.grant(this.refreshToken);
|
|
55
130
|
this.token = tok.access_token;
|
|
56
131
|
this.expiresAt = Date.now() + (tok.expires_in ? tok.expires_in * 1e3 : 36e5);
|
|
132
|
+
if (tok.refresh_token) this.refreshToken = tok.refresh_token;
|
|
57
133
|
return this.token;
|
|
58
134
|
}
|
|
59
135
|
};
|
|
@@ -71,6 +147,19 @@ function buildAuthConfig(auth, baseUrl, fetchImpl) {
|
|
|
71
147
|
);
|
|
72
148
|
return { auth: (scheme) => scheme.scheme === "bearer" ? tokens.get() : void 0 };
|
|
73
149
|
}
|
|
150
|
+
case "refreshToken": {
|
|
151
|
+
const tokens = new TokenManager(
|
|
152
|
+
(current) => refreshTokenGrant({
|
|
153
|
+
baseUrl,
|
|
154
|
+
refreshToken: current ?? auth.refreshToken,
|
|
155
|
+
clientId: auth.clientId,
|
|
156
|
+
clientSecret: auth.clientSecret,
|
|
157
|
+
fetch: fetchImpl
|
|
158
|
+
}),
|
|
159
|
+
auth.refreshToken
|
|
160
|
+
);
|
|
161
|
+
return { auth: (scheme) => scheme.scheme === "bearer" ? tokens.get() : void 0 };
|
|
162
|
+
}
|
|
74
163
|
}
|
|
75
164
|
}
|
|
76
165
|
|
|
@@ -8560,4 +8649,4 @@ var ManagerClient = class _ManagerClient {
|
|
|
8560
8649
|
}
|
|
8561
8650
|
};
|
|
8562
8651
|
|
|
8563
|
-
export { AgentGroupsResource, AgentsResource, AppActionsResource, ApplicationsResource, AuthResource, AutomationsResource, BabeldeskResource, BabeldeskWidgetsResource, BusinessHoursResource, CalendarsResource, CallsResource, CampaignsResource, ConferencesResource, ConversationsResource, DEFAULT_BASE_URL, DashboardsResource, DialerBehavioursResource, DialerResource, EventsResource, ExpressionsResource, FilesResource, IntegrationsResource, LogsResource, ManagerApiError, ManagerClient, MeResource, MetricsResource, NumbersResource, OutboundResource, PhonebookResource, PromptsResource, QueueSelectionsResource, QueuesResource, RecordingsResource, ReportingResource, RoutingResource, SessionsResource, SettingAccessor, SettingsResource, SmsResource, SystemResource, TaskMetricsResource, TaskSchedulesResource, TaskScriptsResource, TaskSecretsResource, TaskSelectionConfigResource, TasksResource, TriggersResource, UsersResource, passwordGrant, withRetry };
|
|
8652
|
+
export { AgentGroupsResource, AgentsResource, AppActionsResource, ApplicationsResource, AuthResource, AutomationsResource, BabeldeskResource, BabeldeskWidgetsResource, BusinessHoursResource, CalendarsResource, CallsResource, CampaignsResource, ConferencesResource, ConversationsResource, DEFAULT_BASE_URL, DashboardsResource, DialerBehavioursResource, DialerResource, EventsResource, ExpressionsResource, FilesResource, IntegrationsResource, LogsResource, ManagerApiError, ManagerClient, MeResource, MetricsResource, NumbersResource, OutboundResource, PhonebookResource, PromptsResource, QueueSelectionsResource, QueuesResource, RecordingsResource, ReportingResource, RoutingResource, SessionsResource, SettingAccessor, SettingsResource, SmsResource, SystemResource, TaskMetricsResource, TaskSchedulesResource, TaskScriptsResource, TaskSecretsResource, TaskSelectionConfigResource, TasksResource, TriggersResource, UsersResource, authorizationCodeGrant, buildAuthorizeUrl, clientCredentialsGrant, passwordGrant, pkceChallenge, refreshTokenGrant, withRetry };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@babelforce/manager-sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.40.0",
|
|
4
4
|
"description": "TypeScript SDK for the babelforce manager APIs — auth, user & agent management, call reporting, metrics, and task automations.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|