@wovin/core 0.0.9-RC4 → 0.0.11

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 (83) hide show
  1. package/LICENSE +661 -0
  2. package/dist/applog/applog-helpers.d.ts +26 -7
  3. package/dist/applog/applog-helpers.d.ts.map +1 -1
  4. package/dist/applog/applog-utils.d.ts +11 -2
  5. package/dist/applog/applog-utils.d.ts.map +1 -1
  6. package/dist/applog/datom-types.d.ts +24 -13
  7. package/dist/applog/datom-types.d.ts.map +1 -1
  8. package/dist/applog.min.js +11 -3
  9. package/dist/{chunk-PTGUFZ3Q.min.js → chunk-6EBQRFQC.min.js} +1 -5
  10. package/dist/{chunk-PTGUFZ3Q.min.js.map → chunk-6EBQRFQC.min.js.map} +1 -1
  11. package/dist/chunk-C75X52ZX.min.js +2314 -0
  12. package/dist/chunk-C75X52ZX.min.js.map +1 -0
  13. package/dist/chunk-DF3UOPRV.min.js +5085 -0
  14. package/dist/chunk-DF3UOPRV.min.js.map +1 -0
  15. package/dist/{chunk-XXTV6KVM.min.js → chunk-L4AYAZCN.min.js} +9 -9
  16. package/dist/chunk-L4AYAZCN.min.js.map +1 -0
  17. package/dist/chunk-QPGEBDMJ.min.js +9 -0
  18. package/dist/chunk-QPGEBDMJ.min.js.map +1 -0
  19. package/dist/chunk-TPRWMCU7.min.js +494 -0
  20. package/dist/chunk-TPRWMCU7.min.js.map +1 -0
  21. package/dist/{chunk-V5T5PE7K.min.js → chunk-UQJEOS7T.min.js} +5913 -5688
  22. package/dist/chunk-UQJEOS7T.min.js.map +1 -0
  23. package/dist/chunk-UREBOWFC.min.js +40 -0
  24. package/dist/chunk-UREBOWFC.min.js.map +1 -0
  25. package/dist/index.min.js +103 -53
  26. package/dist/ipfs/car.d.ts +47 -7
  27. package/dist/ipfs/car.d.ts.map +1 -1
  28. package/dist/ipfs/ipfs-utils.d.ts +18 -7
  29. package/dist/ipfs/ipfs-utils.d.ts.map +1 -1
  30. package/dist/ipfs.min.js +24 -6
  31. package/dist/mobx/mobx-utils.d.ts +23 -17
  32. package/dist/mobx/mobx-utils.d.ts.map +1 -1
  33. package/dist/mobx.d.ts +2 -0
  34. package/dist/mobx.d.ts.map +1 -0
  35. package/dist/mobx.min.js +141 -0
  36. package/dist/mobx.min.js.map +1 -0
  37. package/dist/pubsub/connector.d.ts +3 -1
  38. package/dist/pubsub/connector.d.ts.map +1 -1
  39. package/dist/pubsub/pub-pull.d.ts +14 -0
  40. package/dist/pubsub/pub-pull.d.ts.map +1 -0
  41. package/dist/pubsub/pub-push.d.ts +41 -0
  42. package/dist/pubsub/pub-push.d.ts.map +1 -0
  43. package/dist/pubsub/pubsub-types.d.ts +25 -1
  44. package/dist/pubsub/pubsub-types.d.ts.map +1 -1
  45. package/dist/pubsub.d.ts +2 -1
  46. package/dist/pubsub.d.ts.map +1 -1
  47. package/dist/pubsub.min.js +20 -13
  48. package/dist/query/basic.d.ts +40 -8
  49. package/dist/query/basic.d.ts.map +1 -1
  50. package/dist/query/divergences.d.ts.map +1 -1
  51. package/dist/query/types.d.ts +3 -3
  52. package/dist/query/types.d.ts.map +1 -1
  53. package/dist/query.min.js +34 -16
  54. package/dist/thread/basic.d.ts +24 -4
  55. package/dist/thread/basic.d.ts.map +1 -1
  56. package/dist/thread/filters.d.ts +2 -2
  57. package/dist/thread/filters.d.ts.map +1 -1
  58. package/dist/thread/mapped.d.ts +10 -3
  59. package/dist/thread/mapped.d.ts.map +1 -1
  60. package/dist/thread/utils.d.ts +16 -0
  61. package/dist/thread/utils.d.ts.map +1 -0
  62. package/dist/thread/writeable.d.ts +4 -3
  63. package/dist/thread/writeable.d.ts.map +1 -1
  64. package/dist/thread.d.ts +1 -0
  65. package/dist/thread.d.ts.map +1 -1
  66. package/dist/thread.min.js +13 -3
  67. package/dist/types/typescript-utils.d.ts +5 -4
  68. package/dist/types/typescript-utils.d.ts.map +1 -1
  69. package/dist/types.min.js +1 -5
  70. package/dist/utils.d.ts +3 -0
  71. package/dist/utils.d.ts.map +1 -1
  72. package/dist/utils.min.js +9 -0
  73. package/package.json +17 -11
  74. package/dist/chunk-CIOF7QHW.min.js +0 -135
  75. package/dist/chunk-CIOF7QHW.min.js.map +0 -1
  76. package/dist/chunk-V5T5PE7K.min.js.map +0 -1
  77. package/dist/chunk-VM46JSEH.min.js +0 -1426
  78. package/dist/chunk-VM46JSEH.min.js.map +0 -1
  79. package/dist/chunk-XXTV6KVM.min.js.map +0 -1
  80. package/dist/chunk-YBXZNIU2.min.js +0 -4417
  81. package/dist/chunk-YBXZNIU2.min.js.map +0 -1
  82. package/dist/pubsub/publication.d.ts +0 -17
  83. package/dist/pubsub/publication.d.ts.map +0 -1
@@ -10,11 +10,11 @@ export declare const rollingMapper: (thread: Thread, eventMapper: ApplogEventMap
10
10
  name?: string;
11
11
  extraFilterName?: string;
12
12
  }) => MappedThread;
