@peerbit/string 2.0.3 → 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,32 +1,36 @@
1
- import { AppendOptions, CanAppend, 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";
4
- import { Program } from "@peerbit/program";
5
- import { RPCOptions, CanRead, RPC } from "@peerbit/rpc";
3
+ import { PublicSignKey } from "@peerbit/crypto";
4
+ import { Program, ProgramEvents } from "@peerbit/program";
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;
11
+ export interface StringEvents {
12
+ change: CustomEvent<Change<StringOperation>>;
13
+ }
14
+ type CanPerform = (operation: StringOperation, context: TransactionContext) => Promise<boolean> | boolean;
13
15
  type Args = {
14
16
  canRead?: CanRead;
15
- canAppend?: CanAppend<StringOperation>;
17
+ canPerform?: CanPerform;
16
18
  log?: SharedLogOptions;
17
19
  };
18
- export declare class DString extends Program {
20
+ export type TransactionContext = {
21
+ entry: Entry<StringOperation>;
22
+ };
23
+ export declare class DString extends Program<Args, StringEvents & ProgramEvents> {
19
24
  _log: SharedLog<StringOperation>;
20
- query: RPC<StringQueryRequest, StringResult>;
25
+ query: RPC<SearchRequest, AbstractSearchResult>;
21
26
  _index: StringIndex;
22
- _optionCanAppend?: CanAppend<StringOperation>;
27
+ _canRead?: CanRead;
23
28
  constructor(properties: {
24
29
  id?: Uint8Array;
25
- query?: RPC<StringQueryRequest, StringResult>;
30
+ query?: RPC<SearchRequest, AbstractSearchResult>;
26
31
  });
27
32
  open(options?: Args): Promise<void>;
28
- canAppend(entry: Entry<StringOperation>): Promise<boolean>;
29
- _canAppend(entry: Entry<StringOperation>): Promise<boolean>;
33
+ private _canPerform;
30
34
  add(value: string, index: Range, options?: AppendOptions<StringOperation>): Promise<{
31
35
  entry: Entry<StringOperation>;
32
36
  removed: Entry<StringOperation>[];
@@ -35,11 +39,11 @@ export declare class DString extends Program {
35
39
  entry: Entry<StringOperation>;
36
40
  removed: Entry<StringOperation>[];
37
41
  }>;
38
- queryHandler(query: StringQueryRequest): Promise<StringResult | undefined>;
42
+ queryHandler(query: SearchRequest, ctx: RequestContext): Promise<AbstractSearchResult | undefined>;
39
43
  getValue(options?: {
40
44
  remote: {
41
45
  callback: (string: string) => any;
42
- queryOptions: RPCOptions<StringResult>;
46
+ queryOptions: RPCOptions<AbstractSearchResult>;
43
47
  };
44
48
  }): Promise<string | undefined>;
45
49
  }
@@ -9,11 +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";
18
+ import { CustomEvent } from "@libp2p/interfaces/events";
19
+ import { concat, fromString } from "uint8arrays";
17
20
  const logger = loggerFn({ module: "string" });
18
21
  export const STRING_STORE_TYPE = "string_store";
19
22
  const findAllOccurrences = (str, substr) => {
@@ -30,7 +33,7 @@ export let DString = class DString extends Program {
30
33
  _log;
31
34
  query;
32
35
  _index;
33
- _optionCanAppend;
36
+ _canRead;
34
37
  constructor(properties) {
35
38
  super();
36
39
  this.query = properties.query || new RPC();
@@ -38,37 +41,42 @@ export let DString = class DString extends Program {
38
41
  this._index = new StringIndex();
39
42
  }
40
43
  async open(options) {
41
- this._optionCanAppend = options?.canAppend;
42
44
  await this._index.open(this._log.log);
43
45
  await this._log.open({
44
46
  encoding,
45
- canAppend: this.canAppend.bind(this),
46
- onChange: this._index.updateIndex.bind(this._index),
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
+ },
59
+ onChange: async (change) => {
60
+ await this._index.updateIndex(change);
61
+ this.events.dispatchEvent(new CustomEvent("change", {
62
+ detail: change,
63
+ }));
64
+ },
47
65
  });
48
66
  await this.query.open({
49
67
  ...options,
50
- topic: this._log.log.idString + "/" + "dstring",
51
- canRead: options?.canRead,
68
+ topic: sha256Base64Sync(concat([this._log.log.id, fromString("/dstring")])),
52
69
  responseHandler: this.queryHandler.bind(this),
53
- queryType: StringQueryRequest,
70
+ queryType: SearchRequest,
54
71
  responseType: StringResult,
55
72
  });
56
73
  }
57
- async canAppend(entry) {
58
- if (!(await this._canAppend(entry))) {
59
- return false;
60
- }
61
- if (this._optionCanAppend && !(await this._optionCanAppend(entry))) {
62
- return false;
63
- }
64
- return true;
65
- }
66
- async _canAppend(entry) {
67
- if (this._log.log.length === 0) {
74
+ async _canPerform(operation, context) {
75
+ if (this._log.log.length === 0 || context.entry.next.length === 0) {
68
76
  return true;
69
77
  }
70
78
  else {
71
- for (const next of entry.next) {
79
+ for (const next of context.entry.next) {
72
80
  if (this._log.log.has(next)) {
73
81
  return true;
74
82
  }
@@ -80,18 +88,24 @@ export let DString = class DString extends Program {
80
88
  return this._log.append(new StringOperation({
81
89
  index,
82
90
  value,
83
- }), { nexts: await this._log.log.getHeads(), ...options });
91
+ }), {
92
+ ...options,
93
+ meta: { ...options?.meta, next: await this._log.log.getHeads() },
94
+ });
84
95
  }
85
96
  async del(index, options) {
86
97
  return this.add("", index, options);
87
98
  }
88
- async queryHandler(query) {
99
+ async queryHandler(query, ctx) {
89
100
  logger.debug("Recieved query");
90
- if (query instanceof StringQueryRequest == false) {
101
+ if (query instanceof SearchRequest == false) {
91
102
  logger.debug("Recieved query which is not a StringQueryRequest");
92
103
  return;
93
104
  }
94
105
  const stringQuery = query;
106
+ if (this._canRead && !(await this._canRead(ctx.from))) {
107
+ return new NoAccess();
108
+ }
95
109
  const content = this._index.string;
96
110
  const relaventQueries = stringQuery.query.filter((x) => x instanceof StringMatch);
97
111
  if (relaventQueries.length == 0) {
@@ -125,13 +139,22 @@ export let DString = class DString extends Program {
125
139
  async getValue(options) {
126
140
  if (options?.remote) {
127
141
  const counter = new Map();
128
- const responses = await this.query.request(new StringQueryRequest({
142
+ const responses = await this.query.request(new SearchRequest({
129
143
  query: [],
130
144
  }), options.remote.queryOptions);
131
145
  for (const response of responses) {
132
- options?.remote.callback &&
133
- options?.remote.callback(response.response.string);
134
- 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
+ }
135
158
  }
136
159
  let max = -1;
137
160
  let ret = undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"string-store.js","sourceRoot":"","sources":["../../src/string-store.ts"],"names":[],"mappings":"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"}
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.3",
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": "4752c301fb49b2f937b4039533ff5bc3537da3e0"
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,18 +1,22 @@
1
1
  import { field, variant } from "@dao-xyz/borsh";
2
- import { AppendOptions, CanAppend, Entry } from "@peerbit/log";
2
+ import { AppendOptions, CanAppend, Change, Entry } from "@peerbit/log";
3
3
  import { SharedLog, SharedLogOptions } from "@peerbit/shared-log";
4
- import { SignatureWithKey } from "@peerbit/crypto";
5
- import { Program } from "@peerbit/program";
6
- import { RPCOptions, CanRead, RPC } from "@peerbit/rpc";
4
+ import { PublicSignKey, sha256Base64Sync } from "@peerbit/crypto";
5
+ import { Program, ProgramEvents } from "@peerbit/program";
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";
18
+ import { CustomEvent } from "@libp2p/interfaces/events";
19
+ import { concat, fromString } from "uint8arrays";
16
20
 
17
21
  import { Range } from "./range.js";
18
22
 
@@ -33,31 +37,42 @@ const findAllOccurrences = (str: string, substr: string): number[] => {
33
37
  return result;
34
38
  };
35
39
 
36
- export type StringStoreOptions = {
37
- canRead?: (key: SignatureWithKey) => Promise<boolean>;
38
- };
40
+ export type CanRead = (key?: PublicSignKey) => Promise<boolean> | boolean;
41
+
42
+ export interface StringEvents {
43
+ change: CustomEvent<Change<StringOperation>>;
44
+ }
45
+
46
+ type CanPerform = (
47
+ operation: StringOperation,
48
+ context: TransactionContext
49
+ ) => Promise<boolean> | boolean;
39
50
 
40
51
  type Args = {
41
52
  canRead?: CanRead;
42
- canAppend?: CanAppend<StringOperation>;
53
+ canPerform?: CanPerform;
43
54
  log?: SharedLogOptions;
44
55
  };
56
+
57
+ export type TransactionContext = {
58
+ entry: Entry<StringOperation>;
59
+ };
45
60
  @variant("dstring")
46
- export class DString extends Program {
61
+ export class DString extends Program<Args, StringEvents & ProgramEvents> {
47
62
  @field({ type: SharedLog })
48
63
  _log: SharedLog<StringOperation>;
49
64
 
50
65
  @field({ type: RPC })
51
- query: RPC<StringQueryRequest, StringResult>;
66
+ query: RPC<SearchRequest, AbstractSearchResult>;
52
67
 
53
68
  @field({ type: StringIndex })
54
69
  _index: StringIndex;
55
70
 
56
- _optionCanAppend?: CanAppend<StringOperation>;
71
+ _canRead?: CanRead;
57
72
 
58
73
  constructor(properties: {
59
74
  id?: Uint8Array;
60
- query?: RPC<StringQueryRequest, StringResult>;
75
+ query?: RPC<SearchRequest, AbstractSearchResult>;
61
76
  }) {
62
77
  super();
63
78
  this.query = properties.query || new RPC();
@@ -66,40 +81,52 @@ export class DString extends Program {
66
81
  }
67
82
 
68
83
  async open(options?: Args) {
69
- this._optionCanAppend = options?.canAppend;
70
84
  await this._index.open(this._log.log);
71
85
 
72
86
  await this._log.open({
73
87
  encoding,
74
- canAppend: this.canAppend.bind(this),
75
- onChange: this._index.updateIndex.bind(this._index),
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
+ },
101
+ onChange: async (change) => {
102
+ await this._index.updateIndex(change);
103
+ this.events.dispatchEvent(
104
+ new CustomEvent("change", {
105
+ detail: change,
106
+ })
107
+ );
108
+ },
76
109
  });
77
110
 
78
111
  await this.query.open({
79
112
  ...options,
80
- topic: this._log.log.idString + "/" + "dstring",
81
- canRead: options?.canRead,
113
+ topic: sha256Base64Sync(
114
+ concat([this._log.log.id, fromString("/dstring")])
115
+ ),
82
116
  responseHandler: this.queryHandler.bind(this),
83
- queryType: StringQueryRequest,
117
+ queryType: SearchRequest,
84
118
  responseType: StringResult,
85
119
  });
86
120
  }
87
121
 
88
- async canAppend(entry: Entry<StringOperation>): Promise<boolean> {
89
- if (!(await this._canAppend(entry))) {
90
- return false;
91
- }
92
- if (this._optionCanAppend && !(await this._optionCanAppend(entry))) {
93
- return false;
94
- }
95
- return true;
96
- }
97
-
98
- async _canAppend(entry: Entry<StringOperation>): Promise<boolean> {
99
- 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) {
100
127
  return true;
101
128
  } else {
102
- for (const next of entry.next) {
129
+ for (const next of context.entry.next) {
103
130
  if (this._log.log.has(next)) {
104
131
  return true;
105
132
  }
@@ -118,7 +145,10 @@ export class DString extends Program {
118
145
  index,
119
146
  value,
120
147
  }),
121
- { nexts: await this._log.log.getHeads(), ...options }
148
+ {
149
+ ...options,
150
+ meta: { ...options?.meta, next: await this._log.log.getHeads() },
151
+ }
122
152
  );
123
153
  }
124
154
 
@@ -127,14 +157,19 @@ export class DString extends Program {
127
157
  }
128
158
 
129
159
  async queryHandler(
130
- query: StringQueryRequest
131
- ): Promise<StringResult | undefined> {
160
+ query: SearchRequest,
161
+ ctx: RequestContext
162
+ ): Promise<AbstractSearchResult | undefined> {
132
163
  logger.debug("Recieved query");
133
- if (query instanceof StringQueryRequest == false) {
164
+ if (query instanceof SearchRequest == false) {
134
165
  logger.debug("Recieved query which is not a StringQueryRequest");
135
166
  return;
136
167
  }
137
- 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
+ }
138
173
 
139
174
  const content = this._index.string;
140
175
  const relaventQueries = stringQuery.query.filter(
@@ -177,24 +212,31 @@ export class DString extends Program {
177
212
  async getValue(options?: {
178
213
  remote: {
179
214
  callback: (string: string) => any;
180
- queryOptions: RPCOptions<StringResult>;
215
+ queryOptions: RPCOptions<AbstractSearchResult>;
181
216
  };
182
217
  }): Promise<string | undefined> {
183
218
  if (options?.remote) {
184
219
  const counter: Map<string, number> = new Map();
185
220
  const responses = await this.query.request(
186
- new StringQueryRequest({
221
+ new SearchRequest({
187
222
  query: [],
188
223
  }),
189
224
  options.remote.queryOptions
190
225
  );
191
226
  for (const response of responses) {
192
- options?.remote.callback &&
193
- options?.remote.callback(response.response.string);
194
- counter.set(
195
- response.response.string,
196
- (counter.get(response.response.string) || 0) + 1
197
- );
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
+ }
198
240
  }
199
241
 
200
242
  let max = -1;