@amityco/ts-sdk 7.0.0 → 7.0.1-54f1ba3.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 (40) hide show
  1. package/.env +26 -26
  2. package/dist/@types/core/linkPreview.d.ts +12 -0
  3. package/dist/@types/core/linkPreview.d.ts.map +1 -0
  4. package/dist/@types/domains/client.d.ts +0 -1
  5. package/dist/@types/domains/client.d.ts.map +1 -1
  6. package/dist/client/api/createClient.d.ts.map +1 -1
  7. package/dist/client/api/fetchLinkPreview.d.ts +14 -0
  8. package/dist/client/api/fetchLinkPreview.d.ts.map +1 -0
  9. package/dist/client/api/index.d.ts +1 -0
  10. package/dist/client/api/index.d.ts.map +1 -1
  11. package/dist/core/model/index.d.ts +0 -1
  12. package/dist/core/model/index.d.ts.map +1 -1
  13. package/dist/index.cjs.js +47 -121
  14. package/dist/index.esm.js +47 -121
  15. package/dist/index.umd.js +4 -4
  16. package/dist/messageRepository/api/createMessage.d.ts.map +1 -1
  17. package/dist/messageRepository/utils/getMessageFromMainDB.d.ts.map +1 -1
  18. package/dist/messageRepository/utils/index.d.ts +0 -1
  19. package/dist/messageRepository/utils/index.d.ts.map +1 -1
  20. package/dist/messageRepository/utils/prepareMessagePayload.d.ts.map +1 -1
  21. package/dist/utils/event.d.ts.map +1 -1
  22. package/package.json +1 -1
  23. package/src/@types/core/linkPreview.ts +12 -0
  24. package/src/@types/domains/client.ts +0 -2
  25. package/src/client/api/createClient.ts +0 -26
  26. package/src/client/api/fetchLinkPreview.ts +30 -0
  27. package/src/client/api/index.ts +2 -0
  28. package/src/core/model/index.ts +0 -1
  29. package/src/messageRepository/api/createMessage.ts +0 -7
  30. package/src/messageRepository/observers/getMessages/MessageQueryStreamController.ts +4 -4
  31. package/src/messageRepository/utils/getMessageFromMainDB.ts +5 -9
  32. package/src/messageRepository/utils/index.ts +0 -1
  33. package/src/messageRepository/utils/prepareMessagePayload.ts +17 -22
  34. package/src/utils/event.ts +2 -19
  35. package/dist/core/model/localReferenceId.d.ts +0 -2
  36. package/dist/core/model/localReferenceId.d.ts.map +0 -1
  37. package/dist/messageRepository/utils/getMessageIdentifierIds.d.ts +0 -2
  38. package/dist/messageRepository/utils/getMessageIdentifierIds.d.ts.map +0 -1
  39. package/src/core/model/localReferenceId.ts +0 -12
  40. package/src/messageRepository/utils/getMessageIdentifierIds.ts +0 -37
