@peerbit/string 2.0.4 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -21,17 +21,21 @@ export declare class StringMatch {
21
21
  });
22
22
  preprocess(string: string): string;
23
23
  }
24
- export declare class StringQueryRequest {
24
+ export declare class SearchRequest {
25
25
  query: StringMatch[];
26
26
  constructor(properties?: {
27
27
  query: StringMatch[];
28
28
  });
29
29
  }
30
- export declare class StringResult {
30
+ export declare abstract class AbstractSearchResult {
31
+ }
32
+ export declare class StringResult extends AbstractSearchResult {
31
33
  string: string;
32
34
  metadatas?: RangeMetadatas;
33
- constructor(properties?: {
35
+ constructor(properties: {
34
36
  string: string;
35
37
  metadatas?: RangeMetadatas;
36
38
  });
37
39
  }
40
+ export declare class NoAccess extends AbstractSearchResult {
41
+ }
package/lib/esm/query.js CHANGED
@@ -73,7 +73,7 @@ StringMatch = __decorate([
73
73
  variant(0),
74
74
  __metadata("design:paramtypes", [Object])
75
75
  ], StringMatch);
76
- export let StringQueryRequest = class StringQueryRequest {
76
+ export let SearchRequest = class SearchRequest {
77
77
  query;
78
78
  constructor(properties) {
79
79
  if (properties) {
@@ -84,20 +84,21 @@ export let StringQueryRequest = class StringQueryRequest {
84
84
  __decorate([
85
85
  field({ type: vec(StringMatch) }),
86
86
  __metadata("design:type", Array)
87
- ], StringQueryRequest.prototype, "query", void 0);
88
- StringQueryRequest = __decorate([
87
+ ], SearchRequest.prototype, "query", void 0);
88
+ SearchRequest = __decorate([
89
89
  variant(0),
90
90
  __metadata("design:paramtypes", [Object])
91
- ], StringQueryRequest);
91
+ ], SearchRequest);
92
92
  /// ----- RESULTS -----
93
- export let StringResult = class StringResult {
93
+ export class AbstractSearchResult {
94
+ }
95
+ export let StringResult = class StringResult extends AbstractSearchResult {
94
96
  string;
95
97
  metadatas;
96
98
  constructor(properties) {
97
- if (properties) {
98
- this.string = properties.string;
99
- this.metadatas = properties.metadatas;
100
- }
99
+ super();
100
+ this.string = properties.string;
101
+ this.metadatas = properties.metadatas;
101
102
  }
102
103
  };
103
104
  __decorate([
@@ -112,4 +113,9 @@ StringResult = __decorate([
112
113
  variant(0),
113
114
  __metadata("design:paramtypes", [Object])
114
115
  ], StringResult);
116
+ export let NoAccess = class NoAccess extends AbstractSearchResult {
117
+ };
118
+ NoAccess = __decorate([
119
+ variant(1)
120
+ ], NoAccess);
115
121
  //# sourceMappingURL=query.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/query.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAGtD,WAAM,aAAa,GAAnB,MAAM,aAAa;IAEzB,MAAM,CAAS;IAGf,MAAM,CAAS;IAEf,YAAY,IAAyC;QACpD,IAAI,IAAI,EAAE;YACT,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;SAC1B;IACF,CAAC;CACD,CAAA;AAVA;IADC,KAAK,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;;6CACR;AAGf;IADC,KAAK,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;;6CACR;AALH,aAAa;IADzB,OAAO,CAAC,CAAC,CAAC;;GACE,aAAa,CAYzB;AAGM,WAAM,cAAc,GAApB,MAAM,cAAc;IAE1B,SAAS,CAAkB;IAE3B,YAAY,IAAqC;QAChD,IAAI,IAAI,EAAE;YACT,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;SAChC;IACF,CAAC;CACD,CAAA;AAPA;IADC,KAAK,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;;iDACT;AAFf,cAAc;IAD1B,OAAO,CAAC,CAAC,CAAC;;GACE,cAAc,CAS1B;AAED,qBAAqB;AAGd,WAAM,WAAW,GAAjB,MAAM,WAAW;IAEvB,KAAK,CAAS;IAGd,UAAU,CAAU;IAEpB,YAAY,UAAmD;QAC9D,IAAI,UAAU,EAAE;YACf,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;SAChC;IACF,CAAC;IACD,UAAU,CAAC,MAAc;QACxB,IAAI,IAAI,CAAC,UAAU,EAAE;YACpB,OAAO,MAAM,CAAC,WAAW,EAAE,CAAC;SAC5B;QACD,OAAO,MAAM,CAAC;IACf,CAAC;CACD,CAAA;AAhBA;IADC,KAAK,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;;0CACZ;AAGd;IADC,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;;+CACF;AALR,WAAW;IADvB,OAAO,CAAC,CAAC,CAAC;;GACE,WAAW,CAkBvB;AAGM,WAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAE9B,KAAK,CAAiB;IAEtB,YAAY,UAAqC;QAChD,IAAI,UAAU,EAAE;YACf,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC;SAC9B;IACF,CAAC;CACD,CAAA;AAPA;IADC,KAAK,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;;iDACZ;AAFV,kBAAkB;IAD9B,OAAO,CAAC,CAAC,CAAC;;GACE,kBAAkB,CAS9B;AAED,uBAAuB;AAEhB,WAAM,YAAY,GAAlB,MAAM,YAAY;IAExB,MAAM,CAAS;IAGf,SAAS,CAAkB;IAE3B,YAAY,UAA2D;QACtE,IAAI,UAAU,EAAE;YACf,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;YAChC,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC;SACtC;IACF,CAAC;CACD,CAAA;AAXA;IADC,KAAK,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;;4CACX;AAGf;IADC,KAAK,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC;8BAC5B,cAAc;+CAAC;AALf,YAAY;IADxB,OAAO,CAAC,CAAC,CAAC;;GACE,YAAY,CAaxB"}
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/query.ts"],"names":[],"mappings":"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"}
@@ -1,35 +1,36 @@
1
- import { AppendOptions, CanAppend, Change, Entry } from "@peerbit/log";
1
+ import { AppendOptions, Change, Entry } from "@peerbit/log";
2
2
  import { SharedLog, SharedLogOptions } from "@peerbit/shared-log";
3
- import { SignatureWithKey } from "@peerbit/crypto";
3
+ import { PublicSignKey } from "@peerbit/crypto";
4
4
  import { Program, ProgramEvents } from "@peerbit/program";
5
- import { RPCOptions, CanRead, RPC } from "@peerbit/rpc";
5
+ import { RPCOptions, RPC, RequestContext } from "@peerbit/rpc";
6
6
  import { StringOperation, StringIndex } from "./string-index.js";
7
- import { StringQueryRequest, StringResult } from "./query.js";
7
+ import { AbstractSearchResult, SearchRequest } from "./query.js";
8
8
  import { Range } from "./range.js";
9
9
  export declare const STRING_STORE_TYPE = "string_store";
10
- export type StringStoreOptions = {
11
- canRead?: (key: SignatureWithKey) => Promise<boolean>;
12
- };
10
+ export type CanRead = (key?: PublicSignKey) => Promise<boolean> | boolean;
13
11
  export interface StringEvents {
14
12
  change: CustomEvent<Change<StringOperation>>;
15
13
  }
14
+ type CanPerform = (operation: StringOperation, context: TransactionContext) => Promise<boolean> | boolean;
16
15
  type Args = {
17
16
  canRead?: CanRead;
18
- canAppend?: CanAppend<StringOperation>;
17
+ canPerform?: CanPerform;
19
18
  log?: SharedLogOptions;
20
19
  };
20
+ export type TransactionContext = {
21
+ entry: Entry<StringOperation>;
22
+ };
21
23
  export declare class DString extends Program<Args, StringEvents & ProgramEvents> {
22
24
  _log: SharedLog<StringOperation>;
23
- query: RPC<StringQueryRequest, StringResult>;
25
+ query: RPC<SearchRequest, AbstractSearchResult>;
24
26
  _index: StringIndex;
25
- _optionCanAppend?: CanAppend<StringOperation>;
27
+ _canRead?: CanRead;
26
28
  constructor(properties: {
27
29
  id?: Uint8Array;
28
- query?: RPC<StringQueryRequest, StringResult>;
30
+ query?: RPC<SearchRequest, AbstractSearchResult>;
29
31
  });
30
32
  open(options?: Args): Promise<void>;
31
- canAppend(entry: Entry<StringOperation>): Promise<boolean>;
32
- _canAppend(entry: Entry<StringOperation>): Promise<boolean>;
33
+ private _canPerform;
33
34
  add(value: string, index: Range, options?: AppendOptions<StringOperation>): Promise<{
34
35
  entry: Entry<StringOperation>;
35
36
  removed: Entry<StringOperation>[];
@@ -38,11 +39,11 @@ export declare class DString extends Program<Args, StringEvents & ProgramEvents>
38
39
  entry: Entry<StringOperation>;
39
40
  removed: Entry<StringOperation>[];
40
41
  }>;
41
- queryHandler(query: StringQueryRequest): Promise<StringResult | undefined>;
42
+ queryHandler(query: SearchRequest, ctx: RequestContext): Promise<AbstractSearchResult | undefined>;
42
43
  getValue(options?: {
43
44
  remote: {
44
45
  callback: (string: string) => any;
45
- queryOptions: RPCOptions<StringResult>;
46
+ queryOptions: RPCOptions<AbstractSearchResult>;
46
47
  };
47
48
  }): Promise<string | undefined>;
48
49
  }
@@ -9,12 +9,14 @@ var __metadata = (this && this.__metadata) || function (k, v) {
9
9
  };
10
10
  import { field, variant } from "@dao-xyz/borsh";
11
11
  import { SharedLog } from "@peerbit/shared-log";
12
+ import { sha256Base64Sync } from "@peerbit/crypto";
12
13
  import { Program } from "@peerbit/program";
13
14
  import { RPC } from "@peerbit/rpc";
14
15
  import { logger as loggerFn } from "@peerbit/logger";
15
16
  import { StringOperation, StringIndex, encoding } from "./string-index.js";
16
- import { RangeMetadata, RangeMetadatas, StringMatch, StringQueryRequest, StringResult, } from "./query.js";
17
+ import { NoAccess, RangeMetadata, RangeMetadatas, StringMatch, SearchRequest, StringResult, } from "./query.js";
17
18
  import { CustomEvent } from "@libp2p/interfaces/events";
19
+ import { concat, fromString } from "uint8arrays";
18
20
  const logger = loggerFn({ module: "string" });
19
21
  export const STRING_STORE_TYPE = "string_store";
20
22
  const findAllOccurrences = (str, substr) => {
@@ -31,7 +33,7 @@ export let DString = class DString extends Program {
31
33
  _log;
32
34
  query;
33
35
  _index;
34
- _optionCanAppend;
36
+ _canRead;
35
37
  constructor(properties) {
36
38
  super();
37
39
  this.query = properties.query || new RPC();
@@ -39,11 +41,21 @@ export let DString = class DString extends Program {
39
41
  this._index = new StringIndex();
40
42
  }
41
43
  async open(options) {
42
- this._optionCanAppend = options?.canAppend;
43
44
  await this._index.open(this._log.log);
44
45
  await this._log.open({
45
46
  encoding,
46
- canAppend: this.canAppend.bind(this),
47
+ replicas: {
48
+ min: 0xffffffff, // assume a document can not be sharded?
49
+ },
50
+ canAppend: async (entry) => {
51
+ const operation = await entry.getPayloadValue();
52
+ if (!(await this._canPerform(operation, { entry }))) {
53
+ return false;
54
+ }
55
+ return options?.canPerform
56
+ ? options.canPerform(operation, { entry })
57
+ : true;
58
+ },
47
59
  onChange: async (change) => {
48
60
  await this._index.updateIndex(change);
49
61
  this.events.dispatchEvent(new CustomEvent("change", {
@@ -53,28 +65,18 @@ export let DString = class DString extends Program {
53
65
  });
54
66
  await this.query.open({
55
67
  ...options,
56
- topic: this._log.log.idString + "/" + "dstring",
57
- canRead: options?.canRead,
68
+ topic: sha256Base64Sync(concat([this._log.log.id, fromString("/dstring")])),
58
69
  responseHandler: this.queryHandler.bind(this),
59
- queryType: StringQueryRequest,
70
+ queryType: SearchRequest,
60
71
  responseType: StringResult,
61
72
  });
62
73
  }
63
- async canAppend(entry) {
64
- if (!(await this._canAppend(entry))) {
65
- return false;
66
- }
67
- if (this._optionCanAppend && !(await this._optionCanAppend(entry))) {
68
- return false;
69
- }
70
- return true;
71
- }
72
- async _canAppend(entry) {
73
- if (this._log.log.length === 0) {
74
+ async _canPerform(operation, context) {
75
+ if (this._log.log.length === 0 || context.entry.next.length === 0) {
74
76
  return true;
75
77
  }
76
78
  else {
77
- for (const next of entry.next) {
79
+ for (const next of context.entry.next) {
78
80
  if (this._log.log.has(next)) {
79
81
  return true;
80
82
  }
@@ -86,18 +88,24 @@ export let DString = class DString extends Program {
86
88
  return this._log.append(new StringOperation({
87
89
  index,
88
90
  value,
89
- }), { nexts: await this._log.log.getHeads(), ...options });
91
+ }), {
92
+ ...options,
93
+ meta: { ...options?.meta, next: await this._log.log.getHeads() },
94
+ });
90
95
  }
91
96
  async del(index, options) {
92
97
  return this.add("", index, options);
93
98
  }
94
- async queryHandler(query) {
99
+ async queryHandler(query, ctx) {
95
100
  logger.debug("Recieved query");
96
- if (query instanceof StringQueryRequest == false) {
101
+ if (query instanceof SearchRequest == false) {
97
102
  logger.debug("Recieved query which is not a StringQueryRequest");
98
103
  return;
99
104
  }
100
105
  const stringQuery = query;
106
+ if (this._canRead && !(await this._canRead(ctx.from))) {
107
+ return new NoAccess();
108
+ }
101
109
  const content = this._index.string;
102
110
  const relaventQueries = stringQuery.query.filter((x) => x instanceof StringMatch);
103
111
  if (relaventQueries.length == 0) {
@@ -131,13 +139,22 @@ export let DString = class DString extends Program {
131
139
  async getValue(options) {
132
140
  if (options?.remote) {
133
141
  const counter = new Map();
134
- const responses = await this.query.request(new StringQueryRequest({
142
+ const responses = await this.query.request(new SearchRequest({
135
143
  query: [],
136
144
  }), options.remote.queryOptions);
137
145
  for (const response of responses) {
138
- options?.remote.callback &&
139
- options?.remote.callback(response.response.string);
140
- counter.set(response.response.string, (counter.get(response.response.string) || 0) + 1);
146
+ if (response.response instanceof NoAccess) {
147
+ logger.error("Missing access");
148
+ continue;
149
+ }
150
+ else if (response.response instanceof StringResult) {
151
+ options?.remote.callback &&
152
+ options?.remote.callback(response.response.string);
153
+ counter.set(response.response.string, (counter.get(response.response.string) || 0) + 1);
154
+ }
155
+ else {
156
+ throw new Error("Unsupported type: " + response?.constructor?.name);
157
+ }
141
158
  }
142
159
  let max = -1;
143
160
  let ret = undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"string-store.js","sourceRoot":"","sources":["../../src/string-store.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,EAAE,SAAS,EAAoB,MAAM,qBAAqB,CAAC;AAElE,OAAO,EAAE,OAAO,EAAiB,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAuB,GAAG,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,MAAM,IAAI,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EACN,aAAa,EACb,cAAc,EACd,WAAW,EACX,kBAAkB,EAClB,YAAY,GACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAIxD,MAAM,MAAM,GAAG,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;AAE9C,MAAM,CAAC,MAAM,iBAAiB,GAAG,cAAc,CAAC;AAChD,MAAM,kBAAkB,GAAG,CAAC,GAAW,EAAE,MAAc,EAAY,EAAE;IACpE,GAAG,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IAExB,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAE9B,OAAO,GAAG,KAAK,CAAC,CAAC,EAAE;QAClB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjB,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;KACnC;IACD,OAAO,MAAM,CAAC;AACf,CAAC,CAAC;AAiBK,WAAM,OAAO,GAAb,MAAM,OAAQ,SAAQ,OAA2C;IAEvE,IAAI,CAA6B;IAGjC,KAAK,CAAwC;IAG7C,MAAM,CAAc;IAEpB,gBAAgB,CAA8B;IAE9C,YAAY,UAGX;QACA,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,IAAI,IAAI,GAAG,EAAE,CAAC;QAC3C,IAAI,CAAC,IAAI,GAAG,IAAI,SAAS,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAc;QACxB,IAAI,CAAC,gBAAgB,GAAG,OAAO,EAAE,SAAS,CAAC;QAC3C,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEtC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YACpB,QAAQ;YACR,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;YACpC,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;gBAC1B,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;gBACtC,IAAI,CAAC,MAAM,CAAC,aAAa,CACxB,IAAI,WAAW,CAAC,QAAQ,EAAE;oBACzB,MAAM,EAAE,MAAM;iBACd,CAAC,CACF,CAAC;YACH,CAAC;SACD,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YACrB,GAAG,OAAO;YACV,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,GAAG,GAAG,SAAS;YAC/C,OAAO,EAAE,OAAO,EAAE,OAAO;YACzB,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;YAC7C,SAAS,EAAE,kBAAkB;YAC7B,YAAY,EAAE,YAAY;SAC1B,CAAC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,KAA6B;QAC5C,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE;YACpC,OAAO,KAAK,CAAC;SACb;QACD,IAAI,IAAI,CAAC,gBAAgB,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE;YACnE,OAAO,KAAK,CAAC;SACb;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,KAA6B;QAC7C,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;YAC/B,OAAO,IAAI,CAAC;SACZ;aAAM;YACN,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE;gBAC9B,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;oBAC5B,OAAO,IAAI,CAAC;iBACZ;aACD;SACD;QACD,OAAO,KAAK,CAAC;IACd,CAAC;IAED,KAAK,CAAC,GAAG,CACR,KAAa,EACb,KAAY,EACZ,OAAwC;QAExC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CACtB,IAAI,eAAe,CAAC;YACnB,KAAK;YACL,KAAK;SACL,CAAC,EACF,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,GAAG,OAAO,EAAE,CACrD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,KAAY,EAAE,OAAwC;QAC/D,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,YAAY,CACjB,KAAyB;QAEzB,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAC/B,IAAI,KAAK,YAAY,kBAAkB,IAAI,KAAK,EAAE;YACjD,MAAM,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;YACjE,OAAO;SACP;QACD,MAAM,WAAW,GAAG,KAA2B,CAAC;QAEhD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QACnC,MAAM,eAAe,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,CAC/C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,YAAY,WAAW,CACd,CAAC;QACnB,IAAI,eAAe,CAAC,MAAM,IAAI,CAAC,EAAE;YAChC,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;YACpC,OAAO,IAAI,YAAY,CAAC;gBACvB,MAAM,EAAE,OAAO;aACf,CAAC,CAAC;SACH;QACD,MAAM,MAAM,GAAG,eAAe;aAC5B,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACd,MAAM,UAAU,GAAG,kBAAkB,CACpC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,EACzB,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAC7B,CAAC;YACF,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;gBAC5B,OAAO,IAAI,aAAa,CAAC;oBACxB,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;oBAClB,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;iBAClC,CAAC,CAAC;YACJ,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC;aACD,IAAI,CAAC,CAAC,CAAC,CAAC;QAEV,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE;YACvB,MAAM,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;YAC3C,OAAO;SACP;QAED,OAAO,IAAI,YAAY,CAAC;YACvB,MAAM,EAAE,OAAO;YACf,SAAS,EAAE,IAAI,cAAc,CAAC;gBAC7B,SAAS,EAAE,MAAM;aACjB,CAAC;SACF,CAAC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,OAKd;QACA,IAAI,OAAO,EAAE,MAAM,EAAE;YACpB,MAAM,OAAO,GAAwB,IAAI,GAAG,EAAE,CAAC;YAC/C,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CACzC,IAAI,kBAAkB,CAAC;gBACtB,KAAK,EAAE,EAAE;aACT,CAAC,EACF,OAAO,CAAC,MAAM,CAAC,YAAY,CAC3B,CAAC;YACF,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;gBACjC,OAAO,EAAE,MAAM,CAAC,QAAQ;oBACvB,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBACpD,OAAO,CAAC,GAAG,CACV,QAAQ,CAAC,QAAQ,CAAC,MAAM,EACxB,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAChD,CAAC;aACF;YAED,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;YACb,IAAI,GAAG,GAAuB,SAAS,CAAC;YACxC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBACxB,IAAI,GAAG,GAAG,CAAC,EAAE;oBACZ,GAAG,GAAG,CAAC,CAAC;oBACR,GAAG,GAAG,CAAC,CAAC;iBACR;YACF,CAAC,CAAC,CAAC;YACH,OAAO,GAAG,CAAC;SACX;aAAM;YACN,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;SAC1B;IACF,CAAC;CACD,CAAA;AA5KA;IADC,KAAK,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;8BACrB,SAAS;qCAAkB;AAGjC;IADC,KAAK,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;8BACd,GAAG;sCAAmC;AAG7C;IADC,KAAK,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;8BACrB,WAAW;uCAAC;AARR,OAAO;IADnB,OAAO,CAAC,SAAS,CAAC;;GACN,OAAO,CA8KnB"}
1
+ {"version":3,"file":"string-store.js","sourceRoot":"","sources":["../../src/string-store.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@peerbit/string",
3
- "version": "2.0.4",
3
+ "version": "3.0.0",
4
4
  "description": "String store",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -32,13 +32,13 @@
32
32
  "dependencies": {
33
33
  "@dao-xyz/borsh": "^5.1.5",
34
34
  "@peerbit/logger": "1.0.1",
35
- "@peerbit/program": "2.1.0",
36
- "@peerbit/rpc": "2.0.1",
37
- "@peerbit/shared-log": "^2.0.1",
35
+ "@peerbit/program": "2.2.0",
36
+ "@peerbit/rpc": "2.1.0",
37
+ "@peerbit/shared-log": "^3.0.0",
38
38
  "@peerbit/time": "1.0.2"
39
39
  },
40
40
  "devDependencies": {
41
- "@peerbit/test-utils": "^1.0.15"
41
+ "@peerbit/test-utils": "^1.0.16"
42
42
  },
43
- "gitHead": "638f34214cdee5fdd16ee1aa8089451edf3a121d"
43
+ "gitHead": "464e807d679e24b897b7811ac99d6f85fbd756f9"
44
44
  }
package/src/query.ts CHANGED
@@ -51,7 +51,7 @@ export class StringMatch {
51
51
  }
52
52
 
53
53
  @variant(0)
54
- export class StringQueryRequest {
54
+ export class SearchRequest {
55
55
  @field({ type: vec(StringMatch) })
56
56
  query!: StringMatch[];
57
57
 
@@ -63,18 +63,22 @@ export class StringQueryRequest {
63
63
  }
64
64
 
65
65
  /// ----- RESULTS -----
66
+ export abstract class AbstractSearchResult {}
67
+
66
68
  @variant(0)
67
- export class StringResult {
69
+ export class StringResult extends AbstractSearchResult {
68
70
  @field({ type: "string" })
69
71
  string: string;
70
72
 
71
73
  @field({ type: option(RangeMetadatas) })
72
74
  metadatas?: RangeMetadatas;
73
75
 
74
- constructor(properties?: { string: string; metadatas?: RangeMetadatas }) {
75
- if (properties) {
76
- this.string = properties.string;
77
- this.metadatas = properties.metadatas;
78
- }
76
+ constructor(properties: { string: string; metadatas?: RangeMetadatas }) {
77
+ super();
78
+ this.string = properties.string;
79
+ this.metadatas = properties.metadatas;
79
80
  }
80
81
  }
82
+
83
+ @variant(1)
84
+ export class NoAccess extends AbstractSearchResult {}
@@ -1,19 +1,22 @@
1
1
  import { field, variant } from "@dao-xyz/borsh";
2
2
  import { AppendOptions, CanAppend, Change, Entry } from "@peerbit/log";
3
3
  import { SharedLog, SharedLogOptions } from "@peerbit/shared-log";
4
- import { SignatureWithKey } from "@peerbit/crypto";
4
+ import { PublicSignKey, sha256Base64Sync } from "@peerbit/crypto";
5
5
  import { Program, ProgramEvents } from "@peerbit/program";
6
- import { RPCOptions, CanRead, RPC } from "@peerbit/rpc";
6
+ import { RPCOptions, RPC, RequestContext } from "@peerbit/rpc";
7
7
  import { logger as loggerFn } from "@peerbit/logger";
8
8
  import { StringOperation, StringIndex, encoding } from "./string-index.js";
9
9
  import {
10
+ AbstractSearchResult,
11
+ NoAccess,
10
12
  RangeMetadata,
11
13
  RangeMetadatas,
12
14
  StringMatch,
13
- StringQueryRequest,
15
+ SearchRequest,
14
16
  StringResult,
15
17
  } from "./query.js";
16
18
  import { CustomEvent } from "@libp2p/interfaces/events";
19
+ import { concat, fromString } from "uint8arrays";
17
20
 
18
21
  import { Range } from "./range.js";
19
22
 
@@ -34,36 +37,42 @@ const findAllOccurrences = (str: string, substr: string): number[] => {
34
37
  return result;
35
38
  };
36
39
 
37
- export type StringStoreOptions = {
38
- canRead?: (key: SignatureWithKey) => Promise<boolean>;
39
- };
40
+ export type CanRead = (key?: PublicSignKey) => Promise<boolean> | boolean;
40
41
 
41
42
  export interface StringEvents {
42
43
  change: CustomEvent<Change<StringOperation>>;
43
44
  }
44
45
 
46
+ type CanPerform = (
47
+ operation: StringOperation,
48
+ context: TransactionContext
49
+ ) => Promise<boolean> | boolean;
50
+
45
51
  type Args = {
46
52
  canRead?: CanRead;
47
- canAppend?: CanAppend<StringOperation>;
53
+ canPerform?: CanPerform;
48
54
  log?: SharedLogOptions;
49
55
  };
50
56
 
57
+ export type TransactionContext = {
58
+ entry: Entry<StringOperation>;
59
+ };
51
60
  @variant("dstring")
52
61
  export class DString extends Program<Args, StringEvents & ProgramEvents> {
53
62
  @field({ type: SharedLog })
54
63
  _log: SharedLog<StringOperation>;
55
64
 
56
65
  @field({ type: RPC })
57
- query: RPC<StringQueryRequest, StringResult>;
66
+ query: RPC<SearchRequest, AbstractSearchResult>;
58
67
 
59
68
  @field({ type: StringIndex })
60
69
  _index: StringIndex;
61
70
 
62
- _optionCanAppend?: CanAppend<StringOperation>;
71
+ _canRead?: CanRead;
63
72
 
64
73
  constructor(properties: {
65
74
  id?: Uint8Array;
66
- query?: RPC<StringQueryRequest, StringResult>;
75
+ query?: RPC<SearchRequest, AbstractSearchResult>;
67
76
  }) {
68
77
  super();
69
78
  this.query = properties.query || new RPC();
@@ -72,12 +81,23 @@ export class DString extends Program<Args, StringEvents & ProgramEvents> {
72
81
  }
73
82
 
74
83
  async open(options?: Args) {
75
- this._optionCanAppend = options?.canAppend;
76
84
  await this._index.open(this._log.log);
77
85
 
78
86
  await this._log.open({
79
87
  encoding,
80
- canAppend: this.canAppend.bind(this),
88
+ replicas: {
89
+ min: 0xffffffff, // assume a document can not be sharded?
90
+ },
91
+ canAppend: async (entry) => {
92
+ const operation = await entry.getPayloadValue();
93
+
94
+ if (!(await this._canPerform(operation, { entry }))) {
95
+ return false;
96
+ }
97
+ return options?.canPerform
98
+ ? options.canPerform(operation, { entry })
99
+ : true;
100
+ },
81
101
  onChange: async (change) => {
82
102
  await this._index.updateIndex(change);
83
103
  this.events.dispatchEvent(
@@ -90,29 +110,23 @@ export class DString extends Program<Args, StringEvents & ProgramEvents> {
90
110
 
91
111
  await this.query.open({
92
112
  ...options,
93
- topic: this._log.log.idString + "/" + "dstring",
94
- canRead: options?.canRead,
113
+ topic: sha256Base64Sync(
114
+ concat([this._log.log.id, fromString("/dstring")])
115
+ ),
95
116
  responseHandler: this.queryHandler.bind(this),
96
- queryType: StringQueryRequest,
117
+ queryType: SearchRequest,
97
118
  responseType: StringResult,
98
119
  });
99
120
  }
100
121
 
101
- async canAppend(entry: Entry<StringOperation>): Promise<boolean> {
102
- if (!(await this._canAppend(entry))) {
103
- return false;
104
- }
105
- if (this._optionCanAppend && !(await this._optionCanAppend(entry))) {
106
- return false;
107
- }
108
- return true;
109
- }
110
-
111
- async _canAppend(entry: Entry<StringOperation>): Promise<boolean> {
112
- if (this._log.log.length === 0) {
122
+ private async _canPerform(
123
+ operation: StringOperation,
124
+ context: TransactionContext
125
+ ): Promise<boolean> {
126
+ if (this._log.log.length === 0 || context.entry.next.length === 0) {
113
127
  return true;
114
128
  } else {
115
- for (const next of entry.next) {
129
+ for (const next of context.entry.next) {
116
130
  if (this._log.log.has(next)) {
117
131
  return true;
118
132
  }
@@ -131,7 +145,10 @@ export class DString extends Program<Args, StringEvents & ProgramEvents> {
131
145
  index,
132
146
  value,
133
147
  }),
134
- { nexts: await this._log.log.getHeads(), ...options }
148
+ {
149
+ ...options,
150
+ meta: { ...options?.meta, next: await this._log.log.getHeads() },
151
+ }
135
152
  );
136
153
  }
137
154
 
@@ -140,14 +157,19 @@ export class DString extends Program<Args, StringEvents & ProgramEvents> {
140
157
  }
141
158
 
142
159
  async queryHandler(
143
- query: StringQueryRequest
144
- ): Promise<StringResult | undefined> {
160
+ query: SearchRequest,
161
+ ctx: RequestContext
162
+ ): Promise<AbstractSearchResult | undefined> {
145
163
  logger.debug("Recieved query");
146
- if (query instanceof StringQueryRequest == false) {
164
+ if (query instanceof SearchRequest == false) {
147
165
  logger.debug("Recieved query which is not a StringQueryRequest");
148
166
  return;
149
167
  }
150
- const stringQuery = query as StringQueryRequest;
168
+
169
+ const stringQuery = query as SearchRequest;
170
+ if (this._canRead && !(await this._canRead(ctx.from))) {
171
+ return new NoAccess();
172
+ }
151
173
 
152
174
  const content = this._index.string;
153
175
  const relaventQueries = stringQuery.query.filter(
@@ -190,24 +212,31 @@ export class DString extends Program<Args, StringEvents & ProgramEvents> {
190
212
  async getValue(options?: {
191
213
  remote: {
192
214
  callback: (string: string) => any;
193
- queryOptions: RPCOptions<StringResult>;
215
+ queryOptions: RPCOptions<AbstractSearchResult>;
194
216
  };
195
217
  }): Promise<string | undefined> {
196
218
  if (options?.remote) {
197
219
  const counter: Map<string, number> = new Map();
198
220
  const responses = await this.query.request(
199
- new StringQueryRequest({
221
+ new SearchRequest({
200
222
  query: [],
201
223
  }),
202
224
  options.remote.queryOptions
203
225
  );
204
226
  for (const response of responses) {
205
- options?.remote.callback &&
206
- options?.remote.callback(response.response.string);
207
- counter.set(
208
- response.response.string,
209
- (counter.get(response.response.string) || 0) + 1
210
- );
227
+ if (response.response instanceof NoAccess) {
228
+ logger.error("Missing access");
229
+ continue;
230
+ } else if (response.response instanceof StringResult) {
231
+ options?.remote.callback &&
232
+ options?.remote.callback(response.response.string);
233
+ counter.set(
234
+ response.response.string,
235
+ (counter.get(response.response.string) || 0) + 1
236
+ );
237
+ } else {
238
+ throw new Error("Unsupported type: " + response?.constructor?.name);
239
+ }
211
240
  }
212
241
 
213
242
  let max = -1;