lansenger-sdk-ts 1.0.1 → 1.1.1
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.d.ts +16 -0
- package/dist/auth.js +90 -1
- package/dist/chats.js +5 -5
- package/dist/client.d.ts +3 -0
- package/dist/client.js +22 -1
- package/dist/constants.d.ts +1 -1
- package/dist/constants.js +11 -11
- package/dist/index.d.ts +1 -1
- package/dist/index.js +5 -4
- package/dist/oauth.js +3 -1
- package/package.json +1 -1
package/dist/auth.d.ts
CHANGED
|
@@ -11,3 +11,19 @@ export declare class TokenManager {
|
|
|
11
11
|
getToken(): Promise<string>;
|
|
12
12
|
invalidate(): void;
|
|
13
13
|
}
|
|
14
|
+
export declare class UserTokenManager {
|
|
15
|
+
private config;
|
|
16
|
+
private fetchFn;
|
|
17
|
+
private appTokenManager;
|
|
18
|
+
private store;
|
|
19
|
+
private userToken;
|
|
20
|
+
private refreshToken;
|
|
21
|
+
private userTokenExpiry;
|
|
22
|
+
private staffId;
|
|
23
|
+
constructor(config: LansengerConfig, fetchFn: FetchFn, appTokenManager: TokenManager, store?: CredentialStore | null);
|
|
24
|
+
getToken(): Promise<string>;
|
|
25
|
+
setTokens(userToken: string, refreshToken: string, expiresIn?: number, staffId?: string): void;
|
|
26
|
+
get staff_id(): string | null;
|
|
27
|
+
get refresh_token(): string | null;
|
|
28
|
+
invalidate(): void;
|
|
29
|
+
}
|
package/dist/auth.js
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.TokenManager = void 0;
|
|
3
|
+
exports.UserTokenManager = exports.TokenManager = void 0;
|
|
4
4
|
const constants_1 = require("./constants");
|
|
5
5
|
const exceptions_1 = require("./exceptions");
|
|
6
|
+
const urlHelpers_1 = require("./urlHelpers");
|
|
6
7
|
const TOKEN_REFRESH_MARGIN = 300;
|
|
8
|
+
const USER_TOKEN_REFRESH_MARGIN = 300;
|
|
7
9
|
class TokenManager {
|
|
8
10
|
constructor(config, fetchFn, store) {
|
|
9
11
|
this.token = null;
|
|
@@ -67,4 +69,91 @@ class TokenManager {
|
|
|
67
69
|
}
|
|
68
70
|
}
|
|
69
71
|
exports.TokenManager = TokenManager;
|
|
72
|
+
class UserTokenManager {
|
|
73
|
+
constructor(config, fetchFn, appTokenManager, store) {
|
|
74
|
+
this.userToken = null;
|
|
75
|
+
this.refreshToken = null;
|
|
76
|
+
this.userTokenExpiry = 0;
|
|
77
|
+
this.staffId = null;
|
|
78
|
+
this.config = config;
|
|
79
|
+
this.fetchFn = fetchFn;
|
|
80
|
+
this.appTokenManager = appTokenManager;
|
|
81
|
+
this.store = store || null;
|
|
82
|
+
if (this.store) {
|
|
83
|
+
const cached = this.store.loadUserToken();
|
|
84
|
+
const ut = cached.user_token || "";
|
|
85
|
+
const rt = cached.refresh_token || "";
|
|
86
|
+
const expiry = cached.user_token_expiry || 0;
|
|
87
|
+
if (ut && expiry > Date.now() / 1000) {
|
|
88
|
+
this.userToken = ut;
|
|
89
|
+
this.refreshToken = rt;
|
|
90
|
+
this.userTokenExpiry = expiry;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
async getToken() {
|
|
95
|
+
const now = Math.floor(Date.now() / 1000);
|
|
96
|
+
if (this.userToken && now < this.userTokenExpiry) {
|
|
97
|
+
return this.userToken;
|
|
98
|
+
}
|
|
99
|
+
if (!this.refreshToken) {
|
|
100
|
+
throw new exceptions_1.LansengerAuthError("No userToken available and no refreshToken for auto-refresh. " +
|
|
101
|
+
"Run OAuth2 authorize flow: build_authorize_url → exchange_code.");
|
|
102
|
+
}
|
|
103
|
+
const appToken = await this.appTokenManager.getToken();
|
|
104
|
+
let url = (0, urlHelpers_1.buildApiUrl)(this.config, "oauth2", "refresh_token_create", appToken)
|
|
105
|
+
+ `&grant_type=refresh_token&refresh_token=${encodeURIComponent(this.refreshToken)}`;
|
|
106
|
+
try {
|
|
107
|
+
const response = await this.fetchFn(url);
|
|
108
|
+
if (!response.ok) {
|
|
109
|
+
throw new exceptions_1.LansengerNetworkError(`userToken refresh failed: HTTP ${response.status}`);
|
|
110
|
+
}
|
|
111
|
+
const data = await response.json();
|
|
112
|
+
const errCode = data.errCode ?? -1;
|
|
113
|
+
if (errCode !== 0) {
|
|
114
|
+
const msg = data.errMsg || "Unknown refresh error";
|
|
115
|
+
throw new exceptions_1.LansengerAuthError(`userToken refresh error (errCode=${errCode}): ${msg}`, errCode);
|
|
116
|
+
}
|
|
117
|
+
const tokenData = data.data || {};
|
|
118
|
+
this.userToken = tokenData.userToken;
|
|
119
|
+
const expiresIn = tokenData.expiresIn || 7200;
|
|
120
|
+
this.refreshToken = tokenData.refreshToken;
|
|
121
|
+
this.staffId = tokenData.staffId;
|
|
122
|
+
this.userTokenExpiry = Math.floor(Date.now() / 1000) + expiresIn - USER_TOKEN_REFRESH_MARGIN;
|
|
123
|
+
if (!this.userToken) {
|
|
124
|
+
throw new exceptions_1.LansengerAuthError("Refresh response missing userToken field");
|
|
125
|
+
}
|
|
126
|
+
if (this.store) {
|
|
127
|
+
this.store.saveUserToken(this.userToken, this.refreshToken || "", expiresIn);
|
|
128
|
+
}
|
|
129
|
+
return this.userToken;
|
|
130
|
+
}
|
|
131
|
+
catch (e) {
|
|
132
|
+
if (e instanceof exceptions_1.LansengerAuthError || e instanceof exceptions_1.LansengerNetworkError)
|
|
133
|
+
throw e;
|
|
134
|
+
throw new exceptions_1.LansengerNetworkError(`userToken refresh failed: ${e instanceof Error ? e.message : String(e)}`);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
setTokens(userToken, refreshToken, expiresIn = 7200, staffId = "") {
|
|
138
|
+
this.userToken = userToken;
|
|
139
|
+
this.refreshToken = refreshToken;
|
|
140
|
+
this.userTokenExpiry = Math.floor(Date.now() / 1000) + expiresIn - USER_TOKEN_REFRESH_MARGIN;
|
|
141
|
+
if (staffId)
|
|
142
|
+
this.staffId = staffId;
|
|
143
|
+
if (this.store) {
|
|
144
|
+
this.store.saveUserToken(userToken, refreshToken, expiresIn);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
get staff_id() {
|
|
148
|
+
return this.staffId;
|
|
149
|
+
}
|
|
150
|
+
get refresh_token() {
|
|
151
|
+
return this.refreshToken;
|
|
152
|
+
}
|
|
153
|
+
invalidate() {
|
|
154
|
+
this.userToken = null;
|
|
155
|
+
this.userTokenExpiry = 0;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
exports.UserTokenManager = UserTokenManager;
|
|
70
159
|
//# sourceMappingURL=auth.js.map
|
package/dist/chats.js
CHANGED
|
@@ -9,13 +9,13 @@ async function fetchChatList(config, appToken, opts) {
|
|
|
9
9
|
const userToken = opts?.user_token || "";
|
|
10
10
|
const url = (0, urlHelpers_1.buildApiUrl)(config, "chats", "fetch", appToken, { userToken });
|
|
11
11
|
const payload = {};
|
|
12
|
-
if (opts?.chat_type)
|
|
12
|
+
if (opts?.chat_type != null)
|
|
13
13
|
payload.chatType = opts.chat_type;
|
|
14
14
|
if (opts?.keyword)
|
|
15
15
|
payload.keyword = opts.keyword;
|
|
16
|
-
if (opts?.start_time)
|
|
16
|
+
if (opts?.start_time != null)
|
|
17
17
|
payload.startTime = opts.start_time;
|
|
18
|
-
if (opts?.end_time)
|
|
18
|
+
if (opts?.end_time != null)
|
|
19
19
|
payload.endTime = opts.end_time;
|
|
20
20
|
const [data, httpErr] = await (0, http_1.doPost)(url, payload, opts?.fetchFn);
|
|
21
21
|
if (httpErr)
|
|
@@ -54,9 +54,9 @@ async function fetchChatMessages(config, appToken, opts) {
|
|
|
54
54
|
payload.staffId = opts.staff_id;
|
|
55
55
|
if (opts?.group_id)
|
|
56
56
|
payload.groupId = opts.group_id;
|
|
57
|
-
if (opts?.start_time)
|
|
57
|
+
if (opts?.start_time != null)
|
|
58
58
|
payload.startTime = opts.start_time;
|
|
59
|
-
if (opts?.end_time)
|
|
59
|
+
if (opts?.end_time != null)
|
|
60
60
|
payload.endTime = opts.end_time;
|
|
61
61
|
if (opts?.sender_id)
|
|
62
62
|
payload.senderId = opts.sender_id;
|
package/dist/client.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ export declare class LansengerClient {
|
|
|
6
6
|
private _config;
|
|
7
7
|
private _fetchFn;
|
|
8
8
|
private _tokenManager;
|
|
9
|
+
private _userTokenManager;
|
|
9
10
|
private _store;
|
|
10
11
|
constructor(appId: string, appSecret: string, apiGatewayUrl?: string, passportUrl?: string, httpTimeout?: number, storePath?: string, encodingKey?: string, callbackToken?: string);
|
|
11
12
|
static fromEnv(storePath?: string): LansengerClient;
|
|
@@ -15,6 +16,8 @@ export declare class LansengerClient {
|
|
|
15
16
|
private _ensureInit;
|
|
16
17
|
getToken(): Promise<string>;
|
|
17
18
|
invalidateToken(): void;
|
|
19
|
+
getUserToken(): Promise<string>;
|
|
20
|
+
setUserTokens(userToken: string, refreshToken: string, expiresIn?: number, staffId?: string): void;
|
|
18
21
|
healthCheck(): Promise<boolean>;
|
|
19
22
|
private _privateMsgUrl;
|
|
20
23
|
private _groupMsgUrl;
|
package/dist/client.js
CHANGED
|
@@ -70,6 +70,7 @@ class LansengerClient {
|
|
|
70
70
|
constructor(appId, appSecret, apiGatewayUrl = "https://open.e.lanxin.cn/open/apigw", passportUrl = "", httpTimeout = 30, storePath, encodingKey = "", callbackToken = "") {
|
|
71
71
|
this._fetchFn = undefined;
|
|
72
72
|
this._tokenManager = null;
|
|
73
|
+
this._userTokenManager = null;
|
|
73
74
|
this._store = null;
|
|
74
75
|
this._config = new config_1.LansengerConfig(appId, appSecret, apiGatewayUrl, passportUrl, httpTimeout, encodingKey, callbackToken);
|
|
75
76
|
if (storePath) {
|
|
@@ -99,6 +100,9 @@ class LansengerClient {
|
|
|
99
100
|
if (!this._tokenManager) {
|
|
100
101
|
this._tokenManager = new auth_1.TokenManager(this._config, this._fetchFn, this._store);
|
|
101
102
|
}
|
|
103
|
+
if (!this._userTokenManager) {
|
|
104
|
+
this._userTokenManager = new auth_1.UserTokenManager(this._config, this._fetchFn, this._tokenManager, this._store);
|
|
105
|
+
}
|
|
102
106
|
}
|
|
103
107
|
async getToken() {
|
|
104
108
|
await this._ensureInit();
|
|
@@ -108,6 +112,16 @@ class LansengerClient {
|
|
|
108
112
|
if (this._tokenManager)
|
|
109
113
|
this._tokenManager.invalidate();
|
|
110
114
|
}
|
|
115
|
+
async getUserToken() {
|
|
116
|
+
await this._ensureInit();
|
|
117
|
+
return this._userTokenManager.getToken();
|
|
118
|
+
}
|
|
119
|
+
setUserTokens(userToken, refreshToken, expiresIn = 7200, staffId = "") {
|
|
120
|
+
if (!this._userTokenManager) {
|
|
121
|
+
throw new exceptions_1.LansengerConfigError("Client not initialized. Call a method first or use fromStore/fromEnv.");
|
|
122
|
+
}
|
|
123
|
+
this._userTokenManager.setTokens(userToken, refreshToken, expiresIn, staffId);
|
|
124
|
+
}
|
|
111
125
|
async healthCheck() {
|
|
112
126
|
try {
|
|
113
127
|
await this.getToken();
|
|
@@ -415,7 +429,14 @@ class LansengerClient {
|
|
|
415
429
|
async exchangeCode(code, opts) {
|
|
416
430
|
await this._ensureInit();
|
|
417
431
|
const token = await this._tokenManager.getToken();
|
|
418
|
-
|
|
432
|
+
const result = await (0, oauth_1.exchangeCodeForUserToken)(this._config, token, code, { redirect_uri: opts?.redirect_uri, fetchFn: this._fetchFn });
|
|
433
|
+
if (result.success) {
|
|
434
|
+
if (this._store) {
|
|
435
|
+
this._store.saveUserToken(result.user_token || "", result.refresh_token || "", result.expires_in);
|
|
436
|
+
}
|
|
437
|
+
this._userTokenManager.setTokens(result.user_token || "", result.refresh_token || "", result.expires_in, result.staff_id || "");
|
|
438
|
+
}
|
|
439
|
+
return result;
|
|
419
440
|
}
|
|
420
441
|
async refreshUserToken(refreshToken, opts) {
|
|
421
442
|
await this._ensureInit();
|
package/dist/constants.d.ts
CHANGED
|
@@ -27,4 +27,4 @@ export declare const REMINDER_TYPE_PHONE = 3;
|
|
|
27
27
|
export declare const CALLBACK_EVENT_TYPES: Record<string, string>;
|
|
28
28
|
export declare function guessMediaType(filePath: string): number;
|
|
29
29
|
export declare function guessAppMediaType(filePath: string): string;
|
|
30
|
-
export declare const VERSION = "1.
|
|
30
|
+
export declare const VERSION = "1.1.0";
|
package/dist/constants.js
CHANGED
|
@@ -139,31 +139,31 @@ exports.REMINDER_TYPE_POPUP = 1;
|
|
|
139
139
|
exports.REMINDER_TYPE_SMS = 2;
|
|
140
140
|
exports.REMINDER_TYPE_PHONE = 3;
|
|
141
141
|
exports.CALLBACK_EVENT_TYPES = {
|
|
142
|
+
account_message: "public_account",
|
|
142
143
|
account_subscribe: "public_account",
|
|
143
144
|
account_unsubscribe: "public_account",
|
|
144
|
-
account_message: "public_account",
|
|
145
145
|
staff_info: "staff",
|
|
146
146
|
staff_modify: "staff",
|
|
147
147
|
staff_create: "staff",
|
|
148
148
|
staff_delete: "staff",
|
|
149
|
-
telephone_track: "telephone_track",
|
|
150
|
-
dept_create: "department",
|
|
151
149
|
dept_modify: "department",
|
|
150
|
+
dept_create: "department",
|
|
152
151
|
dept_delete: "department",
|
|
153
152
|
tag_member: "tag",
|
|
154
|
-
app_install_org: "
|
|
155
|
-
app_uninstall_org: "
|
|
153
|
+
app_install_org: "app",
|
|
154
|
+
app_uninstall_org: "app",
|
|
156
155
|
bot_private_message: "bot",
|
|
157
156
|
bot_group_message: "bot",
|
|
158
157
|
group_create_approve: "group",
|
|
159
|
-
|
|
160
|
-
|
|
158
|
+
telephone_track: "notification",
|
|
159
|
+
ua_cert_create: "certificate",
|
|
160
|
+
ua_cert_delete: "certificate",
|
|
161
161
|
report_location: "location",
|
|
162
|
-
user_logout: "
|
|
162
|
+
user_logout: "auth",
|
|
163
163
|
data_scope: "data_scope",
|
|
164
164
|
wb_visible_config: "workbench",
|
|
165
|
-
schedule_modify: "
|
|
166
|
-
schedule_delete: "
|
|
165
|
+
schedule_modify: "calendar",
|
|
166
|
+
schedule_delete: "calendar",
|
|
167
167
|
};
|
|
168
168
|
function guessMediaType(filePath) {
|
|
169
169
|
const ext = filePath.substring(filePath.lastIndexOf(".")).toLowerCase();
|
|
@@ -183,5 +183,5 @@ function guessAppMediaType(filePath) {
|
|
|
183
183
|
return exports.APP_MEDIA_TYPE_AUDIO;
|
|
184
184
|
return exports.APP_MEDIA_TYPE_FILE;
|
|
185
185
|
}
|
|
186
|
-
exports.VERSION = "1.
|
|
186
|
+
exports.VERSION = "1.1.0";
|
|
187
187
|
//# sourceMappingURL=constants.js.map
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { LansengerClient } from "./client";
|
|
2
2
|
export { LansengerConfig } from "./config";
|
|
3
|
-
export { TokenManager } from "./auth";
|
|
3
|
+
export { TokenManager, UserTokenManager } from "./auth";
|
|
4
4
|
export { CredentialStore } from "./persistence";
|
|
5
5
|
export { FetchFn, doGet, doPost, doPostMultipart, parseApiResponse } from "./http";
|
|
6
6
|
export { buildApiUrl } from "./urlHelpers";
|
package/dist/index.js
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
exports.
|
|
5
|
-
exports.
|
|
6
|
-
exports.CallbackEvent = exports.getCallbackEventTypes = exports.decryptCallbackPayload = exports.verifyCallbackSignature = exports.parseCallbackPayload = exports.fetchChatMessages = exports.fetchChatList = exports.sendGroupMessage = void 0;
|
|
3
|
+
exports.StaffIdMappingResult = exports.DepartmentAncestorsResult = exports.StaffDetailResult = exports.StaffBasicInfoResult = exports.SendMessageResult = exports.LansengerFileError = exports.LansengerNetworkError = exports.LansengerAPIError = exports.LansengerConfigError = exports.LansengerAuthError = exports.LansengerError = exports.VERSION = exports.guessAppMediaType = exports.guessMediaType = exports.CALLBACK_EVENT_TYPES = exports.REMINDER_TYPE_PHONE = exports.REMINDER_TYPE_SMS = exports.REMINDER_TYPE_POPUP = exports.REMINDER_TYPE_NONE = exports.TODO_TYPE_APPROVAL = exports.TODO_TYPE_NOTIFICATION = exports.TODO_TODO_STATUS_DONE = exports.TODO_TODO_STATUS_PENDING_DO = exports.TODO_TODO_STATUS_READ = exports.TODO_TODO_STATUS_PENDING_READ = exports.TOKEN_REFRESH_MARGIN = exports.MAX_MESSAGE_LENGTH = exports.AUDIO_EXTENSIONS = exports.VIDEO_EXTENSIONS = exports.IMAGE_EXTENSIONS = exports.APP_MEDIA_TYPE_AUDIO = exports.APP_MEDIA_TYPE_IMAGE = exports.APP_MEDIA_TYPE_VIDEO = exports.APP_MEDIA_TYPE_FILE = exports.MEDIA_TYPE_FILE = exports.MEDIA_TYPE_IMAGE = exports.MEDIA_TYPE_VIDEO = exports.OAUTH2_SCOPES = exports.OAUTH2_SCOPE_BASIC_USER_INFO = exports.API_ENDPOINTS = exports.buildApiUrl = exports.parseApiResponse = exports.doPostMultipart = exports.doPost = exports.doGet = exports.CredentialStore = exports.UserTokenManager = exports.TokenManager = exports.LansengerConfig = exports.LansengerClient = void 0;
|
|
4
|
+
exports.fetchOrgExtraFieldIds = exports.fetchStaffIdMapping = exports.fetchDepartmentAncestors = exports.fetchStaffDetail = exports.fetchStaffBasicInfo = exports.ChatMessagesResult = exports.ChatMessageInfo = exports.ChatListResult = exports.ChatGroupInfo = exports.ChatStaffInfo = exports.ScheduleAttendeeMetaResult = exports.ScheduleAttendeesResult = exports.ScheduleListResult = exports.ScheduleUpdateResult = exports.ScheduleInfoResult = exports.ScheduleCreateResult = exports.CalendarPrimaryResult = exports.TodoTaskExecutorListResult = exports.TodoTaskStatusCountResult = exports.TodoTaskListResult = exports.TodoTaskInfoResult = exports.TodoTaskCreateResult = exports.DepartmentStaffsResult = exports.DepartmentChildrenResult = exports.DepartmentDetailResult = exports.IsInGroupResult = exports.GroupListResult = exports.UpdateGroupMembersResult = exports.UpdateGroupResult = exports.GroupMemberResult = exports.GroupInfoResult = exports.CreateGroupResult = exports.GroupCreateInfo = exports.StreamMessageResult = exports.BotMessageResult = exports.UserMessageResult = exports.AccountMessageResult = exports.UserInfoResult = exports.UserTokenResult = exports.DynamicCardUpdateParams = exports.OaCardParams = exports.LinkCardParams = exports.AppCardParams = exports.MediaPathResult = exports.DownloadMediaResult = exports.UploadMediaResult = exports.QueryGroupsResult = exports.StaffSearchResult = exports.ExtraFieldIdsResult = exports.OrgInfoResult = void 0;
|
|
5
|
+
exports.sendAccountMessage = exports.fetchMediaPath = exports.downloadMediaToFile = exports.downloadMedia = exports.uploadAppMedia = exports.uploadMedia = exports.sendReminder = exports.fetchExecutorList = exports.deleteExecutors = exports.addExecutors = exports.updateExecutorStatus = exports.fetchTodoTaskStatusCounts = exports.fetchTodoTaskById = exports.fetchTodoTaskBySourceId = exports.fetchTodoTaskList = exports.deleteTodoTask = exports.updateTodoTaskStatus = exports.updateTodoTask = exports.createTodoTask = exports.updateScheduleAttendeeMeta = exports.deleteScheduleAttendees = exports.addScheduleAttendees = exports.fetchScheduleAttendees = exports.fetchScheduleList = exports.updateSchedule = exports.deleteSchedule = exports.fetchSchedule = exports.createSchedule = exports.fetchPrimaryCalendar = exports.fetchStreamMessage = exports.createStreamMessage = exports.fetchUserInfo = exports.validateCallbackState = exports.parseAuthorizeCallback = exports.refreshUserToken = exports.exchangeCodeForUserToken = exports.buildAuthorizeUrl = exports.dismissGroup = exports.updateGroupMembers = exports.updateGroupInfo = exports.checkIsInGroup = exports.fetchGroupList = exports.fetchGroupMembers = exports.fetchGroupInfo = exports.createGroup = exports.fetchDepartmentStaffs = exports.fetchDepartmentChildren = exports.fetchDepartmentDetail = exports.fetchOrgInfo = exports.searchStaff = void 0;
|
|
6
|
+
exports.CallbackEvent = exports.getCallbackEventTypes = exports.decryptCallbackPayload = exports.verifyCallbackSignature = exports.parseCallbackPayload = exports.fetchChatMessages = exports.fetchChatList = exports.sendGroupMessage = exports.sendUserMessage = void 0;
|
|
7
7
|
var client_1 = require("./client");
|
|
8
8
|
Object.defineProperty(exports, "LansengerClient", { enumerable: true, get: function () { return client_1.LansengerClient; } });
|
|
9
9
|
var config_1 = require("./config");
|
|
10
10
|
Object.defineProperty(exports, "LansengerConfig", { enumerable: true, get: function () { return config_1.LansengerConfig; } });
|
|
11
11
|
var auth_1 = require("./auth");
|
|
12
12
|
Object.defineProperty(exports, "TokenManager", { enumerable: true, get: function () { return auth_1.TokenManager; } });
|
|
13
|
+
Object.defineProperty(exports, "UserTokenManager", { enumerable: true, get: function () { return auth_1.UserTokenManager; } });
|
|
13
14
|
var persistence_1 = require("./persistence");
|
|
14
15
|
Object.defineProperty(exports, "CredentialStore", { enumerable: true, get: function () { return persistence_1.CredentialStore; } });
|
|
15
16
|
var http_1 = require("./http");
|
package/dist/oauth.js
CHANGED
|
@@ -87,7 +87,9 @@ function parseAuthorizeCallback(queryString) {
|
|
|
87
87
|
params = {};
|
|
88
88
|
for (const part of queryString.replace(/^\?/, "").split("&")) {
|
|
89
89
|
if (part.includes("=")) {
|
|
90
|
-
const
|
|
90
|
+
const eqIdx = part.indexOf("=");
|
|
91
|
+
const key = part.substring(0, eqIdx);
|
|
92
|
+
const value = part.substring(eqIdx + 1);
|
|
91
93
|
params[key] = value || "";
|
|
92
94
|
}
|
|
93
95
|
}
|