13
- export declare const rollingAcc: <ACC extends IObservableArray<any> | ObservableMap<any, any> | ObservableSet<any>>(thread: Thread, acc: ACC, eventMapper: (event: ThreadEvent, acc: ACC) => void, opts?: {
13
+ export declare const rollingAcc: <ACC extends ObservableSet<any> | IObservableArray<any> | ObservableMap<any, any>>(thread: Thread, acc: ACC, eventMapper: (event: ThreadEvent, acc: ACC) => void, opts?: {
14
14
  name?: string;
15
15
  }) => ACC;
16
16
  export declare const getUntrackedPattern: (pattern: DatalogQueryPattern) => {
17
- [k: string]: string | boolean | Number | import("../applog/datom-types").AgentHash | CidString | readonly string[] | ((value: string) => boolean) | readonly CidString[] | ((value: CidString) => boolean) | readonly import("../applog/datom-types").AgentHash[] | ((value: import("../applog/datom-types").AgentHash) => boolean) | readonly ApplogValue[] | ((value: ApplogValue) => boolean);
17
+ [k: string]: string | number | boolean | import("../applog/datom-types").AgentHash | CidString | ReadonlySet<string> | readonly string[] | ((value: string) => boolean) | ReadonlySet<CidString> | readonly CidString[] | ((value: CidString) => boolean) | ReadonlySet<import("../applog/datom-types").AgentHash> | readonly import("../applog/datom-types").AgentHash[] | ((value: import("../applog/datom-types").AgentHash) => boolean) | ReadonlySet<ApplogValue> | readonly ApplogValue[] | ((value: ApplogValue) => boolean);
18
18
  };
19
19
  export declare function makeFilter(pattern: DatalogQueryPattern): (logs: readonly Applog[]) => Applog[];
20
20
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"filters.d.ts","sourceRoot":"","sources":["../../src/thread/filters.ts"],"names":[],"mappings":"AACA,OAAO,EAGN,gBAAgB,EAEhB,aAAa,EACb,aAAa,EAKb,MAAM,MAAM,CAAA;AAIb,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE,SAAS,EAAE,mBAAmB,EAAkB,MAAM,uBAAuB,CAAA;AAE5H,OAAO,EAAe,MAAM,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAC1D,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAI1D,eAAO,MAAM,aAAa,WACjB,MAAM,WACL,mBAAmB,SACtB;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CAAE,iBA8DhD,CAAA;AAEF,eAAO,MAAM,aAAa,WACjB,MAAM,eACD,iBAAiB,SACxB;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CAAE,iBAkBhD,CAAA;AAEF,eAAO,MAAM,UAAU,6FAGb,MAAM,iCAEO,WAAW,eAAe,IAAI,SAC7C;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,QAYxB,CAAA;AAwBD,eAAO,MAAM,mBAAmB,YACtB,mBAAmB;;CAO5B,CAAA;AACD,wBAAgB,UAAU,CACzB,OAAO,EAAE,mBAAmB,UAEd,SAAS,MAAM,EAAE,cAY/B;AAED;;GAEG;AACH,eAAO,MAAM,yBAAyB,WAC7B,MAAM,WACL,mBAAmB,SACtB;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,aAKvB,CAAA;AAKD,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,MAAM,IAAI,MAAM,GAAG;IACzD,OAAO,EAAE,SAAS,CAAC,EAAE,CAAA;CACrB,CAAA;AACD,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,IAAI,gBAAgB,CAAC,CAAC,CAAC,CAEpG;AACD,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,wBAKvC;AACD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM;;;;EAM/C;AACD,MAAM,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,eAAe,CAAC,CAAA;AACjE,MAAM,MAAM,eAAe,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,CAAA;AAChE,MAAM,MAAM,0BAA0B,GAAG,gBAAgB,CAAC,eAAe,GAAG,gBAAgB,CAAC,CAAA;AAC7F,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG;IAAE,OAAO,EAAE,EAAE,CAAA;CAAE,CAAA;AAM3D,MAAM,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,eAAe,CAAA;AACjF,eAAO,MAAM,kBAAkB,WACtB,MAAM,aACH,YAAY,SACjB;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CAAE,iBAwDjD,CAAA"}
1
+ {"version":3,"file":"filters.d.ts","sourceRoot":"","sources":["../../src/thread/filters.ts"],"names":[],"mappings":"AACA,OAAO,EAGN,gBAAgB,EAEhB,aAAa,EACb,aAAa,EAKb,MAAM,MAAM,CAAA;AAIb,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE,SAAS,EAAE,mBAAmB,EAAkB,MAAM,uBAAuB,CAAA;AAE5H,OAAO,EAAe,MAAM,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAC1D,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAI1D,eAAO,MAAM,aAAa,WACjB,MAAM,WACL,mBAAmB,SACtB;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CAAE,iBAmEhD,CAAA;AAEF,eAAO,MAAM,aAAa,WACjB,MAAM,eACD,iBAAiB,SACxB;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CAAE,iBAmBhD,CAAA;AAEF,eAAO,MAAM,UAAU,6FAGb,MAAM,OACT,GAAG,eACK,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,KAAK,IAAI,SAC7C;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,QAYxB,CAAA;AAwBD,eAAO,MAAM,mBAAmB,YACtB,mBAAmB;;CAS5B,CAAA;AACD,wBAAgB,UAAU,CACzB,OAAO,EAAE,mBAAmB,UAEK,SAAS,MAAM,EAAE,cAclD;AAED;;GAEG;AACH,eAAO,MAAM,yBAAyB,WAC7B,MAAM,WACL,mBAAmB,SACtB;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,aAKvB,CAAA;AAKD,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,MAAM,IAAI,MAAM,GAAG;IACzD,OAAO,EAAE,SAAS,CAAC,EAAE,CAAA;CACrB,CAAA;AACD,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,IAAI,gBAAgB,CAAC,CAAC,CAAC,CAEpG;AACD,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,wBAKvC;AACD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM;;;;EAM/C;AACD,MAAM,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,eAAe,CAAC,CAAA;AACjE,MAAM,MAAM,eAAe,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,CAAA;AAChE,MAAM,MAAM,0BAA0B,GAAG,gBAAgB,CAAC,eAAe,GAAG,gBAAgB,CAAC,CAAA;AAC7F,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG;IAAE,OAAO,EAAE,EAAE,CAAA;CAAE,CAAA;AAM3D,MAAM,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,eAAe,CAAA;AACjF,eAAO,MAAM,kBAAkB,WACtB,MAAM,aACH,YAAY,SACjB;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CAAE,iBAwDjD,CAAA"}
@@ -1,18 +1,25 @@
1
- import { Applog } from '../applog/datom-types';
1
+ import { Applog, ApplogForInsert } from '../applog/datom-types';
2
2
  import { Thread, ThreadEvent } from './basic';
3
3
  export type ApplogEventMapper = (this: MappedThread, event: ThreadEvent, sourceThread: Thread) => ThreadEvent;
4
+ export type ApplogWriteMapper = (this: MappedThread, applogs: Applog[] | ApplogForInsert[]) => Applog[] | ApplogForInsert[] | null;
4
5
  export declare class MappedThread extends Thread {
5
6
  readonly name: string;
6
- readonly _initialLogs: readonly Applog[];
7
+ readonly _initialLogs: Applog[];
7
8
  private _eventMapper;
9
+ private _writeMapper;
10
+ static mapWrites(parent: Thread, name: string, mapper: ApplogWriteMapper): MappedThread;
8
11
  private _parentSubscriptions;
9
- constructor(name: string, parents: Thread | readonly Thread[], filters: string[], _initialLogs: readonly Applog[], _eventMapper: ApplogEventMapper);
12
+ constructor(name: string, parents: Thread | readonly Thread[], filters: readonly string[], _initialLogs: Applog[], _eventMapper: ApplogEventMapper | null, _writeMapper?: ApplogWriteMapper);
13
+ insert(appLogsToInsert: ApplogForInsert[]): void;
14
+ insertRaw(appLogsToInsert: Applog[]): void;
10
15
  private subscribeToParents;
16
+ subscribe(callback: (event: ThreadEvent) => void): () => void;
11
17
  /**
12
18
  * // HACK to trigger remap on pattern change in rollingFilter
13
19
  * should not be used lightly
14
20
  */
15
21
  triggerRemap(): void;
16
22
  protected onParentUpdate(thread: Thread, event: ThreadEvent): void;
23
+ get readOnly(): boolean;
17
24
  }
18
25
  //# sourceMappingURL=mapped.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mapped.d.ts","sourceRoot":"","sources":["../../src/thread/mapped.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAC9C,OAAO,EAAe,MAAM,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAI1D,MAAM,MAAM,iBAAiB,GAAG,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,KAAK,WAAW,CAAA;AAE7G,qBAAa,YAAa,SAAQ,MAAM;IAItC,QAAQ,CAAC,IAAI,EAAE,MAAM;IAGrB,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE;IACxC,OAAO,CAAC,YAAY;IAPrB,OAAO,CAAC,oBAAoB,CAAuC;gBAGzD,IAAI,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,EACnC,OAAO,EAAE,MAAM,EAAE,EACR,YAAY,EAAE,SAAS,MAAM,EAAE,EAChC,YAAY,EAAE,iBAAiB;IAkBxC,OAAO,CAAC,kBAAkB;IAwC1B;;;OAGG;IACH,YAAY;IAUZ,SAAS,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW;CA8B3D"}
1
+ {"version":3,"file":"mapped.d.ts","sourceRoot":"","sources":["../../src/thread/mapped.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAC/D,OAAO,EAAe,MAAM,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAI1D,MAAM,MAAM,iBAAiB,GAAG,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,KAAK,WAAW,CAAA;AAE7G,MAAM,MAAM,iBAAiB,GAAG,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,eAAe,EAAE,KAAK,MAAM,EAAE,GAAG,eAAe,EAAE,GAAG,IAAI,CAAA;AAElI,qBAAa,YAAa,SAAQ,MAAM;IAetC,QAAQ,CAAC,IAAI,EAAE,MAAM;IAGrB,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE;IAC/B,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,YAAY;IAnBrB,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB;IAWxE,OAAO,CAAC,oBAAoB,CAAkC;gBAGpD,IAAI,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,EACnC,OAAO,EAAE,SAAS,MAAM,EAAE,EACjB,YAAY,EAAE,MAAM,EAAE,EACvB,YAAY,EAAE,iBAAiB,GAAG,IAAI,EACtC,YAAY,GAAE,iBAAwB;IAsBxC,MAAM,CAAC,eAAe,EAAE,eAAe,EAAE;IAKzC,SAAS,CAAC,eAAe,EAAE,MAAM,EAAE;IAM1C,OAAO,CAAC,kBAAkB;IA0C1B,SAAS,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI;IAQhD;;;OAGG;IACH,YAAY;IAWZ,SAAS,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW;IAgC3D,IAAI,QAAQ,YAEX;CACD"}
@@ -0,0 +1,16 @@
1
+ import { compareApplogsByEnAt } from '../applog/applog-utils';
2
+ import { Applog, ApplogForInsert } from '../applog/datom-types';
3
+ import { Thread } from './basic';
4
+ import { MappedThread } from './mapped';
5
+ export declare function entityCount(thread: Thread): number;
6
+ export declare function allEntityIDs(thread: Thread): Set<string>;
7
+ export declare function debounceWrites(thread: Thread, wait?: number, removeDuplicatesWith?: (objA: object, objB: object) => boolean): MappedThread;
8
+ /**
9
+ * @param deduplicateHoldItemsWith called with (heldLog, realLog), if it returns true, the held log is skipped
10
+ * @param onFirstWrite called with held logs about to be inserted, if it returns an array, those logs will be inserted instead
11
+ */
12
+ export declare function holdTillFirstWrite(thread: Thread, applogsToHold: ApplogForInsert[], opts: {
13
+ deduplicateHoldItemsWith?: typeof compareApplogsByEnAt;
14
+ onFirstWrite: (heldLogsToInsert: Applog[]) => Applog[] | undefined;
15
+ }): MappedThread;
16
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/thread/utils.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,oBAAoB,EAAsC,MAAM,wBAAwB,CAAA;AACjG,OAAO,EAAE,MAAM,EAAE,eAAe,EAAY,MAAM,uBAAuB,CAAA;AACzE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAKvC,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,UAEzC;AACD,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,eAE1C;AAcD,wBAAgB,cAAc,CAC7B,MAAM,EAAE,MAAM,EACd,IAAI,SAAM,EACV,oBAAoB,0CAAuB,gBA4B3C;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CACjC,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,eAAe,EAAE,EAChC,IAAI,EAAE;IACL,wBAAwB,CAAC,EAAE,OAAO,oBAAoB,CAAA;IACtD,YAAY,EAAE,CAAC,gBAAgB,EAAE,MAAM,EAAE,KAAK,MAAM,EAAE,GAAG,SAAS,CAAA;CAClE,gBA8CD"}
@@ -1,11 +1,12 @@
1
- import { type Applog, ApplogForInsert } from '../applog/datom-types';
1
+ import { type Applog, ApplogForInsert, CidString } from '../applog/datom-types';
2
2
  import { Thread } from './basic';
3
3
  export declare abstract class WriteableThread extends Thread {
4
4
  constructor(name: string, applogs: Applog[], filters: readonly string[]);
5
+ purge(cidsToPurge: CidString[]): number;
5
6
  insert(appLogsToInsert: ApplogForInsert[]): Applog[];
6
7
  insertRaw(appLogsToInsert: Applog[]): Applog[];
7
8
  get readOnly(): boolean;
8
- protected abstract persist(logs: Applog[]): any;
9
+ protected abstract persist(logs: Applog[]): Promise<void>;
9
10
  }
10
11
  export declare class ThreadInMemory extends WriteableThread {
11
12
  readonly _readOnly: boolean;
@@ -13,6 +14,6 @@ export declare class ThreadInMemory extends WriteableThread {
13
14
  static fromArray(applogs: Applog[], name?: string, readOnly?: boolean): ThreadInMemory;
14
15
  constructor(name: string, applogs: Applog[], filters: readonly string[], _readOnly: boolean);
15
16
  get readOnly(): boolean;
16
- protected persist(logs: Applog[]): void;
17
+ protected persist(logs: Applog[]): Promise<void>;
17
18
  }
18
19
  //# sourceMappingURL=writeable.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"writeable.d.ts","sourceRoot":"","sources":["../../src/thread/writeable.ts"],"names":[],"mappings":"AAKA,OAAO,EACN,KAAK,MAAM,EACX,eAAe,EAKf,MAAM,uBAAuB,CAAA;AAG9B,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAIhC,8BAAsB,eAAgB,SAAQ,MAAM;gBAElD,IAAI,EAAE,MAAM,EAEZ,OAAO,EAAE,MAAM,EAAO,EACtB,OAAO,EAAE,SAAS,MAAM,EAAE;IASpB,MAAM,CAAC,eAAe,EAAE,eAAe,EAAE;IASzC,SAAS,CAAC,eAAe,EAAE,MAAM,EAAE;IAsC1C,IAAI,QAAQ,YAEX;IAED,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE;CACzC;AACD,qBAAa,cAAe,SAAQ,eAAe;IAYjD,QAAQ,CAAC,SAAS,EAAE,OAAO;IAX5B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM;IAG1B,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,UAAQ;gBAKlE,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,EAAE,SAAS,MAAM,EAAE,EACjB,SAAS,EAAE,OAAO;IAU5B,IAAI,QAAQ,YAEX;IAED,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE;CAMhC"}
1
+ {"version":3,"file":"writeable.d.ts","sourceRoot":"","sources":["../../src/thread/writeable.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,MAAM,EAAE,eAAe,EAAiB,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAC9F,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAIhC,8BAAsB,eAAgB,SAAQ,MAAM;gBAElD,IAAI,EAAE,MAAM,EAEZ,OAAO,EAAE,MAAM,EAAO,EACtB,OAAO,EAAE,SAAS,MAAM,EAAE;IASpB,KAAK,CAAC,WAAW,EAAE,SAAS,EAAE;IAM9B,MAAM,CAAC,eAAe,EAAE,eAAe,EAAE;IAKzC,SAAS,CAAC,eAAe,EAAE,MAAM,EAAE;IA0C1C,IAAI,QAAQ,YAEX;IAED,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CACzD;AACD,qBAAa,cAAe,SAAQ,eAAe;IAYjD,QAAQ,CAAC,SAAS,EAAE,OAAO;IAX5B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM;IAG1B,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,UAAQ;gBAKlE,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,EAAE,SAAS,MAAM,EAAE,EACjB,SAAS,EAAE,OAAO;IAU5B,IAAI,QAAQ,YAEX;cAEe,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE;CAMtC"}
package/dist/thread.d.ts CHANGED
@@ -2,4 +2,5 @@ export * from './thread/basic';
2
2
  export * from './thread/filters';
3
3
  export * from './thread/mapped';
4
4
  export * from './thread/writeable';
5
+ export * from './thread/utils';
5
6
  //# sourceMappingURL=thread.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"thread.d.ts","sourceRoot":"","sources":["../src/thread.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA;AAC9B,cAAc,kBAAkB,CAAA;AAChC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA"}
1
+ {"version":3,"file":"thread.d.ts","sourceRoot":"","sources":["../src/thread.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA;AAC9B,cAAc,kBAAkB,CAAA;AAChC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,gBAAgB,CAAA"}
@@ -1,35 +1,45 @@
1
1
  import {
2
2
  MappedThread,
3
+ StaticThread,
3
4
  Thread,
4
5
  ThreadInMemory,
5
6
  WriteableThread,
7
+ allEntityIDs,
6
8
  assertOnlyCurrent,
7
9
  assertRaw,
10
+ debounceWrites,
11
+ entityCount,
8
12
  getLogsFromThread,
9
13
  getUntrackedFilterResults,
10
14
  getUntrackedPattern,
11
15
  hasFilter,
16
+ holdTillFirstWrite,
12
17
  isInitEvent,
13
18
  makeFilter,
14
19
  rollingAcc,
15
20
  rollingFilter,
16
21
  rollingMapper,
17
22
  simpleApplogMapper
18
- } from "./chunk-V5T5PE7K.min.js";
19
- import "./chunk-YBXZNIU2.min.js";
20
- import "./chunk-PTGUFZ3Q.min.js";
23
+ } from "./chunk-UQJEOS7T.min.js";
24
+ import "./chunk-DF3UOPRV.min.js";
25
+ import "./chunk-6EBQRFQC.min.js";
21
26
  import "./chunk-KRQZ6V4Y.min.js";
22
27
  export {
23
28
  MappedThread,
29
+ StaticThread,
24
30
  Thread,
25
31
  ThreadInMemory,
26
32
  WriteableThread,
33
+ allEntityIDs,
27
34
  assertOnlyCurrent,
28
35
  assertRaw,
36
+ debounceWrites,
37
+ entityCount,
29
38
  getLogsFromThread,
30
39
  getUntrackedFilterResults,
31
40
  getUntrackedPattern,
32
41
  hasFilter,
42
+ holdTillFirstWrite,
33
43
  isInitEvent,
34
44
  makeFilter,
35
45
  rollingAcc,
@@ -9,10 +9,6 @@ export declare const Bool: typeof BooleanTB;
9
9
  export declare const STR: ReturnType<typeof T.String>;
10
10
  export declare const NUM: ReturnType<typeof T.Number>;
11
11
  export declare const BOOL: ReturnType<typeof T.Boolean>;
12
- export type DefaultTrue = true | boolean;
13
- export declare const DefaultTrue: DefaultTrue;
14
- export type DefaultFalse = false | boolean;
15
- export declare const DefaultFalse: DefaultFalse;
16
12
  export type GenericObject = Record<string, any>;
17
13
  export type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;
18
14
  export type PartialBy<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
@@ -31,7 +27,12 @@ export type GenericSetter<T> = (newValue: T) => void;
31
27
  export type ArrayOrSingle<T> = T | T[] | readonly T[];
32
28
  export declare function arrayIfSingle<T>(arrOrSingle: ArrayOrSingle<T>): readonly T[];
33
29
  export type ArrayType<T> = T extends (infer U)[] ? U : T;
30
+ export type ArrayElementType<T> = T extends readonly (infer U)[] ? Extract<U, string> : never;
34
31
  export type X<T> = ArrayType<IObservableArray<T>>;
35
32
  export type ReadonlyObservableArray<T> = ReadonlyArray<T>;
33
+ export type ReadonlyObservableSet<T> = ReadonlySet<T>;
34
+ export type ConstructorType<T, S = {}> = {
35
+ new (...args: any[]): T;
36
+ } & S;
36
37
  export {};
37
38
  //# sourceMappingURL=typescript-utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"typescript-utils.d.ts","sourceRoot":"","sources":["../../src/types/typescript-utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"typescript-utils.d.ts","sourceRoot":"","sources":["../../src/types/typescript-utils.ts"],"names":[],"mappings":"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"}
package/dist/types.min.js CHANGED
@@ -2,8 +2,6 @@ import "./chunk-5MMGBK2U.min.js";
2
2
  import {
3
3
  BOOL,
4
4
  Bool,
5
- DefaultFalse,
6
- DefaultTrue,
7
5
  NUM,
8
6
  Num,
9
7
  Obj,
@@ -12,13 +10,11 @@ import {
12
10
  Str,
13
11
  arrayIfSingle,
14
12
  checkParityTB
15
- } from "./chunk-PTGUFZ3Q.min.js";
13
+ } from "./chunk-6EBQRFQC.min.js";
16
14
  import "./chunk-KRQZ6V4Y.min.js";
17
15
  export {
18
16
  BOOL,
19
17
  Bool,
20
- DefaultFalse,
21
- DefaultTrue,
22
18
  NUM,
23
19
  Num,
24
20
  Obj,
package/dist/utils.d.ts CHANGED
@@ -1 +1,4 @@
1
+ import { Applog, ApplogEncNoCid } from './applog/datom-types';
2
+ export declare const isTruthy: (l: Applog | ApplogEncNoCid) => boolean;
3
+ export declare const keepTruthy: (arr: readonly any[]) => any[];
1
4
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAE7D,eAAO,MAAM,QAAQ,MAAO,MAAM,GAAG,cAAc,KAAG,OAAc,CAAA;AACpE,eAAO,MAAM,UAAU,QAAS,SAAS,GAAG,EAAE,KAAG,GAAG,EAA0B,CAAA"}
package/dist/utils.min.js CHANGED
@@ -1 +1,10 @@
1
+ import {
2
+ isTruthy,
3
+ keepTruthy
4
+ } from "./chunk-QPGEBDMJ.min.js";
5
+ import "./chunk-KRQZ6V4Y.min.js";
6
+ export {
7
+ isTruthy,
8
+ keepTruthy
9
+ };
1
10
  //# sourceMappingURL=utils.min.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wovin/core",
3
- "version": "0.0.9-RC4",
3
+ "version": "0.0.11",
4
4
  "type": "module",
5
5
  "main": "./dist/index.min.js",
6
6
  "module": "./dist/index.min.js",
@@ -38,36 +38,42 @@
38
38
  "./utils": {
39
39
  "import": "./dist/utils.min.js",
40
40
  "types": "./dist/utils.d.ts"
41
+ },
42
+ "./mobx": {
43
+ "import": "./dist/mobx.min.js",
44
+ "types": "./dist/mobx.d.ts"
41
45
  }
42
46
  },
43
47
  "files": [
44
48
  "./dist/"
45
49
  ],
50
+ "packageManager": "pnpm",
46
51
  "esm.sh": {
47
52
  "bundle": false
48
53
  },
49
54
  "peerDependencies": {
50
- "mobx": "^6.12.0",
51
55
  "@sinclair/typebox": "^0.31.28"
52
56
  },
53
57
  "dependencies": {
54
- "@ipld/car": "^5.2.4",
55
- "@ipld/dag-json": "^10.1.5",
56
- "@noble/hashes": "^1.3.2",
57
- "besonders-logger": "1.0.0-RC11",
58
- "date-fns": "^2.30.0",
58
+ "@ipld/car": "^5.2.6",
59
+ "@ipld/dag-json": "^10.1.7",
60
+ "@noble/hashes": "^1.3.3",
61
+ "@oddjs/odd": "^0.37.2",
62
+ "besonders-logger": "1.0.1",
63
+ "date-fns": "^3.3.1",
59
64
  "lodash-es": "^4.17.21",
65
+ "mobx": "^6.12.0",
60
66
  "mobx-utils": "^6.0.8",
61
- "multiformats": "^12.1.3",
67
+ "multiformats": "^13.0.1",
62
68
  "safe-stable-stringify": "^2.4.3"
63
69
  },
64
70
  "devDependencies": {
65
71
  "@types/lodash-es": "^4.17.12",
66
72
  "concurrently": "^8.2.2",
67
73
  "esbuild-plugin-polyfill-node": "^0.3.0",
68
- "tsup": "^8.0.1",
69
- "typescript": "^5.0.2",
70
- "vite": "^4.4.5",
74
+ "tsup": "^8.0.2",
75
+ "typescript": "^5.4.5",
76
+ "vite": "^5.2.11",
71
77
  "tsupconfig": "^0.0.0"
72
78
  },
73
79
  "scripts": {
@@ -1,135 +0,0 @@
1
- import {
2
- makeCarBlob
3
- } from "./chunk-VM46JSEH.min.js";
4
- import {
5
- cyrb53hash,
6
- getLogsFromThread,
7
- lastWriteWins,
8
- rollingFilter
9
- } from "./chunk-V5T5PE7K.min.js";
10
- import {
11
- Logger,
12
- encodeBlockOriginal,
13
- prepareForPub
14
- } from "./chunk-YBXZNIU2.min.js";
15
-
16
- // src/pubsub/publication.ts
17
- var { WARN, LOG, DEBUG, VERBOSE, ERROR } = Logger.setup(Logger.DEBUG);
18
- async function crawlPublicationForLogs(publication) {
19
- if (publication.includedLogCIDs)
20
- crawlPublicationForLogs(publication);
21
- return publication.includedLogCIDs;
22
- }
23
- async function getLogsFromPub(publication) {
24
- if (publication.includedLogCIDs)
25
- crawlPublicationForLogs(publication);
26
- return publication.includedLogCIDs;
27
- }
28
- async function preparePubForPush(agent, appThread, threadToPublish, publication) {
29
- let logsToPublish = getLogsFromThread(threadToPublish);
30
- DEBUG(`[preparePubForPush] Collected ${logsToPublish.length} logs :`, {
31
- logsToPublish,
32
- threadOrLogsCount: threadToPublish.nameAndSizeUntracked || `[${threadToPublish.length}]`
33
- });
34
- const { sharedAgents, sharedKeyMap, sharedKey } = publication ?? {};
35
- const agentLogs = rollingFilter(lastWriteWins(appThread), {
36
- en: agent.ag,
37
- at: ["agent/ecdh", "agent/jwkd", "agent/appAgent"]
38
- }).applogs;
39
- DEBUG(`[preparePubForPush] agent logs:`, agentLogs);
40
- if (!agentLogs.find(({ at }) => at === "agent/appAgent"))
41
- throw ERROR(`[preparePubForPush] appThread missing agent/appAgent log`);
42
- let encPayload;
43
- const encryptAndTestDecrypt = async (applog, keyToUse) => {
44
- throw new Error(`todo: enc`);
45
- };
46
- let maybeEncryptedApplogs;
47
- if (sharedAgents) {
48
- if (!sharedKey || !sharedKeyMap) {
49
- throw ERROR("sharedAgents but no Keys/Map", { sharedAgents, sharedKeyMap, sharedKey });
50
- }
51
- const encryptedApplogs = [];
52
- const agentSharedKeyLogs = [];
53
- for (const [eachAgent, eachEncKey] of Array.from(sharedKeyMap.entries())) {
54
- agentSharedKeyLogs.push({
55
- ag: agent.ag,
56
- en: eachAgent,
57
- at: "pub/sharedKey",
58
- vl: eachEncKey
59
- // these are encrypted with the derived key from the local agent private and remote agent public keys
60
- });
61
- }
62
- for (const eachLog of logsToPublish) {
63
- VERBOSE("[crypto] encrypting ", eachLog);
64
- try {
65
- encPayload = await encryptAndTestDecrypt(eachLog, sharedKey);
66
- } catch (err) {
67
- }
68
- encryptedApplogs.push(encPayload);
69
- }
70
- maybeEncryptedApplogs = encryptedApplogs;
71
- } else {
72
- maybeEncryptedApplogs = logsToPublish;
73
- }
74
- return encodePubAsCar(agent, maybeEncryptedApplogs, agentLogs);
75
- }
76
- async function encodePubAsCar(agent, applogs, infoLogs) {
77
- DEBUG(`[encodePubAsCar] encoding`, { agent, applogs, infoLogs });
78
- const { cids: infoLogCids, encodedApplogs: encodedInfoLogs } = await encodeApplogsAsIPLD(infoLogs);
79
- const { cids: logCids, encodedApplogs } = await encodeApplogsAsIPLD(applogs);
80
- const infoLogsWrap = await encodeBlockOriginal({ logs: infoLogCids });
81
- const applogsWrap = await encodeBlockOriginal({ logs: logCids });
82
- const infoSignature = await agent.sign(infoLogsWrap.bytes);
83
- const applogsSignature = await agent.sign(applogsWrap.bytes);
84
- const root = {
85
- info: infoLogsWrap.cid,
86
- applogs: applogsWrap.cid,
87
- infoSignature,
88
- applogsSignature
89
- };
90
- DEBUG("[encodePubAsCar] encoding root", { root, logCids, infoLogCids });
91
- const encodedRoot = await encodeBlockOriginal(root);
92
- DEBUG("[encodePubAsCar] => root", { encodedRoot });
93
- return await makeCarBlob(encodedRoot.cid, [encodedRoot, infoLogsWrap, applogsWrap, ...encodedInfoLogs, ...encodedApplogs]);
94
- }
95
- async function encodeApplogsAsCar(applogs) {
96
- const { cids, encodedApplogs } = await encodeApplogsAsIPLD(applogs);
97
- const root = { applogs: cids };
98
- const encodedRoot = await encodeBlockOriginal(root);
99
- DEBUG("[encodeApplogsAsCar] encoded root", { cids, encodedRoot });
100
- return await makeCarBlob(encodedRoot.cid, [encodedRoot, ...encodedApplogs]);
101
- }
102
- async function encodeApplogsAsIPLD(applogs) {
103
- const preppedLogs = applogs.map((log) => log instanceof Uint8Array ? log : prepareForPub(log));
104
- const encodedApplogs = await Promise.all(preppedLogs.map(encodeBlockOriginal));
105
- DEBUG("[encodeApplogsAsIpld] encoded applogs", { encodedApplogs });
106
- const cids = encodedApplogs.map((b) => {
107
- if (!b.cid)
108
- throw new ERROR(`[publish] no cid for encoded log:`, b);
109
- return b.cid;
110
- });
111
- return { cids, encodedApplogs };
112
- }
113
-
114
- // src/pubsub/pubsub-types.ts
115
- function isPublication(obj) {
116
- return obj?.pk !== void 0 && obj?.lastPush !== void 0;
117
- }
118
- function isSubscription(obj) {
119
- return obj?.lastPull !== void 0;
120
- }
121
- function agentToShortHash(agentString) {
122
- return cyrb53hash(agentString, 31, 7);
123
- }
124
-
125
- export {
126
- crawlPublicationForLogs,
127
- getLogsFromPub,
128
- preparePubForPush,
129
- encodePubAsCar,
130
- encodeApplogsAsCar,
131
- isPublication,
132
- isSubscription,
133
- agentToShortHash
134
- };
135
- //# sourceMappingURL=chunk-CIOF7QHW.min.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/pubsub/publication.ts","../src/pubsub/pubsub-types.ts"],"sourcesContent":["import { Logger } from 'besonders-logger'\nimport { Applog } from '../applog/datom-types'\nimport { makeCarBlob } from '../ipfs/car'\nimport { encodeBlockOriginal, prepareForPub } from '../ipfs/ipfs-utils'\nimport { lastWriteWins } from './../query/basic'\nimport { ApplogsOrThread, getLogsFromThread, Thread } from '../thread'\nimport { rollingFilter } from '../thread/filters'\nimport { AppAgent, IPublication } from './pubsub-types'\n\nconst { WARN, LOG, DEBUG, VERBOSE, ERROR } = Logger.setup(Logger.DEBUG) // eslint-disable-line no-unused-vars\n\n// export const neverEncryptAttrs = [\n// \t'agent/jwkd',\n// \t'agent/appAgent',\n// \t'pub/encryptedFor',\n// \t'pub/sharedKey',\n// ]\n\nexport async function crawlPublicationForLogs(publication: IPublication) {\n\tif (publication.includedLogCIDs) crawlPublicationForLogs(publication)\n\treturn publication.includedLogCIDs\n}\nexport async function getLogsFromPub(publication: IPublication) {\n\tif (publication.includedLogCIDs) crawlPublicationForLogs(publication)\n\treturn publication.includedLogCIDs\n}\nexport async function preparePubForPush(\n\tagent: AppAgent,\n\tappThread: Thread,\n\tthreadToPublish: ApplogsOrThread,\n\tpublication: IPublication,\n) {\n\t// await initWasm()\n\t// const car_data = Wasm.make_car(applogs)\n\t// DEBUG('Car data:', car_data)\n\t// TODO prevent publish if there is no new info\n\tlet logsToPublish = getLogsFromThread(threadToPublish)\n\n\t// const logsFromLastPush = await getLogsFromPub(publication)\n\t// logsToPublish = logsToPublish.filter(eachLog => !logsFromLastPush.includes(eachLog.cid)) // TODO deep compare includes\n\t// const prevPushCIDs = [\n\t// \tpublication.lastCID,\n\t// \t//TODO add this one and update the publication data after push\n\t// ]\n\t// const includedLogCIDs = [\n\t// \t'full array of CIDS from all previous pushes'\n\t// ]\n\n\tDEBUG(`[preparePubForPush] Collected ${logsToPublish.length} logs :`, {\n\t\tlogsToPublish,\n\t\tthreadOrLogsCount: (threadToPublish as any).nameAndSizeUntracked || (`[${(threadToPublish as any).length}]`),\n\t})\n\n\tconst { sharedAgents, sharedKeyMap, sharedKey } = publication ?? {}\n\t// TODO: publish all agents' info related to the logs we want to publish\n\tconst agentLogs = rollingFilter(lastWriteWins(appThread), {\n\t\ten: agent.ag,\n\t\tat: ['agent/ecdh', 'agent/jwkd', 'agent/appAgent'],\n\t}).applogs\n\tDEBUG(`[preparePubForPush] agent logs:`, agentLogs)\n\tif (!agentLogs.find(({ at }) => at === 'agent/appAgent')) throw ERROR(`[preparePubForPush] appThread missing agent/appAgent log`)\n\tlet encPayload\n\tconst encryptAndTestDecrypt = async (applog: Applog, keyToUse: CryptoKey): Promise<Uint8Array> => {\n\t\tthrow new Error(`todo: enc`) // TODO: ENC\n\t\t// const eachLog = prepareForPub(applog) // without cid\n\t\t// const enc = new TextEncoder()\n\t\t// const stringified = stringify(eachLog)\n\t\t// const stringifiedEncodedAppLogPayload = enc.encode(stringified) // TODO: consider encodeToDagJson instead\n\t\t// VERBOSE('[odd]', { eachLog, stringified, stringifiedEncodedAppLogPayload })\n\n\t\t// try {\n\t\t// \tencPayload = await agent.crypto?.aes.encrypt(stringifiedEncodedAppLogPayload, keyToUse, SymmAlg.AES_GCM)\n\t\t// } catch (err) {\n\t\t// \tthrow ERROR('FAILED TO ENC payload length:', stringifiedEncodedAppLogPayload.length, { err })\n\t\t// }\n\n\t\t// const decrypted = await decryptWithAesSharedKey(encPayload, keyToUse, 'string')\n\n\t\t// VERBOSE('[odd] encrypted length:', stringifiedEncodedAppLogPayload.length, { encPayload, decrypted })\n\t\t// return encPayload\n\t}\n\n\tlet maybeEncryptedApplogs: Uint8Array[] | readonly Applog[]\n\tif (sharedAgents) { // encrypt all Applogs\n\t\tif (!sharedKey || !sharedKeyMap) {\n\t\t\tthrow ERROR('sharedAgents but no Keys/Map', { sharedAgents, sharedKeyMap, sharedKey })\n\t\t}\n\t\tconst encryptedApplogs = [] as Uint8Array[]\n\t\tconst agentSharedKeyLogs = []\n\t\tfor (const [eachAgent, eachEncKey] of Array.from(sharedKeyMap.entries())) {\n\t\t\tagentSharedKeyLogs.push({\n\t\t\t\tag: agent.ag,\n\t\t\t\ten: eachAgent,\n\t\t\t\tat: 'pub/sharedKey',\n\t\t\t\tvl: eachEncKey, // these are encrypted with the derived key from the local agent private and remote agent public keys\n\t\t\t})\n\t\t}\n\t\t// const encryptedForLogs = await insertApplogsInAppDB(agentSharedKeyLogs)\n\t\t// DEBUG(`[publish] adding agentSharedKeyLogs:`, encryptedForLogs)\n\n\t\t// TODO ensure that all needed keys are in\n\t\tfor (const eachLog of logsToPublish) {\n\t\t\tVERBOSE('[crypto] encrypting ', eachLog)\n\t\t\t// if (neverEncryptAttrs.includes(eachLog.at)) {\n\t\t\t// \tencryptedApplogs.push(/* prepareForPub( */ eachLog /* ) */) // ? this seemed to double the below one - @gotjoshua?\n\t\t\t// \t// continue\n\t\t\t// }\n\t\t\ttry {\n\t\t\t\tencPayload = await encryptAndTestDecrypt(eachLog, sharedKey)\n\t\t\t} catch (err) {\n\t\t\t\t// its already traced in encryptAndTestDecrypt\n\t\t\t\t// continue\n\t\t\t}\n\t\t\tencryptedApplogs.push(encPayload)\n\t\t}\n\t\tmaybeEncryptedApplogs = encryptedApplogs\n\t} else {\n\t\tmaybeEncryptedApplogs = logsToPublish // publish nonEncrypted\n\t}\n\treturn encodePubAsCar(agent, maybeEncryptedApplogs, agentLogs)\n}\n\n/**\n * @param applogs Encrypted or plain applogs\n * @returns Car file\n */\nexport async function encodePubAsCar(\n\tagent: AppAgent,\n\tapplogs: readonly Uint8Array[] | readonly Applog[],\n\tinfoLogs: readonly Applog[],\n) {\n\tDEBUG(`[encodePubAsCar] encoding`, { agent, applogs, infoLogs })\n\tconst { cids: infoLogCids, encodedApplogs: encodedInfoLogs } = await encodeApplogsAsIPLD(infoLogs)\n\tconst { cids: logCids, encodedApplogs } = await encodeApplogsAsIPLD(applogs)\n\t// We need to wrap the array to get a CID\n\tconst infoLogsWrap = await encodeBlockOriginal({ logs: infoLogCids })\n\tconst applogsWrap = await encodeBlockOriginal({ logs: logCids })\n\tconst infoSignature = await agent.sign(infoLogsWrap.bytes)\n\tconst applogsSignature = await agent.sign(applogsWrap.bytes)\n\tconst root = {\n\t\tinfo: infoLogsWrap.cid,\n\t\tapplogs: applogsWrap.cid,\n\t\tinfoSignature,\n\t\tapplogsSignature,\n\t}\n\tDEBUG('[encodePubAsCar] encoding root', { root, logCids, infoLogCids })\n\tconst encodedRoot = await encodeBlockOriginal(root)\n\tDEBUG('[encodePubAsCar] => root', { encodedRoot })\n\n\treturn await makeCarBlob(encodedRoot.cid, [encodedRoot, infoLogsWrap, applogsWrap, ...encodedInfoLogs, ...encodedApplogs]) // TODO: create CarBuilder\n}\n\n/**\n * @param applogs Encrypted or plain applogs\n * @returns Car file\n */\nexport async function encodeApplogsAsCar(\n\tapplogs: readonly Uint8Array[] | readonly Applog[],\n) {\n\tconst { cids, encodedApplogs } = await encodeApplogsAsIPLD(applogs)\n\tconst root = { applogs: cids }\n\tconst encodedRoot = await encodeBlockOriginal(root)\n\tDEBUG('[encodeApplogsAsCar] encoded root', { cids, encodedRoot })\n\n\treturn await makeCarBlob(encodedRoot.cid, [encodedRoot, ...encodedApplogs])\n}\n\nasync function encodeApplogsAsIPLD(applogs: readonly Applog[] | readonly Uint8Array[]) {\n\tconst preppedLogs = applogs.map(log => log instanceof Uint8Array ? log : prepareForPub(log as Applog))\n\tconst encodedApplogs = await Promise.all(preppedLogs.map(encodeBlockOriginal))\n\tDEBUG('[encodeApplogsAsIpld] encoded applogs', { encodedApplogs })\n\n\tconst cids = encodedApplogs.map(b => {\n\t\tif (!b.cid) throw new ERROR(`[publish] no cid for encoded log:`, b)\n\t\treturn b.cid\n\t})\n\treturn { cids, encodedApplogs }\n}\n","import { cyrb53hash } from './../applog/applog-utils'\nimport { AgentHash, AgentID } from '../applog/datom-types'\nimport { Tagged } from '../types'\n\ntype AgentString = Tagged<string, 'AgentString'>\ntype DIDString = Tagged<string, 'DID'>\nexport type { AgentHash, AgentString, DIDString }\n\nexport interface AppAgent {\n\tag: AgentHash\n\tagentString: AgentString\n\tdid: DIDString\n\n\tsign(data: Uint8Array): Promise<Uint8Array>\n}\n\nexport interface IPublication {\n\tid?: string // string hash of pub (used as unique id in IDB) `W3Name.create().toString()` starts with k51qzi5uqu5d\n\tcreatedAt: string // ISO timestamp of creation\n\tname: string // nick name for the pub\n\tisDeleted?: boolean\n\n\tpk: Uint8Array // exported privatekey - needed to create WritableName for publishing //TODO: store as non-extractable / encrypted?\n\n\tautopush: boolean\n\tlastPush: string | null\n\tlastCID?: string\n\tincludedLogCIDs?: string[]\n\tlatestLogTs?: string\n\n\tpublishedBy: string // local user appAgent\n\tselectors?: string[] // to be used as a filter for which applogs to pub\n\tencryptedFor?: string | null // short agentHash\n\tencryptedWith?: CryptoKey | null // AES-GCM derived key from ECDH keys (local private and remote public)\n\n\t// HACK WIP #39 - shared encryption\n\tsharedKey?: CryptoKey | null // AES-GCM derived key from ECDH keys (local private and ipns public)\n\tsharedAgents?: AgentID[] | null // array of string EntityIDs for the chosen agents (we need public jwkd atoms for each of them)\n\tsharedKeyMap?: Map<AgentID, string> | null // uses public key from each agent to derive an aes key that is used to encrypt and btoa the sharedKey that is actually used to encrypt and decrypt the applogs\n}\nexport interface ISubscription {\n\tid: string // string hash of pub (used as unique id in IDB) `W3Name.create().toString()` starts with k51qzi5uqu5d\n\tcreatedAt: string // ISO timestamp of creation\n\tname: string // nick name for the pub\n\tisDeleted: boolean\n\n\tlastPull?: string | null\n\tlastPullAttempt?: string | null\n\tautopull: boolean\n\tlastCID?: string\n\tpublishedBy?: string // remote publisher short agentHash\n\tencryptedFor?: string | undefined // short agentHash\n\tencryptedWith?: CryptoKey | undefined // AES-GCM derived key from ECDH keys (local private and remote public)\n}\nexport function isPublication(obj: any): obj is IPublication {\n\treturn obj?.pk !== undefined && obj?.lastPush !== undefined\n}\nexport function isSubscription(obj: any): obj is ISubscription {\n\treturn obj?.lastPull !== undefined\n}\n\nexport type TSubPub = IPublication | ISubscription\n\nexport function agentToShortHash(agentString: string) {\n\treturn cyrb53hash(agentString, 31, 7) as string\n}\n"],"mappings":"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","names":[]}