lansenger-sdk-ts 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.
Files changed (57) hide show
  1. package/LICENSE +21 -0
  2. package/README.fr.md +501 -0
  3. package/README.md +504 -0
  4. package/README.zhHans.md +501 -0
  5. package/README.zhHant.md +501 -0
  6. package/README.zhHantHK.md +501 -0
  7. package/dist/accountMessages.d.ts +12 -0
  8. package/dist/accountMessages.js +41 -0
  9. package/dist/auth.d.ts +13 -0
  10. package/dist/auth.js +70 -0
  11. package/dist/calendars.d.ts +84 -0
  12. package/dist/calendars.js +278 -0
  13. package/dist/callbacks.d.ts +384 -0
  14. package/dist/callbacks.js +712 -0
  15. package/dist/chats.d.ts +22 -0
  16. package/dist/chats.js +88 -0
  17. package/dist/client.d.ts +439 -0
  18. package/dist/client.js +712 -0
  19. package/dist/config.d.ts +14 -0
  20. package/dist/config.js +42 -0
  21. package/dist/constants.d.ts +30 -0
  22. package/dist/constants.js +187 -0
  23. package/dist/contacts.d.ts +38 -0
  24. package/dist/contacts.js +161 -0
  25. package/dist/departments.d.ts +18 -0
  26. package/dist/departments.js +69 -0
  27. package/dist/exceptions.d.ts +20 -0
  28. package/dist/exceptions.js +42 -0
  29. package/dist/groupMessages.d.ts +11 -0
  30. package/dist/groupMessages.js +39 -0
  31. package/dist/groups.d.ts +66 -0
  32. package/dist/groups.js +218 -0
  33. package/dist/http.d.ts +7 -0
  34. package/dist/http.js +67 -0
  35. package/dist/index.d.ts +24 -0
  36. package/dist/index.js +189 -0
  37. package/dist/media.d.ts +16 -0
  38. package/dist/media.js +178 -0
  39. package/dist/models.d.ts +925 -0
  40. package/dist/models.js +991 -0
  41. package/dist/oauth.d.ts +17 -0
  42. package/dist/oauth.js +107 -0
  43. package/dist/persistence.d.ts +26 -0
  44. package/dist/persistence.js +210 -0
  45. package/dist/reminders.d.ts +10 -0
  46. package/dist/reminders.js +31 -0
  47. package/dist/streaming.d.ts +9 -0
  48. package/dist/streaming.js +40 -0
  49. package/dist/todos.d.ts +75 -0
  50. package/dist/todos.js +282 -0
  51. package/dist/urlHelpers.d.ts +7 -0
  52. package/dist/urlHelpers.js +22 -0
  53. package/dist/userMessages.d.ts +8 -0
  54. package/dist/userMessages.js +34 -0
  55. package/dist/users.d.ts +6 -0
  56. package/dist/users.js +32 -0
  57. package/package.json +33 -0
