@amityco/ts-sdk 7.5.4-db55aa2.0 → 7.6.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/.env +26 -26
- package/dist/@types/domains/channel.d.ts +1 -0
- package/dist/@types/domains/channel.d.ts.map +1 -1
- package/dist/@types/domains/group.d.ts +2 -0
- package/dist/@types/domains/group.d.ts.map +1 -1
- package/dist/channelRepository/channelMembership/observers/getMembers/ChannelMemberLiveCollectionController.d.ts.map +1 -1
- package/dist/channelRepository/channelMembership/observers/searchMembers/SearchChannelMemberLiveCollectionController.d.ts.map +1 -1
- package/dist/channelRepository/channelMembership/observers/searchMembers/SearchChannelMemberQueryStreamController.d.ts +2 -2
- package/dist/channelRepository/channelMembership/observers/searchMembers/SearchChannelMemberQueryStreamController.d.ts.map +1 -1
- package/dist/client/api/index.d.ts +1 -0
- package/dist/client/api/index.d.ts.map +1 -1
- package/dist/client/api/resumeSession.d.ts +32 -0
- package/dist/client/api/resumeSession.d.ts.map +1 -0
- package/dist/client/api/tests/resumeSession.test.d.ts +2 -0
- package/dist/client/api/tests/resumeSession.test.d.ts.map +1 -0
- package/dist/index.cjs.js +218 -17
- package/dist/index.esm.js +217 -17
- package/dist/index.umd.js +4 -4
- package/dist/utils/linkedObject/channelLinkedObject.d.ts.map +1 -1
- package/dist/utils/linkedObject/channelMemberLinkedObject.d.ts +2 -0
- package/dist/utils/linkedObject/channelMemberLinkedObject.d.ts.map +1 -0
- package/dist/utils/linkedObject/index.d.ts +1 -0
- package/dist/utils/linkedObject/index.d.ts.map +1 -1
- package/dist/utils/tests/dummy/community.d.ts +2 -0
- package/dist/utils/tests/dummy/community.d.ts.map +1 -1
- package/package.json +2 -1
- package/src/@types/domains/channel.ts +1 -0
- package/src/@types/domains/group.ts +2 -0
- package/src/channelRepository/channelMembership/observers/getMembers/ChannelMemberLiveCollectionController.ts +3 -1
- package/src/channelRepository/channelMembership/observers/searchMembers/SearchChannelMemberLiveCollectionController.ts +2 -1
- package/src/channelRepository/channelMembership/observers/searchMembers/SearchChannelMemberQueryStreamController.ts +2 -2
- package/src/client/api/index.ts +1 -0
- package/src/client/api/resumeSession.ts +282 -0
- package/src/client/api/tests/resumeSession.test.ts +173 -0
- package/src/utils/linkedObject/channelLinkedObject.ts +19 -0
- package/src/utils/linkedObject/channelMemberLinkedObject.ts +20 -0
- package/src/utils/linkedObject/index.ts +2 -0
package/dist/index.esm.js
CHANGED
|
@@ -6,6 +6,7 @@ import HttpAgent, { HttpsAgent } from 'agentkeepalive';
|
|
|
6
6
|
import io from 'socket.io-client';
|
|
7
7
|
import uuid$1 from 'react-native-uuid';
|
|
8
8
|
import hash from 'object-hash';
|
|
9
|
+
import jwtDecode from 'jwt-decode';
|
|
9
10
|
import Hls from 'hls.js';
|
|
10
11
|
|
|
11
12
|
var MembershipAcceptanceTypeEnum;
|
|
@@ -136,8 +137,8 @@ var JoinResultStatusEnum;
|
|
|
136
137
|
|
|
137
138
|
function getVersion() {
|
|
138
139
|
try {
|
|
139
|
-
// the string ''v7.
|
|
140
|
-
return 'v7.
|
|
140
|
+
// the string ''v7.6.0-esm'' should be replaced by actual value by @rollup/plugin-replace
|
|
141
|
+
return 'v7.6.0-esm';
|
|
141
142
|
}
|
|
142
143
|
catch (error) {
|
|
143
144
|
return '__dev__';
|
|
@@ -23386,9 +23387,35 @@ const markAsRead = async (channelId) => {
|
|
|
23386
23387
|
return true;
|
|
23387
23388
|
};
|
|
23388
23389
|
|
|
23390
|
+
const channelMemberLinkedObject = (channelMember) => {
|
|
23391
|
+
const getUser = () => {
|
|
23392
|
+
var _a;
|
|
23393
|
+
const cacheKey = ['user', 'get', channelMember.userId];
|
|
23394
|
+
const internalUser = (_a = pullFromCache(cacheKey)) === null || _a === void 0 ? void 0 : _a.data;
|
|
23395
|
+
return internalUser ? userLinkedObject(internalUser) : undefined;
|
|
23396
|
+
};
|
|
23397
|
+
return Object.assign(Object.assign({}, channelMember), { get user() {
|
|
23398
|
+
return getUser();
|
|
23399
|
+
} });
|
|
23400
|
+
};
|
|
23401
|
+
|
|
23389
23402
|
const channelLinkedObject = (channel) => {
|
|
23403
|
+
var _a;
|
|
23404
|
+
let previewMembers = [];
|
|
23405
|
+
if (channel.type === 'conversation') {
|
|
23406
|
+
const channelUsers = queryCache(['channelUsers', 'get']);
|
|
23407
|
+
if (channelUsers && (channelUsers === null || channelUsers === void 0 ? void 0 : channelUsers.length) > 0) {
|
|
23408
|
+
previewMembers = ((_a = channelUsers === null || channelUsers === void 0 ? void 0 : channelUsers.filter(({ data }) => data.channelId === channel.channelId)) !== null && _a !== void 0 ? _a : [])
|
|
23409
|
+
// sort in ascending order by userInternalId
|
|
23410
|
+
.sort((a, b) => a.data.userInternalId.localeCompare(b.data.userInternalId))
|
|
23411
|
+
// Select only first 4 members
|
|
23412
|
+
.slice(0, 4)
|
|
23413
|
+
.map(({ data }) => channelMemberLinkedObject(data));
|
|
23414
|
+
}
|
|
23415
|
+
}
|
|
23390
23416
|
return shallowClone(channel, {
|
|
23391
23417
|
markAsRead: () => markAsRead(channel.channelInternalId),
|
|
23418
|
+
previewMembers,
|
|
23392
23419
|
});
|
|
23393
23420
|
};
|
|
23394
23421
|
|
|
@@ -24711,6 +24738,7 @@ const LinkedObject = {
|
|
|
24711
24738
|
community: communityLinkedObject,
|
|
24712
24739
|
invitation: invitationLinkedObject,
|
|
24713
24740
|
joinRequest: joinRequestLinkedObject,
|
|
24741
|
+
channelMember: channelMemberLinkedObject,
|
|
24714
24742
|
};
|
|
24715
24743
|
|
|
24716
24744
|
const constructChannelObject = (channel) => {
|
|
@@ -25993,8 +26021,8 @@ const removeChannelMarkerCache = (channel) => {
|
|
|
25993
26021
|
* than the one already connected, in which case the existing subscriptions need
|
|
25994
26022
|
* to be cleared
|
|
25995
26023
|
*/
|
|
25996
|
-
let subscriptions = [];
|
|
25997
|
-
async function runMqtt() {
|
|
26024
|
+
let subscriptions$1 = [];
|
|
26025
|
+
async function runMqtt$1() {
|
|
25998
26026
|
await modifyMqttConnection();
|
|
25999
26027
|
}
|
|
26000
26028
|
/* begin_public_function
|
|
@@ -26029,8 +26057,8 @@ const login = async (params, sessionHandler, config) => {
|
|
|
26029
26057
|
if (client.userId && client.userId !== params.userId) {
|
|
26030
26058
|
await logout();
|
|
26031
26059
|
// Remove subscription to ban and delete
|
|
26032
|
-
subscriptions.forEach(fn => fn());
|
|
26033
|
-
subscriptions = [];
|
|
26060
|
+
subscriptions$1.forEach(fn => fn());
|
|
26061
|
+
subscriptions$1 = [];
|
|
26034
26062
|
}
|
|
26035
26063
|
// default values
|
|
26036
26064
|
const defaultDeviceId = await getDeviceId();
|
|
@@ -26076,40 +26104,40 @@ const login = async (params, sessionHandler, config) => {
|
|
|
26076
26104
|
throw error;
|
|
26077
26105
|
}
|
|
26078
26106
|
if ((config === null || config === void 0 ? void 0 : config.disableRTE) !== true) {
|
|
26079
|
-
runMqtt();
|
|
26107
|
+
runMqtt$1();
|
|
26080
26108
|
}
|
|
26081
26109
|
await initializeMessagePreviewSetting();
|
|
26082
|
-
if (subscriptions.length === 0) {
|
|
26083
|
-
subscriptions.push(
|
|
26110
|
+
if (subscriptions$1.length === 0) {
|
|
26111
|
+
subscriptions$1.push(
|
|
26084
26112
|
// GLOBAL_BAN
|
|
26085
26113
|
onClientBanned((_) => {
|
|
26086
26114
|
terminateClient("globalBan" /* Amity.TokenTerminationReason.GLOBAL_BAN */);
|
|
26087
|
-
subscriptions.forEach(fn => fn());
|
|
26115
|
+
subscriptions$1.forEach(fn => fn());
|
|
26088
26116
|
unsubWatcher();
|
|
26089
26117
|
}), onTokenTerminated(_ => {
|
|
26090
26118
|
terminateClient();
|
|
26091
|
-
subscriptions.forEach(fn => fn());
|
|
26119
|
+
subscriptions$1.forEach(fn => fn());
|
|
26092
26120
|
unsubWatcher();
|
|
26093
26121
|
}), onUserDeleted$2((user) => {
|
|
26094
26122
|
if (user.userId === client.userId) {
|
|
26095
26123
|
terminateClient("userDeleted" /* Amity.TokenTerminationReason.USER_DELETED */);
|
|
26096
|
-
subscriptions.forEach(fn => fn());
|
|
26124
|
+
subscriptions$1.forEach(fn => fn());
|
|
26097
26125
|
unsubWatcher();
|
|
26098
26126
|
}
|
|
26099
26127
|
}), onTokenExpired(state => {
|
|
26100
26128
|
SessionWatcher$1.getInstance().setSessionState(state);
|
|
26101
26129
|
logout();
|
|
26102
|
-
subscriptions.forEach(fn => fn());
|
|
26130
|
+
subscriptions$1.forEach(fn => fn());
|
|
26103
26131
|
}),
|
|
26104
26132
|
// NOTE: This is a temporary solution to handle the channel marker when the user is forced to leave
|
|
26105
26133
|
// the channel because currently backend can't handle this, so every time a user is banned from
|
|
26106
26134
|
// a channel or the channel is deleted the channel's unread count will not be reset to zero
|
|
26107
26135
|
onChannelDeleted(removeChannelMarkerCache), onChannelMemberBanned(removeChannelMarkerCache), markReadEngineOnLoginHandler(), analyticsEngineOnLoginHandler(), objectResolverEngineOnLoginHandler());
|
|
26108
26136
|
if (client.useLegacyUnreadCount) {
|
|
26109
|
-
subscriptions.push(readReceiptSyncEngineOnLoginHandler());
|
|
26137
|
+
subscriptions$1.push(readReceiptSyncEngineOnLoginHandler());
|
|
26110
26138
|
}
|
|
26111
26139
|
else
|
|
26112
|
-
subscriptions.push(legacyReadReceiptSyncEngineOnLoginHandler());
|
|
26140
|
+
subscriptions$1.push(legacyReadReceiptSyncEngineOnLoginHandler());
|
|
26113
26141
|
}
|
|
26114
26142
|
return true;
|
|
26115
26143
|
};
|
|
@@ -27034,6 +27062,176 @@ const secureLogout = async () => {
|
|
|
27034
27062
|
};
|
|
27035
27063
|
/* end_public_function */
|
|
27036
27064
|
|
|
27065
|
+
/*
|
|
27066
|
+
* declared earlier to accomodate case when logging in with a different user
|
|
27067
|
+
* than the one already connected, in which case the existing subscriptions need
|
|
27068
|
+
* to be cleared
|
|
27069
|
+
*/
|
|
27070
|
+
let subscriptions = [];
|
|
27071
|
+
async function runMqtt() {
|
|
27072
|
+
await modifyMqttConnection();
|
|
27073
|
+
}
|
|
27074
|
+
const isSameUserId = (token) => {
|
|
27075
|
+
var _a;
|
|
27076
|
+
const client = getActiveClient();
|
|
27077
|
+
const decoded = jwtDecode(token);
|
|
27078
|
+
return ((_a = decoded === null || decoded === void 0 ? void 0 : decoded.user) === null || _a === void 0 ? void 0 : _a.publicUserId) === client.userId;
|
|
27079
|
+
};
|
|
27080
|
+
const validateAccessToken = async ({ token, userId }) => {
|
|
27081
|
+
const client = getActiveClient();
|
|
27082
|
+
// begin establishing session
|
|
27083
|
+
setSessionState("establishing" /* Amity.SessionStates.ESTABLISHING */);
|
|
27084
|
+
const { data: { users }, } = await client.http.get(`/api/v3/users/${userId}`, {
|
|
27085
|
+
headers: {
|
|
27086
|
+
Authorization: `Bearer ${token.accessToken}`,
|
|
27087
|
+
},
|
|
27088
|
+
});
|
|
27089
|
+
const user = users.find((u) => u.userId === userId);
|
|
27090
|
+
client.http.defaults.headers.common.Authorization = `Bearer ${token.accessToken}`;
|
|
27091
|
+
client.http.defaults.metadata = {
|
|
27092
|
+
tokenExpiry: token.expiresAt,
|
|
27093
|
+
isGlobalBanned: false,
|
|
27094
|
+
isUserDeleted: false,
|
|
27095
|
+
};
|
|
27096
|
+
client.upload.defaults.headers.common.Authorization = `Bearer ${token.accessToken}`;
|
|
27097
|
+
client.upload.defaults.metadata = {
|
|
27098
|
+
tokenExpiry: token.expiresAt,
|
|
27099
|
+
isGlobalBanned: false,
|
|
27100
|
+
isUserDeleted: false,
|
|
27101
|
+
};
|
|
27102
|
+
// manually setup the token for ws transport
|
|
27103
|
+
if (client.ws)
|
|
27104
|
+
client.ws.io.opts.query = { token: token.accessToken };
|
|
27105
|
+
client.token = token;
|
|
27106
|
+
setSessionState("established" /* Amity.SessionStates.ESTABLISHED */);
|
|
27107
|
+
return user;
|
|
27108
|
+
};
|
|
27109
|
+
/* begin_public_function
|
|
27110
|
+
id: client.resumeSession
|
|
27111
|
+
*/
|
|
27112
|
+
/**
|
|
27113
|
+
* ```js
|
|
27114
|
+
* import { resumeSession } from '@amityco/ts-sdk/client/api'
|
|
27115
|
+
* const success = await resumeSession({
|
|
27116
|
+
* userId: 'XYZ123456789',
|
|
27117
|
+
* token: { accessToken: 'abc123', issuedAt: '2023-01-01T00:00:00Z', expiresAt: '2023-01-02T00:00:00Z' }
|
|
27118
|
+
* })
|
|
27119
|
+
* ```
|
|
27120
|
+
*
|
|
27121
|
+
* Connects an {@link Amity.Client} instance to ASC servers using an existing access token
|
|
27122
|
+
*
|
|
27123
|
+
* @param params the connect parameters
|
|
27124
|
+
* @param params.userId the user ID for the current session
|
|
27125
|
+
* @param params.token the existing access token with its metadata
|
|
27126
|
+
* @param sessionHandler the session handler for token renewal
|
|
27127
|
+
* @param config optional configuration
|
|
27128
|
+
* @returns a success boolean if connected
|
|
27129
|
+
*
|
|
27130
|
+
* @category Client API
|
|
27131
|
+
* @async
|
|
27132
|
+
*/
|
|
27133
|
+
const resumeSession = async (params, sessionHandler, config) => {
|
|
27134
|
+
var _a;
|
|
27135
|
+
const client = getActiveClient();
|
|
27136
|
+
let unsubWatcher;
|
|
27137
|
+
client.log('client/api/resumeSession', Object.assign({ apiKey: client.apiKey, sessionState: client.sessionState }, params));
|
|
27138
|
+
// Handle existing connected user
|
|
27139
|
+
if (client.userId) {
|
|
27140
|
+
if (client.userId === params.userId && isSameUserId(params.token.accessToken)) {
|
|
27141
|
+
// Clear connections and listeners but preserve cache
|
|
27142
|
+
if (client.mqtt && client.mqtt.connected) {
|
|
27143
|
+
client.mqtt.disconnect();
|
|
27144
|
+
}
|
|
27145
|
+
if (client.ws && client.ws.connected) {
|
|
27146
|
+
client.ws.disconnect();
|
|
27147
|
+
}
|
|
27148
|
+
// Clear existing subscriptions
|
|
27149
|
+
subscriptions.forEach(fn => fn());
|
|
27150
|
+
subscriptions = [];
|
|
27151
|
+
}
|
|
27152
|
+
else {
|
|
27153
|
+
// Different user - do full logout
|
|
27154
|
+
await logout();
|
|
27155
|
+
// Remove subscription to ban and delete
|
|
27156
|
+
subscriptions.forEach(fn => fn());
|
|
27157
|
+
subscriptions = [];
|
|
27158
|
+
}
|
|
27159
|
+
}
|
|
27160
|
+
try {
|
|
27161
|
+
const user = await validateAccessToken(params);
|
|
27162
|
+
if (user == null) {
|
|
27163
|
+
throw new ASCError(`${params.userId} has not been found`, 800000 /* Amity.ClientError.UNKNOWN_ERROR */, "error" /* Amity.ErrorLevel.ERROR */);
|
|
27164
|
+
}
|
|
27165
|
+
if (user.isDeleted) {
|
|
27166
|
+
terminateClient("userDeleted" /* Amity.TokenTerminationReason.USER_DELETED */);
|
|
27167
|
+
return false;
|
|
27168
|
+
}
|
|
27169
|
+
if (user.isGlobalBanned) {
|
|
27170
|
+
terminateClient("globalBan" /* Amity.TokenTerminationReason.GLOBAL_BAN */);
|
|
27171
|
+
return false;
|
|
27172
|
+
}
|
|
27173
|
+
// FIXME: events are duplicated if connectClient is called few times without disconnectClient
|
|
27174
|
+
// wire websocket events to our event emitter
|
|
27175
|
+
proxyWebsocketEvents(client.ws, client.emitter);
|
|
27176
|
+
(_a = client.ws) === null || _a === void 0 ? void 0 : _a.open();
|
|
27177
|
+
client.userId = user.userId;
|
|
27178
|
+
client.sessionHandler = sessionHandler;
|
|
27179
|
+
/*
|
|
27180
|
+
* Cannot push to subscriptions as watcher needs to continue working even if
|
|
27181
|
+
* token expires
|
|
27182
|
+
*/
|
|
27183
|
+
unsubWatcher = client.accessTokenExpiryWatcher(sessionHandler);
|
|
27184
|
+
setActiveUser(user);
|
|
27185
|
+
}
|
|
27186
|
+
catch (error) {
|
|
27187
|
+
/*
|
|
27188
|
+
* if getting token failed session state reverts to initial state when app
|
|
27189
|
+
* is first launched
|
|
27190
|
+
*/
|
|
27191
|
+
SessionWatcher$1.getInstance().setSessionState("notLoggedIn" /* Amity.SessionStates.NOT_LOGGED_IN */);
|
|
27192
|
+
// pass error down tree so the calling function handle it
|
|
27193
|
+
throw error;
|
|
27194
|
+
}
|
|
27195
|
+
if ((config === null || config === void 0 ? void 0 : config.disableRTE) !== true) {
|
|
27196
|
+
runMqtt();
|
|
27197
|
+
}
|
|
27198
|
+
await initializeMessagePreviewSetting();
|
|
27199
|
+
if (subscriptions.length === 0) {
|
|
27200
|
+
subscriptions.push(
|
|
27201
|
+
// GLOBAL_BAN
|
|
27202
|
+
onClientBanned((_) => {
|
|
27203
|
+
terminateClient("globalBan" /* Amity.TokenTerminationReason.GLOBAL_BAN */);
|
|
27204
|
+
subscriptions.forEach(fn => fn());
|
|
27205
|
+
unsubWatcher();
|
|
27206
|
+
}), onTokenTerminated(_ => {
|
|
27207
|
+
terminateClient();
|
|
27208
|
+
subscriptions.forEach(fn => fn());
|
|
27209
|
+
unsubWatcher();
|
|
27210
|
+
}), onUserDeleted$2((user) => {
|
|
27211
|
+
if (user.userId === client.userId) {
|
|
27212
|
+
terminateClient("userDeleted" /* Amity.TokenTerminationReason.USER_DELETED */);
|
|
27213
|
+
subscriptions.forEach(fn => fn());
|
|
27214
|
+
unsubWatcher();
|
|
27215
|
+
}
|
|
27216
|
+
}), onTokenExpired(state => {
|
|
27217
|
+
SessionWatcher$1.getInstance().setSessionState(state);
|
|
27218
|
+
logout();
|
|
27219
|
+
subscriptions.forEach(fn => fn());
|
|
27220
|
+
}),
|
|
27221
|
+
// NOTE: This is a temporary solution to handle the channel marker when the user is forced to leave
|
|
27222
|
+
// the channel because currently backend can't handle this, so every time a user is banned from
|
|
27223
|
+
// a channel or the channel is deleted the channel's unread count will not be reset to zero
|
|
27224
|
+
onChannelDeleted(removeChannelMarkerCache), onChannelMemberBanned(removeChannelMarkerCache), markReadEngineOnLoginHandler(), analyticsEngineOnLoginHandler(), objectResolverEngineOnLoginHandler());
|
|
27225
|
+
if (client.useLegacyUnreadCount) {
|
|
27226
|
+
subscriptions.push(readReceiptSyncEngineOnLoginHandler());
|
|
27227
|
+
}
|
|
27228
|
+
else
|
|
27229
|
+
subscriptions.push(legacyReadReceiptSyncEngineOnLoginHandler());
|
|
27230
|
+
}
|
|
27231
|
+
return true;
|
|
27232
|
+
};
|
|
27233
|
+
/* end_public_function */
|
|
27234
|
+
|
|
27037
27235
|
/**
|
|
27038
27236
|
* ```js
|
|
27039
27237
|
* import { isConnected } from '@amityco/ts-sdk'
|
|
@@ -27439,6 +27637,7 @@ var index$n = /*#__PURE__*/Object.freeze({
|
|
|
27439
27637
|
login: login,
|
|
27440
27638
|
logout: logout,
|
|
27441
27639
|
secureLogout: secureLogout,
|
|
27640
|
+
resumeSession: resumeSession,
|
|
27442
27641
|
isConnected: isConnected,
|
|
27443
27642
|
getFeedSettings: getFeedSettings,
|
|
27444
27643
|
renewal: renewal,
|
|
@@ -35133,7 +35332,8 @@ class ChannelMemberLiveCollectionController extends LiveCollectionController {
|
|
|
35133
35332
|
const data = this.applyFilter((_b = collection.data
|
|
35134
35333
|
.map(id => pullFromCache(['channelUsers', 'get', id]))
|
|
35135
35334
|
.filter(Boolean)
|
|
35136
|
-
.map(({ data }) => data)
|
|
35335
|
+
.map(({ data }) => data)
|
|
35336
|
+
.map(LinkedObject.channelMember)) !== null && _b !== void 0 ? _b : []);
|
|
35137
35337
|
if (!this.shouldNotify(data) && origin === 'event')
|
|
35138
35338
|
return;
|
|
35139
35339
|
this.callback({
|
|
@@ -41727,7 +41927,7 @@ var index$5 = /*#__PURE__*/Object.freeze({
|
|
|
41727
41927
|
getPoll: getPoll
|
|
41728
41928
|
});
|
|
41729
41929
|
|
|
41730
|
-
const privateKey = "-----BEGIN PRIVATE KEY-----\
|
|
41930
|
+
const privateKey = "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDHo80SecH7FuF2\nhFYnb+l26/VN8UMLXAQFLnxciNTEwkGVFMpdezlH8rU2HtUJL4RETogbAOLVY0XM\njs6sPn8G1nALmh9qeDpUtVqFOVtBHxEZ910TLOtQiunjqJKO5nWdqZ71EC3OFluR\niGQkO84BiIFbv37ub7xl3S8XarbtKoLcyVpkDHi+1wx1pgCAn6gtBUgckPL5NR8j\nLseabl3HAXQfhTCKo4tmOFM2Dxwl1IUMmIJrJg/aIU/U0tj/1Eoo7mG0JcNWX19l\nW3EecCbi0ncCJOrkUdwlBrcjaMayaX/ubEwyUeTGiLdyc4L3GRLHjyK8xgVNXRMH\nbZWJ2a5NAgMBAAECggEASxuE+35zTFO/XydKgmvIGcWL9FbgMlXb7Vcf0nBoG945\nbiz0NVc2paraIhJXc608xbYF3qLmtAE1MVBI0ORyRdBHNxY024l/6H6SH60Ed+uI\nM4ysp5ourY6Vj+DLwpdRiI9YDjqYAQDIUmhNxJP7XPhOMoZI6st+xZQBM34ic/bv\nAMSJm9OZphSp3+qXVkFZztr2mxD2EZSJJLYxi8BCdgM2qhazalbcJ6zDKHCZWVWm\n8RRxDGldyMb/237JxETzP40tAlzOZDmBAbUgEnurDJ93RVDIE3rbZUshwgeQd18a\nem096mWgvB1AIKYgsTAR3pw+V19YWAjq/glP6fz8wQKBgQD/oQq+ukKF0PRgBeM5\ngeTjSwsdGppQLmf5ndujvoiz/TpdjDEPu6R8kigQr1rG2t4K/yfdZoI8RdmJD1al\n3Q7N9hofooSy4rj6E3txzWZCHJjHad2cnCp/O26HiReGAl7wTcfTmNdiFHhZQzm5\nJBkvWAiwuvQMNfEbnXxw6/vIDwKBgQDH7fX8gsc77JLvAWgp1MaQN/sbqVb6JeT1\nFQfR8E/WFCSmzQBtNzd5KgYuCeelwr/8DyYytvN2BzCYZXp73gI1jF3YlW5jVn74\nOY6TwQ095digwo6Z0yuxopdIOApKgAkL9PRKgNrqAf3NAyMua6lOGifzjDojC3KU\nfylQmxMn4wKBgHp2B9O/H0dEBw5JQ8W0+JX6yWQz7mEjGiR2/1W+XXb8hQ1zr709\nw1r6Gb+EghRpnZ3fBpYGGbYOMFx8wKHM+N6qW3F0ReX8v2juFGE8aRSa5oYBrWzt\nU16Idjbv8hj84cZ1PJmdyvDtpYn9rpWHOZl4rxEbPvbqkIsOMyNVqdT5AoGAOSge\nmwIIU2le2FVeohbibXiToWTYKMuMmURZ5/r72AgKMmWJKbAPe+Q3wBG01/7FRBpQ\noU8Ma0HC8s6QJbliiEyIx9JwrJWd1vkdecBHONrtA4ibm/5zD2WcOllLF+FitLhi\n3qnX6+6F0IaFGFBPJrTzlv0P4dTz/OAdv52V7GECgYEA2TttOKBAqWllgOaZOkql\nLVMJVmgR7s6tLi1+cEP8ZcapV9aRbRzTAKXm4f8AEhtlG9F9kCOvHYCYGi6JaiWJ\nZkHjeex3T+eE6Di6y5Bm/Ift5jtVhJ4jCVwHOKTMej79NPUFTJfv8hCo29haBDv6\nRXFrv+T21KCcw8k3sJeJWWQ=\n-----END PRIVATE KEY-----";
|
|
41731
41931
|
/*
|
|
41732
41932
|
* The crypto algorithm used for importing key and signing string
|
|
41733
41933
|
*/
|