spasm.js 2.0.0-beta.4 → 2.0.0-beta.6

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/README.md CHANGED
@@ -267,6 +267,7 @@ Option 1. Import separate functions:
267
267
  const {identifyObject} = require('spasm.js')
268
268
  const {convertToSpasm} = require('spasm.js')
269
269
  const {mergeSpasmEventsV2} = require('spasm.js')
270
+ const {mergeDifferentSpasmEventsV2} = require('spasm.js')
270
271
 
271
272
  const event = {
272
273
  // some event
@@ -279,9 +280,15 @@ const info = identifyObject(event)
279
280
  const spasmEvent = convertToSpasm(event)
280
281
 
281
282
  // Merge events into one event
282
- const spasmEvent = mergeSpasmEventsV2(
283
+ const spasmEvent = mergeSpasmEventsV2([
283
284
  event, eventWithStats, eventWithComments
284
- )
285
+ ])
286
+
287
+ // Merge different events
288
+ const spasmEvents = mergeDifferentSpasmEventsV2([
289
+ event, eventWithStats, eventWithComments,
290
+ anotherEvent, anotherEventWithStats
291
+ ])
285
292
  ```
286
293
 
287
294
  Option 2. Import all functions:
@@ -300,9 +307,15 @@ const info = spasm.identifyObject(event)
300
307
  const spasmEvent = spasm.convertToSpasm(event)
301
308
 
302
309
  // Merge events into one event
303
- const spasmEvent = spasm.mergeSpasmEventsV2(
310
+ const spasmEvent = spasm.mergeSpasmEventsV2([
304
311
  event, eventWithStats, eventWithComments
305
- )
312
+ ])
313
+
314
+ // Merge different events
315
+ const spasmEvents = spasm.mergeDifferentSpasmEventsV2([
316
+ event, eventWithStats, eventWithComments,
317
+ anotherEvent, anotherEventWithStats
318
+ ])
306
319
  ```
307
320
 
308
321
  #### ESM (import)
@@ -392,6 +405,38 @@ const rootIds = spasm.getAllRootIds(event)
392
405
  const signatures = spasm.getAllSignatures(event)
393
406
  ```
394
407
 
408
+ ```js
409
+ // Get a stat object of a specified action
410
+ const stats = spasm.getStatByAction(event, "react")
411
+ ```
412
+
413
+ ```js
414
+ // Get a total number of a specified action
415
+ const stats = spasm.getTotalOfAction(event, "reply")
416
+ ```
417
+
418
+ ```js
419
+ // Get a total number of a specified reaction
420
+ const stats = spasm.getTotalOfReaction(event, "upvote")
421
+ ```
422
+
423
+ ```js
424
+ // Get a total number of the most popular reaction
425
+ const stats = spasm.getTotalOfMostPopularReaction(event)
426
+ ```
427
+
428
+ ```js
429
+ // Get a total number of a react/reply action
430
+ const stats = spasm.getTotalOfReact(event)
431
+ const stats = spasm.getTotalOfReply(event)
432
+
433
+ // aliases
434
+ const stats = spasm.getTotalOfActionReact(event)
435
+ const stats = spasm.getTotalOfReactAction(event)
436
+ const stats = spasm.getTotalOfActionReply(event)
437
+ const stats = spasm.getTotalOfReplyAction(event)
438
+ ```
439
+
395
440
  ```js
396
441
  // Extract an ID from an event.
397
442
  const nostrId = spasm.getIdByFormat(event, { name: "nostr-hex" })
@@ -1,6 +1,11 @@
1
1
  import { UnknownPostOrEvent, UnknownEvent, NostrSpasmEvent, NostrSpasmEventSignedOpened, NostrSpasmVersion, LinkObject, SpasmEventIdFormatV2, SpasmEventAddressFormatV2, SpasmEventSignatureFormatV2, SpasmEventV2, SpasmEventAuthorV2, SpasmEventBodyHostV2, SpasmEventMediaV2, SpasmEventIdV2, SpasmEventBodyReferenceV2, SpasmEventBodyParentV2, ConvertToSpasmConfig, CustomConvertToSpasmConfig, CustomSanitizationConfig, SanitizationConfig, UnknownEventV2, SpasmEventStatV2, SpasmEventChildV2 } from "./../types/interfaces.js";
2
2
  export declare const hasValue: (el?: any) => boolean;
3
+ export declare const isStringOrNumber: (val: any) => boolean;
4
+ export declare const isNumberOrString: (val: any) => boolean;
5
+ export declare const ifStringOrNumber: (val: any) => boolean;
6
+ export declare const ifNumberOrString: (val: any) => boolean;
3
7
  export declare const isObjectWithValues: (val: any) => boolean;
8
+ export declare const isArrayWithValues: (array: any) => boolean;
4
9
  export declare const extractVersion: (versionString: string) => string;
5
10
  export declare const extractSealedEvent: (unknownPostOrEvent: UnknownPostOrEvent) => UnknownEvent | false;
6
11
  export declare const toBeTimestamp: (time: any) => number | undefined;
@@ -58,6 +63,16 @@ export declare const getAllRootIds: (unknownEvent: UnknownEventV2, toLowerCase?:
58
63
  export declare const getAllSignatures: (unknownEvent: UnknownEventV2, toLowerCase?: boolean) => (string | number)[];
59
64
  export declare const getSignersListedIn: (unknownEvent: UnknownEventV2, list: (string | number)[]) => (string | number)[];
60
65
  export declare const getPubkeysListedIn: (unknownEvent: UnknownEventV2, list: (string | number)[]) => (string | number)[];
66
+ export declare const getStatByAction: (unknownEvent: any, action?: string | number) => SpasmEventStatV2 | null;
67
+ export declare const getTotalOfReaction: (unknownEvent: any, reaction?: string | number) => number;
68
+ export declare const getTotalOfMostPopularReaction: (unknownEvent: any) => number;
69
+ export declare const getTotalOfAction: (unknownEvent: any, action?: string | number) => number;
70
+ export declare const getTotalOfReply: (unknownEvent: any) => number;
71
+ export declare const getTotalOfReplyAction: (unknownEvent: any) => number;
72
+ export declare const getTotalOfActionReply: (unknownEvent: any) => number;
73
+ export declare const getTotalOfReact: (unknownEvent: any) => number;
74
+ export declare const getTotalOfReactAction: (unknownEvent: any) => number;
75
+ export declare const getTotalOfActionReact: (unknownEvent: any) => number;
61
76
  export declare const isAnySignerListedIn: (unknownEvent: UnknownEventV2, list: (string | number)[]) => boolean;
62
77
  export declare const isAnyPubkeyListedIn: (unknownEvent: UnknownEventV2, list: (string | number)[]) => boolean;
63
78
  export declare const areAllSignersListedIn: (unknownEvent: UnknownEventV2, list: (string | number)[]) => boolean;
@@ -66,9 +81,12 @@ export declare const getIdByFormat: (unknownEvent: UnknownEventV2, customIdForma
66
81
  export declare const extractIdByFormat: (unknownEvent: UnknownEventV2, customIdFormat?: SpasmEventIdFormatV2) => string | number | null;
67
82
  export declare const extractSpasmId01: (unknownEvent: UnknownEventV2) => string | number;
68
83
  export declare const toBeSpasmEventV2: (unknownEvent: UnknownEventV2) => SpasmEventV2 | null;
84
+ export declare const toBeSpasmEventsV2: (unknownEvents: any[]) => SpasmEventV2[] | null;
69
85
  export declare const extractSignerFromEthereumSignature: (signedString: string, signature: string) => string | null;
70
86
  export declare const mergeSpasmEventsV2: (spasmEvents: any[], depth?: number) => SpasmEventV2 | null;
71
87
  export declare const mergeDifferentSpasmEventsV2: (unknownEvents: any[], depth?: number) => SpasmEventV2[] | null;
88
+ export declare const sortSpasmEventsV2ByDbAddedTimestamp: (unknownEvents: any[], order?: "asc" | "desc") => SpasmEventV2[] | null;
89
+ export declare const sortSpasmEventsV2: (unknownEvents: any[], order?: "asc" | "desc") => SpasmEventV2[] | null;
72
90
  export declare const ifEventsHaveSameSpasmId01: (event1: UnknownEventV2, event2: UnknownEventV2) => Boolean;
73
91
  export declare const deepCopyOfObject: (obj: any) => any;
74
92
  export declare const copyOf: (obj: any) => any;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src.ts/utils/utils.ts"],"names":[],"mappings":"AASA,OAAO,EACL,kBAAkB,EAAE,YAAY,EAAE,eAAe,EACjD,2BAA2B,EAAE,iBAAiB,EAC9C,UAAU,EACV,oBAAoB,EACpB,yBAAyB,EACzB,2BAA2B,EAC3B,YAAY,EACZ,kBAAkB,EAClB,oBAAoB,EACpB,iBAAiB,EACjB,cAAc,EAGd,yBAAyB,EAGzB,sBAAsB,EACtB,oBAAoB,EACpB,0BAA0B,EAC1B,wBAAwB,EACxB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,0BAA0B,CAAA;AA4BjC,eAAO,MAAM,QAAQ,QAAS,GAAG,YAgChC,CAAA;AAED,eAAO,MAAM,kBAAkB,QAAS,GAAG,KAAG,OAO7C,CAAA;AAED,eAAO,MAAM,cAAc,kBACV,MAAM,KACpB,MAWF,CAAA;AAED,eAAO,MAAM,kBAAkB,uBACT,kBAAkB,KACrC,YAAY,GAAG,KAyBjB,CAAA;AAED,eAAO,MAAM,aAAa,SAAU,GAAG,KAAG,MAAM,GAAG,SAiBlD,CAAC;AAEF,eAAO,MAAM,oBAAoB,UACxB,eAAe,GAAG,2BAA2B,KACnD,iBAAiB,GAAG,IAmBtB,CAAA;AAmBD,eAAO,MAAM,UAAU,WAAY,GAAG,KAAG,OAWxC,CAAA;AAED,eAAO,MAAM,uBAAuB,QAC7B,GAAG,QACF,GAAG,KACR,UAAU,GAAG,IA+Df,CAAA;AAED,eAAO,MAAM,kBAAkB,WACrB,MAAM,GAAG,MAAM,KACtB,oBAAoB,GAAG,2BAA2B,GAAG,SAiFvD,CAAA;AAED,eAAO,MAAM,eAAe,OACtB,MAAM,GAAG,MAAM,KAClB,oBAEF,CAAA;AAED,eAAO,MAAM,oBAAoB,YACtB,MAAM,GAAG,MAAM,KACvB,yBAEF,CAAA;AAED,eAAO,MAAM,sBAAsB,YACxB,MAAM,GAAG,MAAM,KACvB,2BAEF,CAAA;AAED,eAAO,MAAM,eAAe,WAClB,MAAM,yBAEb,MAQF,CAAA;AAGD,eAAO,MAAM,qBAAqB,QAC3B,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,MAAM,EAAE,KACvC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAO7B,CAAA;AAGD,eAAO,MAAM,6BAA6B,UACjC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,QAAQ,MAAM,EAAE,KAC3C,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAE/B,CAAA;AAGD,eAAO,MAAM,4BAA4B,UAChC,GAAG,EAAE,KACX,GAAG,EA8BL,CAAA;AAED,eAAO,MAAM,kBAAkB,YACpB,GAAG,EAAE,WACN,MAAM,GAAG,MAAM,EAAE,KACxB,GAAG,EAqEL,CAAA;AAED,eAAO,MAAM,0BAA0B,YAC5B,kBAAkB,EAAE,KAC5B,kBAAkB,EA0GpB,CAAA;AAED,eAAO,MAAM,uBAAuB,YA7GzB,kBAAkB,EAAE,KAC5B,kBAAkB,EA4G4C,CAAA;AAEjE,eAAO,MAAM,4BAA4B,YAC9B,kBAAkB,EAAE,GAAG,iBAAiB,EAAE,OAC9C,MAAM,KACV,GAAG,EAoCL,CAAA;AAED,eAAO,MAAM,wBAAwB,UAC5B,oBAAoB,EAAE,KAC5B,oBAAoB,EActB,CAAA;AAED,eAAO,MAAM,qBAAqB,UAjBzB,oBAAoB,EAAE,KAC5B,oBAAoB,EAgBsC,CAAA;AAE7D,eAAO,MAAM,wBAAwB,UAnB5B,oBAAoB,EAAE,KAC5B,oBAAoB,EAkByC,CAAA;AAEhE,eAAO,MAAM,qBAAqB,UArBzB,oBAAoB,EAAE,KAC5B,oBAAoB,EAoBsC,CAAA;AAE7D,eAAO,MAAM,sBAAsB,WACzB,GAAG,KACV,iBAAiB,EA6JnB,CAAA;AAMD,eAAO,MAAM,0BAA0B,eACzB,yBAAyB,EAAE,KACtC,yBAAyB,EA+B3B,CAAA;AAED,eAAO,MAAM,sBAAsB,WACzB,sBAAsB,KAC7B,sBAuBF,CAAA;AAED,eAAO,MAAM,oBAAoB,SACzB,GAAG,EAAE,EAAE,KACZ,GAAG,EAAE,EAuEP,CAAA;AAED,eAAO,MAAM,+BAA+B,eAC9B,YAAY,mBACP,MAAM,GAAG,MAAM,YACvB,MAAM,KACd,IAeF,CAAA;AAGD,eAAO,MAAM,uBAAuB,kBACnB,MAAM,aACV,MAAM,iBACF,MAAM,KACpB,OAgBF,CAAA;AAED,eAAO,MAAM,WAAW,QAAO,IAE9B,CAAA;AAED,eAAO,MAAM,uCAAuC,iBACpC,MAAM,GAAG,GAAG,EAAE,iBACb,wBAAwB,KACtC,IAuFF,CAAA;AAED,eAAO,MAAM,iBAAiB,iBACd,MAAM,GAAG,GAAG,EAAE,WACnB,wBAAwB,KAChC,IAcF,CAAA;AAED,eAAO,MAAM,2BAA2B,QACjC,GAAG,KACP,GAKF,CAAA;AAED,eAAO,MAAM,0BAA0B,iBACvB,MAAM,GAAG,GAAG,EAAE,WACnB,wBAAwB,KAChC,IAKF,CAAA;AAED,eAAO,MAAM,aAAa,iBATV,MAAM,GAAG,GAAG,EAAE,WACnB,wBAAwB,KAChC,IAOoD,CAAA;AAEvD,eAAO,MAAM,UAAU,QAAU,GAAG,EAAE,SAErC,CAAA;AAED,eAAO,MAAM,WAAW,QAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAG,IAItD,CAAA;AAED,KAAK,wBAAwB,GAAG,iBAAiB,GAAG,aAAa,CAAA;AAEjE,eAAO,MAAM,YAAY,kBACR,MAAM,gBACP,MAAM,iBACN,wBAAwB,UAC/B,MAAM,KACZ,MAgDF,CAAA;AAED,eAAO,MAAM,YAAY,kBACR,oBAAoB,gBACrB,0BAA0B,iBAC1B,wBAAwB,KACrC,oBAIF,CAAA;AAED,eAAO,MAAM,wBAAwB,kBACpB,kBAAkB,gBACnB,wBAAwB,iBACxB,wBAAwB,KACrC,kBAIF,CAAA;AAED,eAAO,MAAM,oBAAoB,eACnB,YAAY,mBACP,UAAU,GAAG,OAAO,KACpC,OAoBF,CAAA;AAED,eAAO,MAAM,oBAAoB,eACnB,YAAY,KACvB,OAEF,CAAA;AAED,eAAO,MAAM,iBAAiB,eAChB,YAAY,KACvB,OAEF,CAAA;AAED,eAAO,MAAM,oBAAoB,eACnB,YAAY,iBACT,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,KAChD,OAoBF,CAAA;AAED,eAAO,MAAM,eAAe,eACd,YAAY,KACvB,OAEF,CAAA;AAED,eAAO,MAAM,aAAa,eACZ,YAAY,KACvB,OAEF,CAAA;AAED,eAAO,MAAM,eAAe,eACd,YAAY,KACvB,OAEF,CAAA;AAED,eAAO,MAAM,cAAc,eACb,YAAY,KACvB,OAEF,CAAA;AAED,eAAO,MAAM,aAAa,iBACV,cAAc,qBACV,OAAO,gBACZ,OAAO,KACnB,CAAC,MAAM,GAAG,MAAM,CAAC,EAiDnB,CAAA;AAED,eAAO,MAAM,kBAAkB,iBACf,cAAc,KAC3B,CAAC,MAAM,GAAG,MAAM,CAAC,EAEnB,CAAA;AAED,eAAO,MAAM,6BAA6B,qBACtB,cAAc,EAAE,gBACrB,OAAO,KACnB,CAAC,MAAM,GAAG,MAAM,CAAC,EA8BnB,CAAA;AAED,eAAO,MAAM,cAAc,iBACX,cAAc,gBACf,OAAO,KACnB,CAAC,MAAM,GAAG,MAAM,CAAC,EAyBnB,CAAA;AAED,eAAO,MAAM,eAAe,iBACZ,cAAc,gBACf,OAAO,KACnB,CAAC,MAAM,GAAG,MAAM,CAAC,EA+BnB,CAAA;AAGD,eAAO,MAAM,aAAa,iBACV,cAAc,gBACf,OAAO,KACnB,CAAC,MAAM,GAAG,MAAM,CAAC,EA+BnB,CAAA;AAED,eAAO,MAAM,gBAAgB,iBACb,cAAc,gBACf,OAAO,KACnB,CAAC,MAAM,GAAG,MAAM,CAAC,EA+CnB,CAAA;AAED,eAAO,MAAM,kBAAkB,iBACf,cAAc,QACtB,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,KACxB,CAAC,MAAM,GAAG,MAAM,CAAC,EA+CnB,CAAA;AAED,eAAO,MAAM,kBAAkB,iBAnDf,cAAc,QACtB,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,KACxB,CAAC,MAAM,GAAG,MAAM,CAAC,EAiDgC,CAAA;AAEpD,eAAO,MAAM,mBAAmB,iBAChB,cAAc,QACtB,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,KACxB,OAcF,CAAA;AAED,eAAO,MAAM,mBAAmB,iBAlBhB,cAAc,QACtB,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,KACxB,OAgBmD,CAAA;AAEtD,eAAO,MAAM,qBAAqB,iBAClB,cAAc,QACtB,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,KACxB,OAgCF,CAAA;AAED,eAAO,MAAM,qBAAqB,iBApClB,cAAc,QACtB,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,KACxB,OAkCuD,CAAA;AAE1D,eAAO,MAAM,aAAa,iBACV,cAAc,mBACX,oBAAoB,KACpC,MAAM,GAAG,MAAM,GAAG,IAiFpB,CAAA;AAED,eAAO,MAAM,iBAAiB,iBArFd,cAAc,mBACX,oBAAoB,KACpC,MAAM,GAAG,MAAM,GAAG,IAmFyB,CAAA;AAE9C,eAAO,MAAM,gBAAgB,iBACb,cAAc,oBAK7B,CAAA;AAED,eAAO,MAAM,gBAAgB,iBACb,cAAc,KAC3B,YAAY,GAAG,IA4BjB,CAAA;AAED,eAAO,MAAM,kCAAkC,iBAC/B,MAAM,aAAa,MAAM,KACtC,MAAM,GAAG,IAmBX,CAAA;AAqDD,eAAO,MAAM,kBAAkB,gBAChB,GAAG,EAAE,UACX,MAAM,KACZ,YAAY,GAAG,IA2YjB,CAAA;AAED,eAAO,MAAM,2BAA2B,kBACvB,GAAG,EAAE,UACb,MAAM,KACZ,YAAY,EAAE,GAAG,IAqGnB,CAAA;AAED,eAAO,MAAM,yBAAyB,WAC5B,cAAc,UAAU,cAAc,KAC7C,OAaF,CAAA;AAED,eAAO,MAAM,gBAAgB,QAAS,GAAG,QAGxC,CAAA;AAED,eAAO,MAAM,MAAM,QALmB,GAAG,QAKH,CAAA;AAEtC,eAAO,MAAM,iBAAiB,eAChB,YAAY,KACvB,IA4CF,CAAA;AAED,eAAO,MAAM,YAAY,aACb,gBAAgB,EAAE,EAAE,KAC7B,gBAAgB,EAAE,GAAG,IAkFvB,CAAA;AAED,eAAO,MAAM,eAAe,gBACb,iBAAiB,EAAE,EAAE,UAC3B,MAAM,KACZ,iBAAiB,EAAE,GAAG,IAyIxB,CAAA"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src.ts/utils/utils.ts"],"names":[],"mappings":"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"}
@@ -23,8 +23,8 @@ var __importStar = (this && this.__importStar) || function (mod) {
23
23
  return result;
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.getAllSigners = exports.hasSiblingWeb2 = exports.hasSiblingNostr = exports.hasSiblingDmp = exports.hasSiblingSpasm = exports.hasSiblingOfProtocol = exports.hasSignatureNostr = exports.hasSignatureEthereum = exports.hasSignatureOfFormat = exports.mergeSanitizationConfigs = exports.mergeConfigs = exports.mergeObjects = exports.clearObject = exports.clearArray = exports.sanitizeEvent = exports.sanitizeEventWithDompurify = exports.sanitizeStringWithDompurify = exports.sanitizeEventWith = exports.executeFunctionForAllNestedValuesOfType = exports.utilsStatus = exports.verifyEthereumSignature = exports.markSpasmEventAddressAsVerified = exports.sortTagsForSpasmid01 = exports.sortParentForSpasmid01 = exports.sortReferencesForSpasmid01 = exports.sortMediasForSpasmid01 = exports.sortLinksForSpasmid01 = exports.sortLinksForSpasmEventV2 = exports.sortHostsForSpasmid01 = exports.sortHostsForSpasmEventV2 = exports.sortArrayOfObjectsByKeyValue = exports.sortAuthorsForSpasmid01 = exports.sortAuthorsForSpasmEventV2 = exports.sortArrayOfObjects = exports.sortArrayOfStringsAndNumbers = exports.keepTheseKeysInObjectsInArray = exports.keepTheseKeysInObject = exports.getHashOfString = exports.getFormatFromSignature = exports.getFormatFromAddress = exports.getFormatFromId = exports.getFormatFromValue = exports.createLinkObjectFromUrl = exports.isValidUrl = exports.getNostrSpasmVersion = exports.toBeTimestamp = exports.extractSealedEvent = exports.extractVersion = exports.isObjectWithValues = exports.hasValue = void 0;
27
- exports.mergeChildrenV2 = exports.mergeStatsV2 = exports.cleanSpasmEventV2 = exports.copyOf = exports.deepCopyOfObject = exports.ifEventsHaveSameSpasmId01 = exports.mergeDifferentSpasmEventsV2 = exports.mergeSpasmEventsV2 = exports.extractSignerFromEthereumSignature = exports.toBeSpasmEventV2 = exports.extractSpasmId01 = exports.extractIdByFormat = exports.getIdByFormat = exports.areAllPubkeysListedIn = exports.areAllSignersListedIn = exports.isAnyPubkeyListedIn = exports.isAnySignerListedIn = exports.getPubkeysListedIn = exports.getSignersListedIn = exports.getAllSignatures = exports.getAllRootIds = exports.getAllParentIds = exports.getAllEventIds = exports.getAllIdsFromArrayOfIdObjects = exports.getVerifiedSigners = void 0;
26
+ exports.hasSiblingOfProtocol = exports.hasSignatureNostr = exports.hasSignatureEthereum = exports.hasSignatureOfFormat = exports.mergeSanitizationConfigs = exports.mergeConfigs = exports.mergeObjects = exports.clearObject = exports.clearArray = exports.sanitizeEvent = exports.sanitizeEventWithDompurify = exports.sanitizeStringWithDompurify = exports.sanitizeEventWith = exports.executeFunctionForAllNestedValuesOfType = exports.utilsStatus = exports.verifyEthereumSignature = exports.markSpasmEventAddressAsVerified = exports.sortTagsForSpasmid01 = exports.sortParentForSpasmid01 = exports.sortReferencesForSpasmid01 = exports.sortMediasForSpasmid01 = exports.sortLinksForSpasmid01 = exports.sortLinksForSpasmEventV2 = exports.sortHostsForSpasmid01 = exports.sortHostsForSpasmEventV2 = exports.sortArrayOfObjectsByKeyValue = exports.sortAuthorsForSpasmid01 = exports.sortAuthorsForSpasmEventV2 = exports.sortArrayOfObjects = exports.sortArrayOfStringsAndNumbers = exports.keepTheseKeysInObjectsInArray = exports.keepTheseKeysInObject = exports.getHashOfString = exports.getFormatFromSignature = exports.getFormatFromAddress = exports.getFormatFromId = exports.getFormatFromValue = exports.createLinkObjectFromUrl = exports.isValidUrl = exports.getNostrSpasmVersion = exports.toBeTimestamp = exports.extractSealedEvent = exports.extractVersion = exports.isArrayWithValues = exports.isObjectWithValues = exports.ifNumberOrString = exports.ifStringOrNumber = exports.isNumberOrString = exports.isStringOrNumber = exports.hasValue = void 0;
27
+ exports.mergeChildrenV2 = exports.mergeStatsV2 = exports.cleanSpasmEventV2 = exports.copyOf = exports.deepCopyOfObject = exports.ifEventsHaveSameSpasmId01 = exports.sortSpasmEventsV2 = exports.sortSpasmEventsV2ByDbAddedTimestamp = exports.mergeDifferentSpasmEventsV2 = exports.mergeSpasmEventsV2 = exports.extractSignerFromEthereumSignature = exports.toBeSpasmEventsV2 = exports.toBeSpasmEventV2 = exports.extractSpasmId01 = exports.extractIdByFormat = exports.getIdByFormat = exports.areAllPubkeysListedIn = exports.areAllSignersListedIn = exports.isAnyPubkeyListedIn = exports.isAnySignerListedIn = exports.getTotalOfActionReact = exports.getTotalOfReactAction = exports.getTotalOfReact = exports.getTotalOfActionReply = exports.getTotalOfReplyAction = exports.getTotalOfReply = exports.getTotalOfAction = exports.getTotalOfMostPopularReaction = exports.getTotalOfReaction = exports.getStatByAction = exports.getPubkeysListedIn = exports.getSignersListedIn = exports.getAllSignatures = exports.getAllRootIds = exports.getAllParentIds = exports.getAllEventIds = exports.getAllIdsFromArrayOfIdObjects = exports.getVerifiedSigners = exports.getAllSigners = exports.hasSiblingWeb2 = exports.hasSiblingNostr = exports.hasSiblingDmp = exports.hasSiblingSpasm = void 0;
28
28
  /*
29
29
  * Using sha256 from 'js-sha256' npm package, because
30
30
  * built-in 'crypto' module works only in a server-side
@@ -92,6 +92,19 @@ const hasValue = (el) => {
92
92
  return true;
93
93
  };
94
94
  exports.hasValue = hasValue;
95
+ const isStringOrNumber = (val) => {
96
+ if (!val && val !== 0)
97
+ return false;
98
+ if (typeof (val) === "string")
99
+ return true;
100
+ if (typeof (val) === "number")
101
+ return true;
102
+ return false;
103
+ };
104
+ exports.isStringOrNumber = isStringOrNumber;
105
+ exports.isNumberOrString = exports.isStringOrNumber;
106
+ exports.ifStringOrNumber = exports.isStringOrNumber;
107
+ exports.ifNumberOrString = exports.isStringOrNumber;
95
108
  const isObjectWithValues = (val) => {
96
109
  if (!val)
97
110
  return false;
@@ -104,6 +117,16 @@ const isObjectWithValues = (val) => {
104
117
  return true;
105
118
  };
106
119
  exports.isObjectWithValues = isObjectWithValues;
120
+ const isArrayWithValues = (array) => {
121
+ if (!array)
122
+ return false;
123
+ if (!Array.isArray(array))
124
+ return false;
125
+ if (!(0, exports.hasValue)(array))
126
+ return false;
127
+ return true;
128
+ };
129
+ exports.isArrayWithValues = isArrayWithValues;
107
130
  const extractVersion = (versionString) => {
108
131
  if (!versionString ||
109
132
  typeof (versionString) !== "string")
@@ -1200,6 +1223,126 @@ const getSignersListedIn = (unknownEvent, list) => {
1200
1223
  };
1201
1224
  exports.getSignersListedIn = getSignersListedIn;
1202
1225
  exports.getPubkeysListedIn = exports.getSignersListedIn;
1226
+ const getStatByAction = (unknownEvent, action = "react") => {
1227
+ if (!action || !exports.isStringOrNumber) {
1228
+ return null;
1229
+ }
1230
+ const spasmEvent = (0, exports.toBeSpasmEventV2)(unknownEvent);
1231
+ if (!spasmEvent || !(0, exports.isObjectWithValues)(spasmEvent)) {
1232
+ return null;
1233
+ }
1234
+ if (!("stats" in spasmEvent) || !spasmEvent.stats) {
1235
+ return null;
1236
+ }
1237
+ let spasmEventStat = null;
1238
+ spasmEvent.stats?.forEach(stat => {
1239
+ if ((0, exports.isObjectWithValues)(stat) &&
1240
+ "action" in stat && stat.action &&
1241
+ stat.action === action) {
1242
+ spasmEventStat = stat;
1243
+ }
1244
+ });
1245
+ return spasmEventStat;
1246
+ };
1247
+ exports.getStatByAction = getStatByAction;
1248
+ const getTotalOfReaction = (unknownEvent, reaction = "upvote") => {
1249
+ if (!reaction || !exports.isStringOrNumber) {
1250
+ return 0;
1251
+ }
1252
+ const spasmEvent = (0, exports.toBeSpasmEventV2)(unknownEvent);
1253
+ if (!spasmEvent || !(0, exports.isObjectWithValues)(spasmEvent)) {
1254
+ return 0;
1255
+ }
1256
+ const reactionStat = (0, exports.getStatByAction)(spasmEvent, "react");
1257
+ if (!reactionStat) {
1258
+ return 0;
1259
+ }
1260
+ if (!("contents" in reactionStat) || !reactionStat.contents ||
1261
+ !(0, exports.isArrayWithValues)(reactionStat.contents)) {
1262
+ return 0;
1263
+ }
1264
+ let total = 0;
1265
+ reactionStat.contents.forEach(content => {
1266
+ if ("value" in content && content.value &&
1267
+ content.value === reaction &&
1268
+ "total" in content && content.total) {
1269
+ if (typeof (content.total) === "number") {
1270
+ total = content.total;
1271
+ }
1272
+ else if (typeof (content.total) === "string") {
1273
+ total = Number(content.total);
1274
+ }
1275
+ }
1276
+ });
1277
+ return total;
1278
+ };
1279
+ exports.getTotalOfReaction = getTotalOfReaction;
1280
+ const getTotalOfMostPopularReaction = (unknownEvent) => {
1281
+ const spasmEvent = (0, exports.toBeSpasmEventV2)(unknownEvent);
1282
+ if (!spasmEvent || !(0, exports.isObjectWithValues)(spasmEvent)) {
1283
+ return 0;
1284
+ }
1285
+ const reactionStat = (0, exports.getStatByAction)(spasmEvent, "react");
1286
+ if (!reactionStat) {
1287
+ return 0;
1288
+ }
1289
+ if (!("contents" in reactionStat) || !reactionStat.contents ||
1290
+ !(0, exports.isArrayWithValues)(reactionStat.contents)) {
1291
+ return 0;
1292
+ }
1293
+ let total = 0;
1294
+ reactionStat.contents.forEach(content => {
1295
+ if ("total" in content && content.total) {
1296
+ let newTotal = 0;
1297
+ if (typeof (content.total) === "number") {
1298
+ newTotal = content.total;
1299
+ }
1300
+ else if (typeof (content.total) === "string") {
1301
+ newTotal = Number(content.total);
1302
+ }
1303
+ if (newTotal > total) {
1304
+ total = newTotal;
1305
+ }
1306
+ }
1307
+ });
1308
+ return total;
1309
+ };
1310
+ exports.getTotalOfMostPopularReaction = getTotalOfMostPopularReaction;
1311
+ const getTotalOfAction = (unknownEvent, action = "reply") => {
1312
+ if (!action || !exports.isStringOrNumber) {
1313
+ return 0;
1314
+ }
1315
+ const spasmEvent = (0, exports.toBeSpasmEventV2)(unknownEvent);
1316
+ if (!spasmEvent || !(0, exports.isObjectWithValues)(spasmEvent)) {
1317
+ return 0;
1318
+ }
1319
+ const actionStat = (0, exports.getStatByAction)(spasmEvent, action);
1320
+ if (!actionStat) {
1321
+ return 0;
1322
+ }
1323
+ if ("total" in actionStat && actionStat.total) {
1324
+ if (typeof (actionStat.total) === "number") {
1325
+ return actionStat.total;
1326
+ }
1327
+ else if (typeof (actionStat.total) === "string") {
1328
+ return Number(actionStat.total);
1329
+ }
1330
+ }
1331
+ return 0;
1332
+ };
1333
+ exports.getTotalOfAction = getTotalOfAction;
1334
+ const getTotalOfReply = (unknownEvent) => {
1335
+ return (0, exports.getTotalOfAction)(unknownEvent, "reply");
1336
+ };
1337
+ exports.getTotalOfReply = getTotalOfReply;
1338
+ exports.getTotalOfReplyAction = exports.getTotalOfReply;
1339
+ exports.getTotalOfActionReply = exports.getTotalOfReply;
1340
+ const getTotalOfReact = (unknownEvent) => {
1341
+ return (0, exports.getTotalOfAction)(unknownEvent, "react");
1342
+ };
1343
+ exports.getTotalOfReact = getTotalOfReact;
1344
+ exports.getTotalOfReactAction = exports.getTotalOfReact;
1345
+ exports.getTotalOfActionReact = exports.getTotalOfReact;
1203
1346
  const isAnySignerListedIn = (unknownEvent, list) => {
1204
1347
  const signersListedIn = (0, exports.getSignersListedIn)(unknownEvent, list);
1205
1348
  if (signersListedIn &&
@@ -1327,6 +1470,22 @@ const toBeSpasmEventV2 = (unknownEvent) => {
1327
1470
  return null;
1328
1471
  };
1329
1472
  exports.toBeSpasmEventV2 = toBeSpasmEventV2;
1473
+ const toBeSpasmEventsV2 = (unknownEvents) => {
1474
+ if (!unknownEvents || !Array.isArray(unknownEvents))
1475
+ return null;
1476
+ let spasmEvents = [];
1477
+ unknownEvents.forEach(event => {
1478
+ const spasmEvent = (0, exports.toBeSpasmEventV2)(event);
1479
+ if (spasmEvent && (0, exports.isObjectWithValues)(spasmEvent)) {
1480
+ spasmEvents.push(spasmEvent);
1481
+ }
1482
+ });
1483
+ if (!spasmEvents[0] ||
1484
+ !(0, exports.isObjectWithValues)(spasmEvents[0]))
1485
+ return null;
1486
+ return spasmEvents;
1487
+ };
1488
+ exports.toBeSpasmEventsV2 = toBeSpasmEventsV2;
1330
1489
  const extractSignerFromEthereumSignature = (signedString, signature) => {
1331
1490
  try {
1332
1491
  if (signature && typeof (signature) === 'string') {
@@ -1683,16 +1842,8 @@ const mergeDifferentSpasmEventsV2 = (unknownEvents, depth = 0) => {
1683
1842
  if (depth > maxRecursionDepth) {
1684
1843
  throw new Error("Maximum recursion depth exceeded");
1685
1844
  }
1686
- if (!unknownEvents || !Array.isArray(unknownEvents))
1687
- return null;
1688
- let spasmEvents = [];
1689
- unknownEvents.forEach(event => {
1690
- const spasmEvent = (0, exports.toBeSpasmEventV2)(event);
1691
- if (spasmEvent && (0, exports.isObjectWithValues)(spasmEvent)) {
1692
- spasmEvents.push(spasmEvent);
1693
- }
1694
- });
1695
- if (!spasmEvents[0] ||
1845
+ const spasmEvents = (0, exports.toBeSpasmEventsV2)(unknownEvents);
1846
+ if (!spasmEvents || !spasmEvents[0] ||
1696
1847
  !(0, exports.isObjectWithValues)(spasmEvents[0]))
1697
1848
  return null;
1698
1849
  const uniqueIds = new Set();
@@ -1729,7 +1880,7 @@ const mergeDifferentSpasmEventsV2 = (unknownEvents, depth = 0) => {
1729
1880
  typeof (uniqueEventId.value) === "number")) {
1730
1881
  if (uniqueEventId.value === id.value) {
1731
1882
  const mergedEvent = (0, exports.mergeSpasmEventsV2)([
1732
- uniqueEvent, event
1883
+ uniqueEvent, event, depth
1733
1884
  ]);
1734
1885
  if (mergedEvent) {
1735
1886
  uniqueEvents[uniqueEventIndex] =
@@ -1757,6 +1908,66 @@ const mergeDifferentSpasmEventsV2 = (unknownEvents, depth = 0) => {
1757
1908
  }
1758
1909
  };
1759
1910
  exports.mergeDifferentSpasmEventsV2 = mergeDifferentSpasmEventsV2;
1911
+ const sortSpasmEventsV2ByDbAddedTimestamp = (unknownEvents, order = "desc") => {
1912
+ const spasmEvents = (0, exports.toBeSpasmEventsV2)(unknownEvents);
1913
+ if (!spasmEvents || !spasmEvents[0] ||
1914
+ !(0, exports.isObjectWithValues)(spasmEvents[0]))
1915
+ return null;
1916
+ try {
1917
+ const spasmEventsWithDbTimestamp = [];
1918
+ const spasmEventsWithoutDbTimestamp = [];
1919
+ // Events without db.addedTimestamp are moved into a separate
1920
+ // array which is joined with the sorted array at the end.
1921
+ spasmEvents.forEach(event => {
1922
+ if ('db' in event && event.db &&
1923
+ 'addedTimestamp' in event.db &&
1924
+ event.db.addedTimestamp &&
1925
+ typeof (event.db.addedTimestamp) === "number") {
1926
+ spasmEventsWithDbTimestamp.push(event);
1927
+ }
1928
+ else {
1929
+ spasmEventsWithoutDbTimestamp.push(event);
1930
+ }
1931
+ });
1932
+ spasmEventsWithDbTimestamp.sort((a, b) => {
1933
+ if (a.db?.addedTimestamp && b.db?.addedTimestamp) {
1934
+ if (order === "desc") {
1935
+ const result = String(b.db.addedTimestamp)
1936
+ .localeCompare(String(a.db.addedTimestamp));
1937
+ return result;
1938
+ }
1939
+ else if (order === "asc") {
1940
+ const result = String(a.db.addedTimestamp)
1941
+ .localeCompare(String(b.db.addedTimestamp));
1942
+ return result;
1943
+ }
1944
+ }
1945
+ // Ideally, return 1 should never happen because we've
1946
+ // filtered out events without db.addedTimestamp above.
1947
+ // In case if we missed some scenarios,
1948
+ // then 'return 1' should push an element without
1949
+ // db.addedTimestamp to the end of the array,
1950
+ // but it can still mess up the sorting.
1951
+ return 1;
1952
+ });
1953
+ const sortedSpasmEvents = [
1954
+ ...spasmEventsWithDbTimestamp,
1955
+ ...spasmEventsWithoutDbTimestamp
1956
+ ];
1957
+ if ((0, exports.isArrayWithValues)(sortedSpasmEvents)) {
1958
+ return sortedSpasmEvents;
1959
+ }
1960
+ else {
1961
+ return null;
1962
+ }
1963
+ }
1964
+ catch (err) {
1965
+ console.error(err);
1966
+ return null;
1967
+ }
1968
+ };
1969
+ exports.sortSpasmEventsV2ByDbAddedTimestamp = sortSpasmEventsV2ByDbAddedTimestamp;
1970
+ exports.sortSpasmEventsV2 = exports.sortSpasmEventsV2ByDbAddedTimestamp;
1760
1971
  const ifEventsHaveSameSpasmId01 = (event1, event2) => {
1761
1972
  if (!event1 || !event2)
1762
1973
  return false;