@@ -0,0 +1,17 @@
1
+ import { LansengerConfig } from "./config";
2
+ import { FetchFn } from "./http";
3
+ import { UserTokenResult } from "./models";
4
+ export declare function buildAuthorizeUrl(config: LansengerConfig, redirectUri: string, opts?: {
5
+ scope?: string | string[];
6
+ state?: string;
7
+ }): string;
8
+ export declare function exchangeCodeForUserToken(config: LansengerConfig, appToken: string, code: string, opts?: {
9
+ redirect_uri?: string;
10
+ fetchFn?: FetchFn;
11
+ }): Promise<UserTokenResult>;
12
+ export declare function refreshUserToken(config: LansengerConfig, appToken: string, refreshToken: string, opts?: {
13
+ scope?: string;
14
+ fetchFn?: FetchFn;
15
+ }): Promise<UserTokenResult>;
16
+ export declare function parseAuthorizeCallback(queryString: string | Record<string, string>): Record<string, string>;
17
+ export declare function validateCallbackState(callbackState: string, expectedState: string): boolean;
package/dist/oauth.js ADDED
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildAuthorizeUrl = buildAuthorizeUrl;
4
+ exports.exchangeCodeForUserToken = exchangeCodeForUserToken;
5
+ exports.refreshUserToken = refreshUserToken;
6
+ exports.parseAuthorizeCallback = parseAuthorizeCallback;
7
+ exports.validateCallbackState = validateCallbackState;
8
+ const constants_1 = require("./constants");
9
+ const urlHelpers_1 = require("./urlHelpers");
10
+ const http_1 = require("./http");
11
+ const models_1 = require("./models");
12
+ const exceptions_1 = require("./exceptions");
13
+ const crypto_1 = require("crypto");
14
+ function buildAuthorizeUrl(config, redirectUri, opts) {
15
+ if (!config.passport_url) {
16
+ throw new exceptions_1.LansengerConfigError("passport_url is required for OAuth2 flows. " +
17
+ "Set LANSENGER_PASSPORT_URL env var or pass passport_url in config.");
18
+ }
19
+ const state = opts?.state || (0, crypto_1.randomUUID)().replace(/-/g, "");
20
+ let scopeStr;
21
+ if (opts?.scope == null)
22
+ scopeStr = constants_1.OAUTH2_SCOPE_BASIC_USER_INFO;
23
+ else if (Array.isArray(opts.scope))
24
+ scopeStr = opts.scope.join(",");
25
+ else
26
+ scopeStr = opts.scope;
27
+ const params = new URLSearchParams({
28
+ appid: config.app_id, response_type: "code", scope: scopeStr,
29
+ state, redirect_uri: redirectUri,
30
+ });
31
+ const baseUrl = config.passport_url.replace(/\/+$/, "") + constants_1.API_ENDPOINTS.oauth2.authorize;
32
+ return `${baseUrl}?${params.toString()}`;
33
+ }
34
+ async function exchangeCodeForUserToken(config, appToken, code, opts) {
35
+ if (!code)
36
+ return new models_1.UserTokenResult({ success: false, error: "code is required" });
37
+ if (!appToken)
38
+ return new models_1.UserTokenResult({ success: false, error: "app_token is required" });
39
+ let url = (0, urlHelpers_1.buildApiUrl)(config, "oauth2", "user_token_create", appToken)
40
+ + `&grant_type=authorization_code&code=${encodeURIComponent(code)}`;
41
+ if (opts?.redirect_uri)
42
+ url += `&redirect_uri=${encodeURIComponent(opts.redirect_uri)}`;
43
+ const [data, httpErr] = await (0, http_1.doGet)(url, opts?.fetchFn);
44
+ if (httpErr)
45
+ return new models_1.UserTokenResult({ success: false, error: httpErr });
46
+ const errCode = data.errCode ?? -1;
47
+ if (errCode !== 0) {
48
+ const msg = data.errMsg || "Unknown error";
49
+ return new models_1.UserTokenResult({ success: false, error: `API error (errCode=${errCode}): ${msg}` });
50
+ }
51
+ const d = data.data || {};
52
+ return new models_1.UserTokenResult({
53
+ success: true, user_token: d.userToken, expires_in: d.expiresIn || 7200,
54
+ refresh_token: d.refreshToken, refresh_expires_in: d.refreshExpiresIn || 2592000,
55
+ staff_id: d.staffId, scope: d.scope, state: d.state, raw_response: data,
56
+ });
57
+ }
58
+ async function refreshUserToken(config, appToken, refreshToken, opts) {
59
+ if (!refreshToken)
60
+ return new models_1.UserTokenResult({ success: false, error: "refresh_token is required" });
61
+ if (!appToken)
62
+ return new models_1.UserTokenResult({ success: false, error: "app_token is required" });
63
+ let url = (0, urlHelpers_1.buildApiUrl)(config, "oauth2", "refresh_token_create", appToken)
64
+ + `&grant_type=refresh_token&refresh_token=${encodeURIComponent(refreshToken)}`;
65
+ if (opts?.scope)
66
+ url += `&scope=${encodeURIComponent(opts.scope)}`;
67
+ const [data, httpErr] = await (0, http_1.doGet)(url, opts?.fetchFn);
68
+ if (httpErr)
69
+ return new models_1.UserTokenResult({ success: false, error: httpErr });
70
+ const errCode = data.errCode ?? -1;
71
+ if (errCode !== 0) {
72
+ const msg = data.errMsg || "Unknown error";
73
+ return new models_1.UserTokenResult({ success: false, error: `API error (errCode=${errCode}): ${msg}` });
74
+ }
75
+ const d = data.data || {};
76
+ return new models_1.UserTokenResult({
77
+ success: true, user_token: d.userToken, expires_in: d.expiresIn || 7200,
78
+ refresh_token: d.refreshToken, refresh_expires_in: d.refreshExpiresIn || 2592000,
79
+ staff_id: d.staffId, scope: d.scope, state: d.state, raw_response: data,
80
+ });
81
+ }
82
+ function parseAuthorizeCallback(queryString) {
83
+ let params;
84
+ if (typeof queryString === "object")
85
+ params = queryString;
86
+ else {
87
+ params = {};
88
+ for (const part of queryString.replace(/^\?/, "").split("&")) {
89
+ if (part.includes("=")) {
90
+ const [key, value] = part.split("=", 1);
91
+ params[key] = value || "";
92
+ }
93
+ }
94
+ }
95
+ const result = {
96
+ code: params.code || "", state: params.state || "",
97
+ };
98
+ if (params.error)
99
+ result.error = params.error;
100
+ if (params.error_description)
101
+ result.error_description = params.error_description;
102
+ return result;
103
+ }
104
+ function validateCallbackState(callbackState, expectedState) {
105
+ return callbackState === expectedState;
106
+ }
107
+ //# sourceMappingURL=oauth.js.map
@@ -0,0 +1,26 @@
1
+ export declare class CredentialStore {
2
+ private filePath;
3
+ private profile;
4
+ constructor(filePath?: string, profile?: string);
5
+ get path(): string;
6
+ get currentProfile(): string;
7
+ private migrateLegacy;
8
+ load(): Record<string, any>;
9
+ save(state: Record<string, any>): void;
10
+ private getProfileData;
11
+ private setProfileData;
12
+ loadCredentials(): Record<string, string>;
13
+ saveCredentials(appId: string, appSecret: string, apiGatewayUrl?: string, passportUrl?: string, encodingKey?: string, callbackToken?: string): void;
14
+ saveCallbackConfig(encodingKey: string, callbackToken?: string): void;
15
+ loadAppToken(): string | null;
16
+ saveAppToken(token: string, expiresIn?: number, margin?: number): void;
17
+ loadUserToken(): Record<string, any>;
18
+ saveUserToken(userToken: string, refreshToken?: string, expiresIn?: number): void;
19
+ clearProfile(): void;
20
+ clear(): void;
21
+ listProfiles(): string[];
22
+ getActiveProfile(): string;
23
+ setActiveProfile(profile: string): void;
24
+ hasCredentials(): boolean;
25
+ hasFullConfig(): boolean;
26
+ }
@@ -0,0 +1,210 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.CredentialStore = void 0;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const os = __importStar(require("os"));
40
+ const DEFAULT_STATE_DIR = path.join(os.homedir(), ".lansenger");
41
+ const DEFAULT_STATE_FILE = "sdk_state.json";
42
+ const DEFAULT_PROFILE = "default";
43
+ const LEGACY_KEYS = new Set([
44
+ "app_id", "app_secret", "api_gateway_url", "passport_url",
45
+ "encoding_key", "callback_token",
46
+ "app_token", "app_token_expiry", "user_token", "refresh_token",
47
+ "user_token_expiry",
48
+ ]);
49
+ class CredentialStore {
50
+ constructor(filePath, profile = DEFAULT_PROFILE) {
51
+ this.filePath = filePath || path.join(DEFAULT_STATE_DIR, DEFAULT_STATE_FILE);
52
+ this.profile = profile;
53
+ }
54
+ get path() {
55
+ return this.filePath;
56
+ }
57
+ get currentProfile() {
58
+ return this.profile;
59
+ }
60
+ migrateLegacy(state) {
61
+ if ("profiles" in state)
62
+ return state;
63
+ const legacyData = {};
64
+ for (const [k, v] of Object.entries(state)) {
65
+ if (LEGACY_KEYS.has(k))
66
+ legacyData[k] = v;
67
+ }
68
+ if (!legacyData.app_id)
69
+ return state;
70
+ const newState = {
71
+ profiles: { [DEFAULT_PROFILE]: legacyData },
72
+ active_profile: DEFAULT_PROFILE,
73
+ };
74
+ this.save(newState);
75
+ return newState;
76
+ }
77
+ load() {
78
+ if (!fs.existsSync(this.filePath))
79
+ return {};
80
+ try {
81
+ const raw = fs.readFileSync(this.filePath, "utf-8");
82
+ const data = JSON.parse(raw);
83
+ return this.migrateLegacy(data);
84
+ }
85
+ catch (e) {
86
+ return {};
87
+ }
88
+ }
89
+ save(state) {
90
+ const dir = path.dirname(this.filePath);
91
+ if (!fs.existsSync(dir))
92
+ fs.mkdirSync(dir, { recursive: true });
93
+ fs.writeFileSync(this.filePath, JSON.stringify(state, null, 2), "utf-8");
94
+ try {
95
+ fs.chmodSync(this.filePath, 0o600);
96
+ }
97
+ catch { }
98
+ }
99
+ getProfileData(state) {
100
+ const profiles = state.profiles || {};
101
+ return profiles[this.profile] || {};
102
+ }
103
+ setProfileData(state, data) {
104
+ if (!state.profiles)
105
+ state.profiles = {};
106
+ state.profiles[this.profile] = data;
107
+ if (!state.active_profile)
108
+ state.active_profile = DEFAULT_PROFILE;
109
+ return state;
110
+ }
111
+ loadCredentials() {
112
+ const data = this.getProfileData(this.load());
113
+ return {
114
+ app_id: data.app_id || "",
115
+ app_secret: data.app_secret || "",
116
+ api_gateway_url: data.api_gateway_url || "",
117
+ passport_url: data.passport_url || "",
118
+ encoding_key: data.encoding_key || "",
119
+ callback_token: data.callback_token || "",
120
+ };
121
+ }
122
+ saveCredentials(appId, appSecret, apiGatewayUrl = "", passportUrl = "", encodingKey = "", callbackToken = "") {
123
+ const state = this.load();
124
+ const data = this.getProfileData(state);
125
+ data.app_id = appId;
126
+ data.app_secret = appSecret;
127
+ if (apiGatewayUrl)
128
+ data.api_gateway_url = apiGatewayUrl;
129
+ if (passportUrl)
130
+ data.passport_url = passportUrl;
131
+ data.encoding_key = encodingKey;
132
+ data.callback_token = callbackToken;
133
+ this.save(this.setProfileData(state, data));
134
+ }
135
+ saveCallbackConfig(encodingKey, callbackToken = "") {
136
+ const state = this.load();
137
+ const data = this.getProfileData(state);
138
+ data.encoding_key = encodingKey;
139
+ data.callback_token = callbackToken;
140
+ this.save(this.setProfileData(state, data));
141
+ }
142
+ loadAppToken() {
143
+ const data = this.getProfileData(this.load());
144
+ const token = data.app_token;
145
+ const expiry = data.app_token_expiry || 0;
146
+ if (token && expiry > Date.now() / 1000)
147
+ return token;
148
+ return null;
149
+ }
150
+ saveAppToken(token, expiresIn = 7200, margin = 300) {
151
+ const state = this.load();
152
+ const data = this.getProfileData(state);
153
+ data.app_token = token;
154
+ data.app_token_expiry = Date.now() / 1000 + expiresIn - margin;
155
+ this.save(this.setProfileData(state, data));
156
+ }
157
+ loadUserToken() {
158
+ const data = this.getProfileData(this.load());
159
+ return {
160
+ user_token: data.user_token || "",
161
+ refresh_token: data.refresh_token || "",
162
+ user_token_expiry: data.user_token_expiry || 0,
163
+ };
164
+ }
165
+ saveUserToken(userToken, refreshToken = "", expiresIn = 0) {
166
+ const state = this.load();
167
+ const data = this.getProfileData(state);
168
+ data.user_token = userToken;
169
+ data.refresh_token = refreshToken;
170
+ if (expiresIn)
171
+ data.user_token_expiry = Date.now() / 1000 + expiresIn;
172
+ this.save(this.setProfileData(state, data));
173
+ }
174
+ clearProfile() {
175
+ const state = this.load();
176
+ const profiles = state.profiles || {};
177
+ if (this.profile in profiles) {
178
+ delete profiles[this.profile];
179
+ this.save(state);
180
+ }
181
+ }
182
+ clear() {
183
+ if (fs.existsSync(this.filePath)) {
184
+ fs.unlinkSync(this.filePath);
185
+ }
186
+ }
187
+ listProfiles() {
188
+ const state = this.load();
189
+ return Object.keys(state.profiles || {});
190
+ }
191
+ getActiveProfile() {
192
+ const state = this.load();
193
+ return state.active_profile || DEFAULT_PROFILE;
194
+ }
195
+ setActiveProfile(profile) {
196
+ const state = this.load();
197
+ state.active_profile = profile;
198
+ this.save(state);
199
+ }
200
+ hasCredentials() {
201
+ const creds = this.loadCredentials();
202
+ return !!creds.app_id && !!creds.app_secret;
203
+ }
204
+ hasFullConfig() {
205
+ const creds = this.loadCredentials();
206
+ return !!creds.app_id && !!creds.app_secret && !!creds.api_gateway_url;
207
+ }
208
+ }
209
+ exports.CredentialStore = CredentialStore;
210
+ //# sourceMappingURL=persistence.js.map
@@ -0,0 +1,10 @@
1
+ import { LansengerConfig } from "./config";
2
+ import { FetchFn } from "./http";
3
+ import { SendMessageResult } from "./models";
4
+ export declare const REMINDER_TYPE_NONE = 0;
5
+ export declare const REMINDER_TYPE_POPUP = 1;
6
+ export declare const REMINDER_TYPE_SMS = 2;
7
+ export declare const REMINDER_TYPE_PHONE = 3;
8
+ export declare function sendReminder(config: LansengerConfig, appToken: string, msgId: string, reminderTypes: number[], userIdList: string[], opts?: {
9
+ fetchFn?: FetchFn;
10
+ }): Promise<SendMessageResult>;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.REMINDER_TYPE_PHONE = exports.REMINDER_TYPE_SMS = exports.REMINDER_TYPE_POPUP = exports.REMINDER_TYPE_NONE = void 0;
4
+ exports.sendReminder = sendReminder;
5
+ const urlHelpers_1 = require("./urlHelpers");
6
+ const http_1 = require("./http");
7
+ const models_1 = require("./models");
8
+ exports.REMINDER_TYPE_NONE = 0;
9
+ exports.REMINDER_TYPE_POPUP = 1;
10
+ exports.REMINDER_TYPE_SMS = 2;
11
+ exports.REMINDER_TYPE_PHONE = 3;
12
+ async function sendReminder(config, appToken, msgId, reminderTypes, userIdList, opts) {
13
+ if (!msgId)
14
+ return new models_1.SendMessageResult({ success: false, error: "msg_id is required" });
15
+ if (!reminderTypes || !reminderTypes.length)
16
+ return new models_1.SendMessageResult({ success: false, error: "reminder_types is required" });
17
+ if (!userIdList || !userIdList.length)
18
+ return new models_1.SendMessageResult({ success: false, error: "user_id_list is required" });
19
+ const url = (0, urlHelpers_1.buildApiUrl)(config, "message", "reminder_create", appToken);
20
+ const body = { msgId, reminderTypes, userIdList };
21
+ const [data, httpErr] = await (0, http_1.doPost)(url, body, opts?.fetchFn);
22
+ if (httpErr)
23
+ return new models_1.SendMessageResult({ success: false, error: httpErr, retryable: true });
24
+ const errCode = data.errCode ?? -1;
25
+ if (errCode !== 0) {
26
+ const msg = data.errMsg || "Unknown error";
27
+ return new models_1.SendMessageResult({ success: false, error: `API error (errCode=${errCode}): ${msg}`, operation: "send_reminder", retryable: true });
28
+ }
29
+ return new models_1.SendMessageResult({ success: true, operation: "send_reminder", raw_response: data });
30
+ }
31
+ //# sourceMappingURL=reminders.js.map
@@ -0,0 +1,9 @@
1
+ import { LansengerConfig } from "./config";
2
+ import { FetchFn } from "./http";
3
+ import { StreamMessageResult } from "./models";
4
+ export declare function createStreamMessage(config: LansengerConfig, appToken: string, receiverId: string, receiverType: string, streamId: string, opts?: {
5
+ fetchFn?: FetchFn;
6
+ }): Promise<StreamMessageResult>;
7
+ export declare function fetchStreamMessage(config: LansengerConfig, appToken: string, msgId: string, opts?: {
8
+ fetchFn?: FetchFn;
9
+ }): Promise<StreamMessageResult>;
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createStreamMessage = createStreamMessage;
4
+ exports.fetchStreamMessage = fetchStreamMessage;
5
+ const urlHelpers_1 = require("./urlHelpers");
6
+ const http_1 = require("./http");
7
+ const models_1 = require("./models");
8
+ async function createStreamMessage(config, appToken, receiverId, receiverType, streamId, opts) {
9
+ if (!receiverId)
10
+ return new models_1.StreamMessageResult({ success: false, error: "receiver_id is required" });
11
+ if (!receiverType)
12
+ return new models_1.StreamMessageResult({ success: false, error: "receiver_type is required" });
13
+ if (!streamId)
14
+ return new models_1.StreamMessageResult({ success: false, error: "stream_id is required" });
15
+ const url = (0, urlHelpers_1.buildApiUrl)(config, "sse", "msg_create", appToken);
16
+ const body = { receiverId, receiverType, streamId };
17
+ const [data, httpErr] = await (0, http_1.doPost)(url, body, opts?.fetchFn);
18
+ if (httpErr)
19
+ return new models_1.StreamMessageResult({ success: false, error: httpErr });
20
+ const [ok, apiErr] = (0, http_1.parseApiResponse)(data);
21
+ if (!ok)
22
+ return new models_1.StreamMessageResult({ success: false, error: apiErr });
23
+ const d = data.data || {};
24
+ return new models_1.StreamMessageResult({ success: true, message_id: d.msgId, raw_response: data });
25
+ }
26
+ async function fetchStreamMessage(config, appToken, msgId, opts) {
27
+ if (!msgId)
28
+ return new models_1.StreamMessageResult({ success: false, error: "msg_id is required" });
29
+ const url = (0, urlHelpers_1.buildApiUrl)(config, "sse", "msg_fetch", appToken);
30
+ const body = { msgId };
31
+ const [data, httpErr] = await (0, http_1.doPost)(url, body, opts?.fetchFn);
32
+ if (httpErr)
33
+ return new models_1.StreamMessageResult({ success: false, error: httpErr });
34
+ const [ok, apiErr] = (0, http_1.parseApiResponse)(data);
35
+ if (!ok)
36
+ return new models_1.StreamMessageResult({ success: false, error: apiErr });
37
+ const d = data.data || {};
38
+ return new models_1.StreamMessageResult({ success: true, message_id: d.msgId, raw_response: data });
39
+ }
40
+ //# sourceMappingURL=streaming.js.map
@@ -0,0 +1,75 @@
1
+ import { LansengerConfig } from "./config";
2
+ import { FetchFn } from "./http";
3
+ import { TodoTaskCreateResult, TodoTaskInfoResult, TodoTaskListResult, TodoTaskStatusCountResult, TodoTaskExecutorListResult } from "./models";
4
+ export declare const TODO_TODO_STATUS_PENDING_READ = "11";
5
+ export declare const TODO_TODO_STATUS_READ = "12";
6
+ export declare const TODO_TODO_STATUS_PENDING_DO = "21";
7
+ export declare const TODO_TODO_STATUS_DONE = "22";
8
+ export declare const TODO_TYPE_NOTIFICATION = 1;
9
+ export declare const TODO_TYPE_APPROVAL = 2;
10
+ export declare function createTodoTask(config: LansengerConfig, appToken: string, title: string, link: string, pcLink: string, executorIds: string[], orgId: string, type?: number, opts?: {
11
+ source_id?: string;
12
+ desc?: string;
13
+ sender_id?: string;
14
+ user_token?: string;
15
+ fetchFn?: FetchFn;
16
+ }): Promise<TodoTaskCreateResult>;
17
+ export declare function updateTodoTask(config: LansengerConfig, appToken: string, todotaskId: string, title: string, link: string, pcLink: string, orgId: string, opts?: {
18
+ desc?: string;
19
+ user_token?: string;
20
+ fetchFn?: FetchFn;
21
+ }): Promise<TodoTaskCreateResult>;
22
+ export declare function updateTodoTaskStatus(config: LansengerConfig, appToken: string, todotaskId: string, status: string, orgId: string, opts?: {
23
+ staff_id?: string;
24
+ user_token?: string;
25
+ fetchFn?: FetchFn;
26
+ }): Promise<TodoTaskCreateResult>;
27
+ export declare function deleteTodoTask(config: LansengerConfig, appToken: string, todotaskId: string, orgId: string, opts?: {
28
+ staff_id?: string;
29
+ user_token?: string;
30
+ fetchFn?: FetchFn;
31
+ }): Promise<TodoTaskCreateResult>;
32
+ export declare function fetchTodoTaskList(config: LansengerConfig, appToken: string, orgId: string, opts?: {
33
+ app_ids?: string[];
34
+ staff_id?: string;
35
+ status_list?: string[];
36
+ user_token?: string;
37
+ fetchFn?: FetchFn;
38
+ }): Promise<TodoTaskListResult>;
39
+ export declare function fetchTodoTaskBySourceId(config: LansengerConfig, appToken: string, sourceId: string, orgId: string, opts?: {
40
+ staff_id?: string;
41
+ user_token?: string;
42
+ fetchFn?: FetchFn;
43
+ }): Promise<TodoTaskInfoResult>;
44
+ export declare function fetchTodoTaskById(config: LansengerConfig, appToken: string, todotaskId: string, orgId: string, opts?: {
45
+ staff_id?: string;
46
+ user_token?: string;
47
+ fetchFn?: FetchFn;
48
+ }): Promise<TodoTaskInfoResult>;
49
+ export declare function fetchTodoTaskStatusCounts(config: LansengerConfig, appToken: string, staffId: string, orgId: string, opts?: {
50
+ app_id?: string;
51
+ status_list?: string[];
52
+ user_token?: string;
53
+ fetchFn?: FetchFn;
54
+ }): Promise<TodoTaskStatusCountResult>;
55
+ export declare function updateExecutorStatus(config: LansengerConfig, appToken: string, executorStatusList: Record<string, string>[], orgId: string, opts?: {
56
+ todotask_id?: string;
57
+ user_token?: string;
58
+ fetchFn?: FetchFn;
59
+ }): Promise<TodoTaskCreateResult>;
60
+ export declare function addExecutors(config: LansengerConfig, appToken: string, executorIds: string[], orgId: string, opts?: {
61
+ todotask_id?: string;
62
+ user_token?: string;
63
+ fetchFn?: FetchFn;
64
+ }): Promise<TodoTaskCreateResult>;
65
+ export declare function deleteExecutors(config: LansengerConfig, appToken: string, executorIds: string[], orgId: string, opts?: {
66
+ todotask_id?: string;
67
+ user_token?: string;
68
+ fetchFn?: FetchFn;
69
+ }): Promise<TodoTaskCreateResult>;
70
+ export declare function fetchExecutorList(config: LansengerConfig, appToken: string, todotaskId: string, orgId: string, opts?: {
71
+ staff_id?: string;
72
+ status_list?: string[];
73
+ user_token?: string;
74
+ fetchFn?: FetchFn;
75
+ }): Promise<TodoTaskExecutorListResult>;