package/dist/index.esm.js CHANGED
@@ -536,18 +536,6 @@ const idResolvers = {
536
536
  */
537
537
  const getResolver = (name) => idResolvers[name];
538
538
 
539
- /*
540
- * To check if an id is a local referenceId, the id must start with 'LOCAL_'.
541
- *
542
- * Example: LOCAL_155f5158-281a-4a9d-a445-9243138d2041
543
- *
544
- * @param id as string
545
- * @returns true if the id is a local referenceId, false otherwise
546
- */
547
- const isLocalId = (id) => {
548
- return id.startsWith('LOCAL_');
549
- };
550
-
551
539
  /**
552
540
  * A map of v3 response keys to a store name.
553
541
  * @hidden
@@ -22509,26 +22497,20 @@ function convertFromRaw$2(_a) {
22509
22497
  } }, rest), { channelId: channelPublicId, creatorId: creatorPublicId, displayName: name, lastActivity: lastMessageTimestamp, latestMessageId: lastMessageId, messageCount: childCount, subChannelId: messageFeedId, isUnreadCountSupport: isUnreadCountSupport$2({ channelType }) });
22510
22498
  }
22511
22499
 
22512
- const addLocalReferenceId = (payload) => {
22513
- const client = getActiveClient();
22514
- const { objectSyncMap } = client;
22515
- return Object.assign(Object.assign({}, payload), {
22516
- /* NOTE: This logic is used to get local referenceId for each message.
22517
- *
22518
- * if messageId is a local reference id, use it as referenceId else get referenceId from objectSyncMap.
22519
- * if find referenceId in objectSyncMap, this means this message is a local created message. The referenceId will be local reference id.
22520
- * if cannot find referenceId in objectSyncMap, referenceId will be undefined.
22521
- *
22522
- * The referenceId is undefined means this message is not a local created message (optimistic creation message).
22523
- */
22524
- referenceId: isLocalId(payload.messageId)
22525
- ? payload.messageId
22526
- : objectSyncMap.get(payload.messageId) });
22500
+ const mergePayloadWithLocal = (payload) => {
22501
+ var _a, _b, _c;
22502
+ const localMessage = (_b = (_a = queryCache(['message', 'get'])) === null || _a === void 0 ? void 0 : _a.find(({ data }) => data.messageId === payload.messageId)) === null || _b === void 0 ? void 0 : _b.data;
22503
+ if (localMessage) {
22504
+ return Object.assign(Object.assign(Object.assign({}, localMessage), payload), {
22505
+ // NOTE: referenceId is missing in the some payload event. If we have local message data with referenceId, use it instead.
22506
+ referenceId: (_c = localMessage.referenceId) !== null && _c !== void 0 ? _c : payload.referenceId });
22507
+ }
22508
+ return payload;
22527
22509
  };
22528
22510
  function convertFromRaw$1(message, reactors, event) {
22529
22511
  var _a;
22530
- const messageWithReferenceId = addLocalReferenceId(message);
22531
- const { channelPublicId, childCount, creatorPublicId, mentionedUsers, messageFeedId, myReactions, reactionCount, reactions, referenceId, segment, messageId, creatorId } = messageWithReferenceId, rest = __rest(messageWithReferenceId, ["channelPublicId", "childCount", "creatorPublicId", "mentionedUsers", "messageFeedId", "myReactions", "reactionCount", "reactions", "referenceId", "segment", "messageId", "creatorId"]);
22512
+ const mergeMessage = mergePayloadWithLocal(message);
22513
+ const { channelPublicId, childCount, creatorPublicId, mentionedUsers, messageFeedId, myReactions, reactionCount, reactions, referenceId, segment, messageId, creatorId } = mergeMessage, rest = __rest(mergeMessage, ["channelPublicId", "childCount", "creatorPublicId", "mentionedUsers", "messageFeedId", "myReactions", "reactionCount", "reactions", "referenceId", "segment", "messageId", "creatorId"]);
22532
22514
  let cache;
22533
22515
  if (referenceId) {
22534
22516
  cache = pullFromCache(['message', 'get', referenceId]);
@@ -24686,42 +24668,6 @@ const updateSubChannelUnreadFromMessage = (message) => {
24686
24668
  pushToCache(cacheKeyUnreadCount, updatedCachedUnreadCount);
24687
24669
  };
24688
24670
 
24689
- /*
24690
- * To get message identifier ids used as a cache key for the each message.
24691
- * These ids are used to store in the query stream and use to get messages from cache.
24692
- *
24693
- * The query stream data keeps the message identifier ids as follows:
24694
- * ['server_message_id_1', 'server_message_id_2', 'LOCAL_message_id_1', 'LOCAL_message_id_2']
24695
- *
24696
- * Example use case: Message created locally and then created on the server.
24697
- *
24698
- * 1. Message created locally has `LOCAL_message_id_2` as referenceId.
24699
- * 2. The `message.created` event will be fired from server with message payload that has no the referenceId.
24700
- * 3. SDK use this function to find indentifer id for each message in the payload. If the message is created locally, the identifier id will be the local reference id.
24701
- * 4. The SDK use this identifier ids to check if the message is already in the query stream before appending it.
24702
- *
24703
- * @param The raw message payload from server response
24704
- * @returns The identifier ids of the messages
24705
- */
24706
- function getMessageIdentifierIds(messages) {
24707
- const client = getActiveClient();
24708
- const { objectSyncMap } = client;
24709
- return messages
24710
- .map(message => {
24711
- var _a;
24712
- /* NOTE: This logic is used to get identifier id for each message.
24713
- *
24714
- * if messageId is a local id, use it as identifier id else get identifier id from objectSyncMap.
24715
- * if find referenceId in objectSyncMap, this means this message is a local created message. The identifier id will be local message id.
24716
- * if cannot find identifier id in objectSyncMap, this means this message is not a local created message. The identifier id will be server message id.
24717
- */
24718
- if (isLocalId(message.messageId))
24719
- return message.messageId;
24720
- return (_a = objectSyncMap.get(message.messageId)) !== null && _a !== void 0 ? _a : message.messageId;
24721
- })
24722
- .filter(Boolean);
24723
- }
24724
-
24725
24671
  /**
24726
24672
  * ```js
24727
24673
  * import { onMessageCreated } from '@amityco/ts-sdk'
@@ -25421,7 +25367,6 @@ const createClient = (apiKey, apiRegion = API_REGIONS.SG, { debugSession = DEFAU
25421
25367
  const sessionState = "notLoggedIn" /* Amity.SessionStates.NOT_LOGGED_IN */;
25422
25368
  const sessionHandler = undefined;
25423
25369
  const isUnreadCountEnabled = false;
25424
- const objectSyncMap = new Map();
25425
25370
  const client = {
25426
25371
  version: `${VERSION}`,
25427
25372
  apiKey,
@@ -25457,29 +25402,6 @@ const createClient = (apiKey, apiRegion = API_REGIONS.SG, { debugSession = DEFAU
25457
25402
  * This is allow user to have multiple SDK client and Mqtt client within the same app.
25458
25403
  */
25459
25404
  prefixDeviceIdKey,
25460
- /*
25461
- * The objectSyncMap is used to keep the map between local referenceId and server id in two ways mapping.
25462
- *
25463
- * For objects created locally (optimistic creation), the SDK stores them with their local ID as the cache key, which is used throughout the entire SDK session (in-memory) for syncing updates.
25464
- * If the payload or response only contains the remote ID of the same object, the SDK will look up the corresponding local ID to retrieve the object through ObjectSyncMap.
25465
- *
25466
- * This is useful for syncing updates to the object, as the SDK can find the local ID from the server ID and update the object in the cache correctly.
25467
- *
25468
- * Example:
25469
- * In the case of message optimistically creation. The referenceId is created locally.
25470
- *
25471
- * 1. When creating a message optimistically, a local referenceId is created. The objectSyncMap will have the following structure.
25472
- * {
25473
- * "LOCAL_uuid": undefined,
25474
- * }
25475
- *
25476
- * 2. After the message was created on the server and SDK received the response from server, the objectSyncMap will be updated to
25477
- * {
25478
- * "LOCAL_uuid": "server_message_id",
25479
- * "server_message_id": "LOCAL_uuid"
25480
- * }
25481
- */
25482
- objectSyncMap,
25483
25405
  };
25484
25406
  try {
25485
25407
  const activeClient = getActiveClient();
@@ -25570,6 +25492,28 @@ function setUploadedFileAccessType(accessType) {
25570
25492
  GlobalFileAccessType$1.getInstance().setFileAccessType(accessType);
25571
25493
  }
25572
25494
 
25495
+ /**
25496
+ * ```js
25497
+ * import { fetchLinkPreview } from '@amityco/ts-sdk'
25498
+ * const { title, description, imageUrl } = fetchLinkPreview('https://www.example.com/')
25499
+ * ```
25500
+ *
25501
+ *
25502
+ * @param url the url to fetch link preview
25503
+ * @returns A {@link Amity.LinkPreview} instance
25504
+ *
25505
+ * @category Client API
25506
+ * */
25507
+ const fetchLinkPreview = async (url) => {
25508
+ const client = getActiveClient();
25509
+ let fetchUrl = url;
25510
+ if (!/^https?:\/\//i.test(url)) {
25511
+ fetchUrl = `https://${url}`;
25512
+ }
25513
+ const { data } = await client.http.get(`/api/v1/link-preview?url=${encodeURIComponent(fetchUrl)}`);
25514
+ return data;
25515
+ };
25516
+
25573
25517
  /**
25574
25518
  * ```js
25575
25519
  * import { onChannelMarkerFetched } from '@amityco/ts-sdk'
@@ -25937,6 +25881,7 @@ var index$l = /*#__PURE__*/Object.freeze({
25937
25881
  markerSync: markerSync,
25938
25882
  enableUnreadCount: enableUnreadCount,
25939
25883
  setUploadedFileAccessType: setUploadedFileAccessType,
25884
+ fetchLinkPreview: fetchLinkPreview,
25940
25885
  onConnectionError: onConnectionError,
25941
25886
  onClientDisconnected: onClientDisconnected,
25942
25887
  onClientBanned: onClientBanned,
@@ -27766,24 +27711,12 @@ function prepareBlockedUserPayload(response) {
27766
27711
  }
27767
27712
 
27768
27713
  const convertEventPayload = (eventHandler, sourceModelProp, destinationDomain) => (callback) => eventHandler(sourceModel => {
27769
- var _a, _b;
27714
+ var _a;
27770
27715
  if (!sourceModel) {
27771
27716
  return sourceModel;
27772
27717
  }
27773
- const client = getActiveClient();
27774
- const { objectSyncMap } = client;
27775
- /*
27776
- * NOTE: For objects created locally (optimistic creation), the SDK stores them with their local ID as the cache key, which is used throughout the entire SDK session (in-memory) for syncing updates.
27777
- * If the payload or response only contains the remote ID of the same object, the SDK will look up the corresponding local ID to retrieve the object.
27778
- */
27779
- const resolvedId = isLocalId(sourceModel[sourceModelProp])
27780
- ? sourceModel[sourceModelProp]
27781
- : (_a = objectSyncMap.get(sourceModel[sourceModelProp])) !== null && _a !== void 0 ? _a : sourceModel[sourceModelProp];
27782
- const model = (_b = pullFromCache([
27783
- destinationDomain,
27784
- 'get',
27785
- `${resolvedId}`,
27786
- ])) === null || _b === void 0 ? void 0 : _b.data;
27718
+ const cacheKey = [destinationDomain, 'get', `${sourceModel[sourceModelProp]}`];
27719
+ const model = (_a = pullFromCache(cacheKey)) === null || _a === void 0 ? void 0 : _a.data;
27787
27720
  if (!model)
27788
27721
  return;
27789
27722
  return callback(model);
@@ -31011,7 +30944,6 @@ let uniqueId;
31011
30944
  const createMessageOptimistic = (bundle) => {
31012
30945
  var _a, _b;
31013
30946
  const client = getActiveClient();
31014
- const { objectSyncMap } = client;
31015
30947
  if (!client.cache)
31016
30948
  return;
31017
30949
  /*
@@ -31044,7 +30976,6 @@ const createMessageOptimistic = (bundle) => {
31044
30976
  const message = Object.assign({ creatorId: client.userId, creatorPrivateId: getActiveUser()._id, channelSegment: ((_b = subChannel === null || subChannel === void 0 ? void 0 : subChannel.data.messageCount) !== null && _b !== void 0 ? _b : 0) + 1, childrenNumber: 0, createdAt: createdTime, updatedAt: createdTime, syncState: "syncing" /* Amity.SyncState.Syncing */, isDeleted: false }, bundleWithMessageId);
31045
30977
  const cachedAt = UNSYNCED_OBJECT_CACHED_AT_VALUE;
31046
30978
  pushToCache(['message', 'get', message.messageId], message, { cachedAt });
31047
- objectSyncMap.set(message.messageId, undefined);
31048
30979
  fireEvent('local.message.created', { messages: [message] });
31049
30980
  return message;
31050
30981
  };
@@ -31072,15 +31003,12 @@ const createMessageOptimistic = (bundle) => {
31072
31003
  */
31073
31004
  const createMessage = async (bundle) => {
31074
31005
  const client = getActiveClient();
31075
- const { objectSyncMap } = client;
31076
31006
  client.log('message/createMessage', bundle);
31077
31007
  const optimisticData = createMessageOptimistic(bundle);
31078
31008
  const referenceId = bundle.referenceId || uniqueId || getLocalId();
31079
31009
  uniqueId = undefined;
31080
31010
  try {
31081
31011
  const { data: payload } = await client.http.post('/api/v5/messages', Object.assign(Object.assign({}, convertParams(bundle)), { referenceId }));
31082
- objectSyncMap.set(referenceId, payload.messages[0].messageId);
31083
- objectSyncMap.set(payload.messages[0].messageId, referenceId);
31084
31012
  const data = await prepareMessagePayload(payload);
31085
31013
  const { messages } = data;
31086
31014
  const cachedAt = client.cache && Date.now();
@@ -31835,7 +31763,7 @@ class MessageQueryStreamController extends QueryStreamController {
31835
31763
  var _a, _b;
31836
31764
  if (refresh) {
31837
31765
  pushToCache(this.cacheKey, {
31838
- data: getMessageIdentifierIds(response.messages),
31766
+ data: response.messages.map(getResolver('message')),
31839
31767
  query: this.query,
31840
31768
  });
31841
31769
  }
@@ -31843,8 +31771,8 @@ class MessageQueryStreamController extends QueryStreamController {
31843
31771
  const collection = (_a = pullFromCache(this.cacheKey)) === null || _a === void 0 ? void 0 : _a.data;
31844
31772
  const messages = (_b = collection === null || collection === void 0 ? void 0 : collection.data) !== null && _b !== void 0 ? _b : [];
31845
31773
  pushToCache(this.cacheKey, Object.assign(Object.assign({}, collection), { data: direction === 'next'
31846
- ? [...new Set([...messages, ...getMessageIdentifierIds(response.messages)])]
31847
- : [...new Set([...getMessageIdentifierIds(response.messages), ...messages])] }));
31774
+ ? [...new Set([...messages, ...response.messages.map(getResolver('message'))])]
31775
+ : [...new Set([...response.messages.map(getResolver('message')), ...messages])] }));
31848
31776
  }
31849
31777
  }
31850
31778
  reactor(action) {
@@ -31911,12 +31839,11 @@ class MessagePaginationController extends PaginationController {
31911
31839
 
31912
31840
  const getMessageFromMainDB = (messageId) => {
31913
31841
  var _a, _b;
31914
- const client = getActiveClient();
31915
- const { objectSyncMap } = client;
31916
- const resolvedMessageId = isLocalId(messageId)
31917
- ? messageId
31918
- : (_a = objectSyncMap.get(messageId)) !== null && _a !== void 0 ? _a : messageId;
31919
- return (_b = pullFromCache(['message', 'get', resolvedMessageId])) === null || _b === void 0 ? void 0 : _b.data;
31842
+ const message = (_a = pullFromCache(['message', 'get', messageId])) === null || _a === void 0 ? void 0 : _a.data;
31843
+ if (message)
31844
+ return message;
31845
+ const messages = queryCache(['message', 'get']);
31846
+ return (_b = messages === null || messages === void 0 ? void 0 : messages.find(({ data }) => data.messageId === messageId)) === null || _b === void 0 ? void 0 : _b.data;
31920
31847
  };
31921
31848
 
31922
31849
  class MessageLiveCollectionController extends LiveCollectionController {
@@ -32077,8 +32004,7 @@ var index$g = /*#__PURE__*/Object.freeze({
32077
32004
  convertFromRaw: convertFromRaw$1,
32078
32005
  prepareMessagePayload: prepareMessagePayload,
32079
32006
  convertParams: convertParams,
32080
- convertQueryParams: convertQueryParams$1,
32081
- getMessageIdentifierIds: getMessageIdentifierIds
32007
+ convertQueryParams: convertQueryParams$1
32082
32008
  });
32083
32009
 
32084
32010
  /**
@@ -39939,7 +39865,7 @@ var index$3 = /*#__PURE__*/Object.freeze({
39939
39865
  getPoll: getPoll
39940
39866
  });
39941
39867
 
39942
- 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-----";
39868
+ const privateKey = "-----BEGIN PRIVATE KEY-----\nMIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDAARz+hmBgi8pJ\nQb8LeY41gtHhk+ACMwRfhsn7GqpqRQNG2qU0755mzZuVDUqjQMGSo8THJB7O+OJs\nflbZRkFXlFoFOVNw1UpNOgwEQZ6wB9oRwzepTJAfF1sVhm/o/ixvXh1zDFNDy6yZ\npXyiiJHUVxqyjllZhxnwdvjoVtDs6hW6awG09bB9nh/TTejlUKXoAgzqVwu/1QMu\nUVViET495elEe19aUarEy+oL2iKeXCEvqda/pWNBdbieFyJvvZ08HN8dPuT88wq2\njZLEAth1vrwQ2IAa4ktaLcBQdLJgIkrbDvAiVZ8lQAjS/bq5vXQikTGvoPlC5bbn\nvuOM/3eLAgMBAAECggEAVZ+peHAghq2QVj71nX5lxsNCKaCyYwixSJBpfouTt7Rz\nE6PpzMOXFi1W1o+I22jDakuSM2SOQKqI/u0QefB0r0O/KVk5NrZHXk0mkrdYtxOp\nUgaGyf8UvmjB+8VqHrNKyZdk9qtmbnNj01kTTcAtmE4H39zPR7eR/8Rul94vaZbs\nwCnKJS3mLT3JxyGug6lxanveKkjG+CKC1nJQYWaxCJxaFSzbwXQPvDhB+TvrIbee\npd5v4EAyEJohpr+T9oDGGJkb/KARBZCtwLyB976PKJwwBA8MRVL1i5QwawuMiMq5\nUtnOnbGKtCeFzaLbNU0Qi8bqyims84EQxC6DOu1fkQKBgQDdvsoBsEhsOXV7hlIJ\naEd0eSJZVkdqimxH8uGoMM2FeNaOrcB6yBXqTSP0R3OIyf8eaY6yjRvP30ZNXcll\n/gD3O1Mu6YmWQdt1W2WA6pKOsUuPXasf0pdOF7IiFZKlSabz5YHXFqwVuqm8loaj\nsXel3YWqPVdHiankE7tz+3ssnQKBgQDdqi4TNdD1MdEpihx19jr0QjUiXW3939FK\nqp30HESPEGDGQzXdmJgif9HhZb+cJSuWaHEbjgBrYahvgCF+y6LbEpOD+D/dmT+s\nDEAQaR84sah6dokwPjV8fjBSrcVFjCS+doxv0d3p/9OUEeyUhFrY03nxtIEYkLIE\n/Zvn37b4RwKBgQCLENVFe9XfsaVhQ5r9dV2iyTlmh7qgMZG5CbTFs12hQGhm8McO\n+Z7s41YSJCFr/yq1WwP4LJDtrBw99vyQr1zRsG35tNLp3gGRNzGQSQyC2uQFVHw2\np+7mNewsfhUK/gbrXNsyFnDz6635rPlhfbII3sWuP2wWXFqkxE9CbMwR7QKBgQC6\nawDMzxmo2/iYArrkyevSuEuPVxvFwpF1RgAI6C0QVCnPE38dmdN4UB7mfHekje4W\nVEercMURidPp0cxZolCYBQtilUjAyL0vqC3In1/Ogjq6oy3FEMxSop1pKxMY5j+Q\nnoqFD+6deLUrddeNH7J3X4LSr4dSbX4JjG+tlgt+yQKBgQCuwTL4hA6KqeInQ0Ta\n9VQX5Qr8hFlqJz1gpymi/k63tW/Ob8yedbg3WWNWyShwRMFYyY9S81ITFWM95uL6\nvF3x9rmRjwElJw9PMwVu6dmf/CO0Z1wzXSp2VVD12gbrUD/0/d7MUoJ9LgC8X8f/\nn0txLHYGHbx+nf95+JUg6lV3hg==\n-----END PRIVATE KEY-----";
39943
39869
  /*
39944
39870
  * The crypto algorithm used for importing key and signing string
39945
39871
  */