@enbox/dwn-sdk-js 0.4.16 → 0.4.18

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 (175) hide show
  1. package/dist/browser.mjs +1 -1
  2. package/dist/browser.mjs.map +4 -4
  3. package/dist/esm/generated/precompiled-validators.js +978 -840
  4. package/dist/esm/generated/precompiled-validators.js.map +1 -1
  5. package/dist/esm/json-schemas/definitions.json +5 -0
  6. package/dist/esm/src/core/dwn-constant.js +2 -2
  7. package/dist/esm/src/core/dwn-error.js +0 -1
  8. package/dist/esm/src/core/dwn-error.js.map +1 -1
  9. package/dist/esm/src/core/protocol-authorization-validation.js +1 -24
  10. package/dist/esm/src/core/protocol-authorization-validation.js.map +1 -1
  11. package/dist/esm/src/core/protocol-authorization.js +1 -5
  12. package/dist/esm/src/core/protocol-authorization.js.map +1 -1
  13. package/dist/esm/src/core/validation-state-reader.js +2 -3
  14. package/dist/esm/src/core/validation-state-reader.js.map +1 -1
  15. package/dist/esm/src/handlers/records-collection.js +200 -0
  16. package/dist/esm/src/handlers/records-collection.js.map +1 -0
  17. package/dist/esm/src/handlers/records-count.js +26 -195
  18. package/dist/esm/src/handlers/records-count.js.map +1 -1
  19. package/dist/esm/src/handlers/records-query.js +19 -373
  20. package/dist/esm/src/handlers/records-query.js.map +1 -1
  21. package/dist/esm/src/handlers/records-subscribe.js +21 -338
  22. package/dist/esm/src/handlers/records-subscribe.js.map +1 -1
  23. package/dist/esm/src/handlers/records-write.js +8 -26
  24. package/dist/esm/src/handlers/records-write.js.map +1 -1
  25. package/dist/esm/src/index.js +1 -1
  26. package/dist/esm/src/index.js.map +1 -1
  27. package/dist/esm/src/interfaces/protocols-configure.js +4 -9
  28. package/dist/esm/src/interfaces/protocols-configure.js.map +1 -1
  29. package/dist/esm/src/interfaces/records-count.js +1 -1
  30. package/dist/esm/src/interfaces/records-count.js.map +1 -1
  31. package/dist/esm/src/interfaces/records-query.js +1 -1
  32. package/dist/esm/src/interfaces/records-query.js.map +1 -1
  33. package/dist/esm/src/interfaces/records-subscribe.js +3 -1
  34. package/dist/esm/src/interfaces/records-subscribe.js.map +1 -1
  35. package/dist/esm/src/store/index-level.js +210 -21
  36. package/dist/esm/src/store/index-level.js.map +1 -1
  37. package/dist/esm/src/store/message-store-level.js +192 -21
  38. package/dist/esm/src/store/message-store-level.js.map +1 -1
  39. package/dist/esm/src/store/storage-controller.js +1 -3
  40. package/dist/esm/src/store/storage-controller.js.map +1 -1
  41. package/dist/esm/src/types/protocols-types.js +0 -10
  42. package/dist/esm/src/types/protocols-types.js.map +1 -1
  43. package/dist/esm/src/utils/filter.js +35 -1
  44. package/dist/esm/src/utils/filter.js.map +1 -1
  45. package/dist/esm/src/utils/grant-key-coverage.js +4 -6
  46. package/dist/esm/src/utils/grant-key-coverage.js.map +1 -1
  47. package/dist/esm/src/utils/messages.js +4 -14
  48. package/dist/esm/src/utils/messages.js.map +1 -1
  49. package/dist/esm/src/utils/permission-scope.js +3 -9
  50. package/dist/esm/src/utils/permission-scope.js.map +1 -1
  51. package/dist/esm/src/utils/record-limit-occupancy.js +73 -202
  52. package/dist/esm/src/utils/record-limit-occupancy.js.map +1 -1
  53. package/dist/esm/src/utils/records.js +19 -52
  54. package/dist/esm/src/utils/records.js.map +1 -1
  55. package/dist/esm/tests/core/records-grant-authorization.spec.js +13 -0
  56. package/dist/esm/tests/core/records-grant-authorization.spec.js.map +1 -1
  57. package/dist/esm/tests/core/replication-replay-property.spec.js +2 -2
  58. package/dist/esm/tests/core/replication-replay-property.spec.js.map +1 -1
  59. package/dist/esm/tests/core/validation-read-closure.spec.js +1 -1
  60. package/dist/esm/tests/core/validation-read-closure.spec.js.map +1 -1
  61. package/dist/esm/tests/dwn.spec.js +2 -2
  62. package/dist/esm/tests/dwn.spec.js.map +1 -1
  63. package/dist/esm/tests/features/records-delivery.spec.js +2 -5
  64. package/dist/esm/tests/features/records-delivery.spec.js.map +1 -1
  65. package/dist/esm/tests/features/records-nested-query-scope.spec.js +149 -70
  66. package/dist/esm/tests/features/records-nested-query-scope.spec.js.map +1 -1
  67. package/dist/esm/tests/features/records-record-limit.spec.js +380 -95
  68. package/dist/esm/tests/features/records-record-limit.spec.js.map +1 -1
  69. package/dist/esm/tests/fuzz/filter.fuzz.spec.js +19 -4
  70. package/dist/esm/tests/fuzz/filter.fuzz.spec.js.map +1 -1
  71. package/dist/esm/tests/handlers/records-count.spec.js +52 -1
  72. package/dist/esm/tests/handlers/records-count.spec.js.map +1 -1
  73. package/dist/esm/tests/handlers/records-subscribe.spec.js +76 -1
  74. package/dist/esm/tests/handlers/records-subscribe.spec.js.map +1 -1
  75. package/dist/esm/tests/handlers/records-write.spec.js +57 -3
  76. package/dist/esm/tests/handlers/records-write.spec.js.map +1 -1
  77. package/dist/esm/tests/store/index-level.spec.js +208 -1
  78. package/dist/esm/tests/store/index-level.spec.js.map +1 -1
  79. package/dist/esm/tests/store/message-store-cross-context.spec.js +46 -0
  80. package/dist/esm/tests/store/message-store-cross-context.spec.js.map +1 -0
  81. package/dist/esm/tests/store/message-store-level.spec.js +76 -1
  82. package/dist/esm/tests/store/message-store-level.spec.js.map +1 -1
  83. package/dist/esm/tests/store/message-store.spec.js +81 -0
  84. package/dist/esm/tests/store/message-store.spec.js.map +1 -1
  85. package/dist/esm/tests/utils/filters.spec.js +25 -4
  86. package/dist/esm/tests/utils/filters.spec.js.map +1 -1
  87. package/dist/esm/tests/utils/permission-scope.spec.js +4 -0
  88. package/dist/esm/tests/utils/permission-scope.spec.js.map +1 -1
  89. package/dist/esm/tests/utils/records.spec.js +12 -0
  90. package/dist/esm/tests/utils/records.spec.js.map +1 -1
  91. package/dist/esm/tests/validation/json-schemas/records/records-write.spec.js +3 -1
  92. package/dist/esm/tests/validation/json-schemas/records/records-write.spec.js.map +1 -1
  93. package/dist/types/generated/precompiled-validators.d.ts.map +1 -1
  94. package/dist/types/src/core/dwn-constant.d.ts +2 -2
  95. package/dist/types/src/core/dwn-error.d.ts +0 -1
  96. package/dist/types/src/core/dwn-error.d.ts.map +1 -1
  97. package/dist/types/src/core/protocol-authorization-validation.d.ts +0 -10
  98. package/dist/types/src/core/protocol-authorization-validation.d.ts.map +1 -1
  99. package/dist/types/src/core/protocol-authorization.d.ts.map +1 -1
  100. package/dist/types/src/core/validation-state-reader.d.ts.map +1 -1
  101. package/dist/types/src/handlers/records-collection.d.ts +32 -0
  102. package/dist/types/src/handlers/records-collection.d.ts.map +1 -0
  103. package/dist/types/src/handlers/records-count.d.ts +0 -34
  104. package/dist/types/src/handlers/records-count.d.ts.map +1 -1
  105. package/dist/types/src/handlers/records-query.d.ts +0 -61
  106. package/dist/types/src/handlers/records-query.d.ts.map +1 -1
  107. package/dist/types/src/handlers/records-subscribe.d.ts +1 -37
  108. package/dist/types/src/handlers/records-subscribe.d.ts.map +1 -1
  109. package/dist/types/src/handlers/records-write.d.ts +3 -0
  110. package/dist/types/src/handlers/records-write.d.ts.map +1 -1
  111. package/dist/types/src/index.d.ts +3 -3
  112. package/dist/types/src/index.d.ts.map +1 -1
  113. package/dist/types/src/interfaces/protocols-configure.d.ts.map +1 -1
  114. package/dist/types/src/interfaces/records-subscribe.d.ts.map +1 -1
  115. package/dist/types/src/store/index-level.d.ts +61 -0
  116. package/dist/types/src/store/index-level.d.ts.map +1 -1
  117. package/dist/types/src/store/message-store-level.d.ts +24 -6
  118. package/dist/types/src/store/message-store-level.d.ts.map +1 -1
  119. package/dist/types/src/store/storage-controller.d.ts.map +1 -1
  120. package/dist/types/src/types/message-store.d.ts +28 -2
  121. package/dist/types/src/types/message-store.d.ts.map +1 -1
  122. package/dist/types/src/types/protocols-types.d.ts +7 -24
  123. package/dist/types/src/types/protocols-types.d.ts.map +1 -1
  124. package/dist/types/src/types/query-types.d.ts +8 -1
  125. package/dist/types/src/types/query-types.d.ts.map +1 -1
  126. package/dist/types/src/types/records-types.d.ts +3 -2
  127. package/dist/types/src/types/records-types.d.ts.map +1 -1
  128. package/dist/types/src/utils/filter.d.ts +14 -1
  129. package/dist/types/src/utils/filter.d.ts.map +1 -1
  130. package/dist/types/src/utils/grant-key-coverage.d.ts.map +1 -1
  131. package/dist/types/src/utils/messages.d.ts.map +1 -1
  132. package/dist/types/src/utils/permission-scope.d.ts +0 -2
  133. package/dist/types/src/utils/permission-scope.d.ts.map +1 -1
  134. package/dist/types/src/utils/record-limit-occupancy.d.ts +25 -12
  135. package/dist/types/src/utils/record-limit-occupancy.d.ts.map +1 -1
  136. package/dist/types/src/utils/records.d.ts +6 -24
  137. package/dist/types/src/utils/records.d.ts.map +1 -1
  138. package/dist/types/tests/features/records-delivery.spec.d.ts.map +1 -1
  139. package/dist/types/tests/features/records-nested-query-scope.spec.d.ts.map +1 -1
  140. package/dist/types/tests/features/records-record-limit.spec.d.ts.map +1 -1
  141. package/dist/types/tests/handlers/records-count.spec.d.ts.map +1 -1
  142. package/dist/types/tests/handlers/records-subscribe.spec.d.ts.map +1 -1
  143. package/dist/types/tests/handlers/records-write.spec.d.ts.map +1 -1
  144. package/dist/types/tests/store/message-store-cross-context.spec.d.ts +2 -0
  145. package/dist/types/tests/store/message-store-cross-context.spec.d.ts.map +1 -0
  146. package/dist/types/tests/store/message-store.spec.d.ts.map +1 -1
  147. package/package.json +4 -4
  148. package/src/core/dwn-constant.ts +2 -2
  149. package/src/core/dwn-error.ts +0 -2
  150. package/src/core/protocol-authorization-validation.ts +1 -33
  151. package/src/core/protocol-authorization.ts +0 -7
  152. package/src/core/validation-state-reader.ts +2 -3
  153. package/src/handlers/records-collection.ts +269 -0
  154. package/src/handlers/records-count.ts +38 -232
  155. package/src/handlers/records-query.ts +22 -444
  156. package/src/handlers/records-subscribe.ts +26 -397
  157. package/src/handlers/records-write.ts +17 -32
  158. package/src/index.ts +3 -3
  159. package/src/interfaces/protocols-configure.ts +4 -13
  160. package/src/interfaces/records-count.ts +1 -1
  161. package/src/interfaces/records-query.ts +1 -1
  162. package/src/interfaces/records-subscribe.ts +5 -2
  163. package/src/store/index-level.ts +323 -28
  164. package/src/store/message-store-level.ts +251 -25
  165. package/src/store/storage-controller.ts +1 -3
  166. package/src/types/message-store.ts +30 -2
  167. package/src/types/protocols-types.ts +7 -26
  168. package/src/types/query-types.ts +10 -2
  169. package/src/types/records-types.ts +3 -2
  170. package/src/utils/filter.ts +40 -3
  171. package/src/utils/grant-key-coverage.ts +4 -7
  172. package/src/utils/messages.ts +4 -14
  173. package/src/utils/permission-scope.ts +4 -11
  174. package/src/utils/record-limit-occupancy.ts +108 -293
  175. package/src/utils/records.ts +22 -57
@@ -1,16 +1,7 @@
1
1
  import { attachInitialWrites } from '../utils/initial-write-attachment.js';
2
- import { authenticate } from '../core/auth.js';
3
- import { DateSort } from '../types/records-types.js';
4
- import { EncryptionControl } from '../core/encryption-control.js';
5
- import { Message } from '../core/message.js';
6
2
  import { messageReplyFromError } from '../core/message-reply.js';
7
- import { ProtocolAuthorization } from '../core/protocol-authorization.js';
8
- import { queryRecordsWithRecordLimitOccupancy } from '../utils/record-limit-occupancy.js';
9
- import { Records } from '../utils/records.js';
10
- import { RecordsGrantAuthorization } from '../core/records-grant-authorization.js';
11
3
  import { RecordsQuery } from '../interfaces/records-query.js';
12
- import { SortDirection } from '../types/query-types.js';
13
- import { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';
4
+ import { queryVisibleRecordsPage, resolveRecordsCollectionVisibility } from './records-collection.js';
14
5
  export class RecordsQueryHandler {
15
6
  deps;
16
7
  constructor(deps) {
@@ -21,379 +12,34 @@ export class RecordsQueryHandler {
21
12
  try {
22
13
  recordsQuery = await RecordsQuery.parse(message);
23
14
  }
24
- catch (e) {
25
- return messageReplyFromError(e, 400);
15
+ catch (error) {
16
+ return messageReplyFromError(error, 400);
26
17
  }
27
- let recordsWrites;
28
- let cursor;
29
- const requester = Message.getRequester(recordsQuery.message);
30
- // if this is an anonymous query and the filter supports published records, query only published records
31
- if (Records.filterIncludesPublishedRecords(recordsQuery.message.descriptor.filter) && recordsQuery.author === undefined) {
32
- const results = await this.fetchPublishedRecords(tenant, recordsQuery, requester);
33
- recordsWrites = results.messages;
34
- cursor = results.cursor;
18
+ let visibility;
19
+ try {
20
+ visibility = await resolveRecordsCollectionVisibility(tenant, recordsQuery, this.deps);
35
21
  }
36
- else {
37
- // authentication and authorization
38
- try {
39
- await authenticate(message.authorization, this.deps.didResolver);
40
- await RecordsQueryHandler.authorizeRecordsQuery(tenant, recordsQuery, this.deps);
41
- }
42
- catch (e) {
43
- return messageReplyFromError(e, 401);
44
- }
45
- if (recordsQuery.author === tenant) {
46
- const results = requester === tenant
47
- ? await this.fetchRecordsAsOwner(tenant, recordsQuery)
48
- : await this.fetchRecordsAsOwnerDelegate(tenant, recordsQuery, requester);
49
- recordsWrites = results.messages;
50
- cursor = results.cursor;
51
- }
52
- else {
53
- const results = await this.fetchRecordsAsNonOwner(tenant, recordsQuery, requester);
54
- recordsWrites = results.messages;
55
- cursor = results.cursor;
56
- }
22
+ catch (error) {
23
+ return messageReplyFromError(error, 401);
57
24
  }
58
- // attach the retained initial write to every entry that is not itself an initial write
59
- const completeRecordsWrites = await attachInitialWrites({
25
+ const result = await queryVisibleRecordsPage({
26
+ deps: this.deps,
27
+ tenant,
28
+ request: recordsQuery,
29
+ visibility,
30
+ });
31
+ // Attach the retained initial write to every entry that is not itself an initial write.
32
+ const entries = await attachInitialWrites({
60
33
  messageStore: this.deps.messageStore,
61
34
  tenant,
62
- recordsWrites,
35
+ recordsWrites: result.messages,
63
36
  operationName: 'RecordsQuery',
64
37
  });
65
38
  return {
66
39
  status: { code: 200, detail: 'OK' },
67
- entries: completeRecordsWrites,
68
- cursor
69
- };
70
- }
71
- /**
72
- * Convert an incoming DateSort to a sort type accepted by MessageStore
73
- * Defaults to 'dateCreated' in Descending order if no sort is supplied.
74
- *
75
- * @param dateSort the optional DateSort from the RecordsQuery message descriptor.
76
- * @returns {MessageSort} for MessageStore sorting.
77
- */
78
- convertDateSort(dateSort) {
79
- switch (dateSort) {
80
- case DateSort.CreatedAscending:
81
- return { dateCreated: SortDirection.Ascending };
82
- case DateSort.CreatedDescending:
83
- return { dateCreated: SortDirection.Descending };
84
- case DateSort.PublishedAscending:
85
- return { datePublished: SortDirection.Ascending };
86
- case DateSort.PublishedDescending:
87
- return { datePublished: SortDirection.Descending };
88
- case DateSort.UpdatedAscending:
89
- return { messageTimestamp: SortDirection.Ascending };
90
- case DateSort.UpdatedDescending:
91
- return { messageTimestamp: SortDirection.Descending };
92
- default:
93
- return { dateCreated: SortDirection.Ascending };
94
- }
95
- }
96
- /**
97
- * Fetches the records as the owner of the DWN with no additional filtering.
98
- */
99
- async fetchRecordsAsOwner(tenant, recordsQuery) {
100
- const { dateSort, filter, pagination } = recordsQuery.message.descriptor;
101
- // fetch all published records matching the query
102
- const queryFilter = {
103
- ...Records.convertFilter(filter, dateSort),
104
- interface: DwnInterfaceName.Records,
105
- method: DwnMethodName.Write,
106
- isLatestBaseState: true
107
- };
108
- const messageSort = this.convertDateSort(dateSort);
109
- return this.queryRecordsWithVisibleControlFiltering({
110
- tenant,
111
- recordsQuery,
112
- requester: tenant,
113
- filters: [queryFilter],
114
- messageSort,
115
- pagination,
116
- });
117
- }
118
- async fetchRecordsAsOwnerDelegate(tenant, recordsQuery, requester) {
119
- const { dateSort, filter, pagination } = recordsQuery.message.descriptor;
120
- const queryFilter = {
121
- ...Records.convertFilter(filter, dateSort),
122
- interface: DwnInterfaceName.Records,
123
- method: DwnMethodName.Write,
124
- isLatestBaseState: true
40
+ entries,
41
+ cursor: result.cursor,
125
42
  };
126
- const messageSort = this.convertDateSort(dateSort);
127
- return this.queryRecordsWithVisibleControlFiltering({
128
- tenant,
129
- recordsQuery,
130
- requester,
131
- filters: [queryFilter],
132
- messageSort,
133
- pagination,
134
- });
135
- }
136
- /**
137
- * Fetches the records as a non-owner.
138
- *
139
- * Filters can support returning both published and unpublished records,
140
- * as well as explicitly only published or only unpublished records.
141
- *
142
- * A) BOTH published and unpublished:
143
- * 1. published records; and
144
- * 2. unpublished records intended for the query author (where `recipient` is the query author); and
145
- * 3. unpublished records authorized by a protocol rule.
146
- *
147
- * B) PUBLISHED:
148
- * 1. only published records;
149
- *
150
- * C) UNPUBLISHED:
151
- * 1. unpublished records intended for the query author (where `recipient` is the query author); and
152
- * 2. unpublished records authorized by a protocol rule.
153
- *
154
- */
155
- async fetchRecordsAsNonOwner(tenant, recordsQuery, requester) {
156
- const { dateSort, pagination, filter } = recordsQuery.message.descriptor;
157
- const filters = [];
158
- if (Records.filterIncludesPublishedRecords(filter)) {
159
- filters.push(RecordsQueryHandler.buildPublishedRecordsFilter(recordsQuery));
160
- }
161
- if (Records.filterIncludesUnpublishedRecords(filter)) {
162
- if (EncryptionControl.isExactAudienceFilter(filter)) {
163
- filters.push(Records.buildUnpublishedControlRecordsFilter(filter, dateSort));
164
- }
165
- if (Records.shouldBuildUnpublishedAuthorFilter(filter, recordsQuery.author)) {
166
- filters.push(RecordsQueryHandler.buildUnpublishedRecordsByQueryAuthorFilter(recordsQuery));
167
- }
168
- if (Records.shouldProtocolAuthorize(recordsQuery.signaturePayload)) {
169
- filters.push(RecordsQueryHandler.buildUnpublishedProtocolAuthorizedRecordsFilter(recordsQuery));
170
- }
171
- if (Message.getPermissionGrantId(recordsQuery.signaturePayload) !== undefined) {
172
- filters.push(RecordsQueryHandler.buildUnpublishedPermissionGrantAuthorizedRecordsFilter(recordsQuery));
173
- }
174
- if (Records.shouldBuildUnpublishedRecipientFilter(filter, recordsQuery.author)) {
175
- filters.push(RecordsQueryHandler.buildUnpublishedRecordsForQueryAuthorFilter(recordsQuery));
176
- }
177
- }
178
- const messageSort = this.convertDateSort(dateSort);
179
- return this.queryRecordsWithVisibleControlFiltering({
180
- tenant,
181
- recordsQuery,
182
- requester,
183
- filters,
184
- messageSort,
185
- pagination,
186
- });
187
- }
188
- /**
189
- * Fetches only published records.
190
- */
191
- async fetchPublishedRecords(tenant, recordsQuery, requester) {
192
- const { dateSort, pagination } = recordsQuery.message.descriptor;
193
- const filter = RecordsQueryHandler.buildPublishedRecordsFilter(recordsQuery);
194
- const messageSort = this.convertDateSort(dateSort);
195
- return this.queryRecordsWithVisibleControlFiltering({
196
- tenant,
197
- recordsQuery,
198
- requester,
199
- filters: [filter],
200
- messageSort,
201
- pagination,
202
- });
203
- }
204
- async queryRecordsWithVisibleControlFiltering(input) {
205
- const { tenant, recordsQuery, requester, filters, messageSort, pagination } = input;
206
- const controlFilters = Records.buildControlRecordsFilters(filters);
207
- const currentAudienceRecordIdCache = new Map();
208
- if (controlFilters.length === 0) {
209
- const result = await queryRecordsWithRecordLimitOccupancy({
210
- messageStore: this.deps.messageStore,
211
- validationStateReader: this.deps.validationStateReader,
212
- tenant,
213
- filters,
214
- messageSort,
215
- pagination,
216
- messageTimestamp: recordsQuery.message.descriptor.messageTimestamp,
217
- });
218
- return EncryptionControl.projectCurrentAudienceRecordPage({
219
- messageStore: this.deps.messageStore,
220
- tenant,
221
- filters,
222
- currentAudienceRecordIdCache,
223
- result: {
224
- messages: result.messages,
225
- cursor: result.cursor,
226
- },
227
- });
228
- }
229
- if (pagination?.limit === undefined || pagination.limit <= 0) {
230
- const result = await queryRecordsWithRecordLimitOccupancy({
231
- messageStore: this.deps.messageStore,
232
- validationStateReader: this.deps.validationStateReader,
233
- tenant,
234
- filters,
235
- messageSort,
236
- pagination,
237
- messageTimestamp: recordsQuery.message.descriptor.messageTimestamp,
238
- });
239
- const projectedResult = await EncryptionControl.projectCurrentAudienceRecordPage({
240
- messageStore: this.deps.messageStore,
241
- tenant,
242
- filters,
243
- currentAudienceRecordIdCache,
244
- result: {
245
- messages: result.messages,
246
- cursor: result.cursor,
247
- },
248
- });
249
- return {
250
- messages: await this.filterControlRecordsForRequester(tenant, recordsQuery, requester, projectedResult.messages),
251
- cursor: projectedResult.cursor,
252
- };
253
- }
254
- const visibleMessages = [];
255
- let cursor = pagination.cursor;
256
- let nextCursor;
257
- // Keeps visible-page pagination stable until #1100 moves control visibility into indexed store filters.
258
- do {
259
- const remainingLimit = pagination.limit - visibleMessages.length;
260
- const result = await queryRecordsWithRecordLimitOccupancy({
261
- messageStore: this.deps.messageStore,
262
- validationStateReader: this.deps.validationStateReader,
263
- tenant,
264
- filters,
265
- messageSort,
266
- pagination: { ...pagination, cursor, limit: remainingLimit },
267
- messageTimestamp: recordsQuery.message.descriptor.messageTimestamp,
268
- });
269
- const projectedResult = await EncryptionControl.projectCurrentAudienceRecordPage({
270
- messageStore: this.deps.messageStore,
271
- tenant,
272
- filters,
273
- currentAudienceRecordIdCache,
274
- result: {
275
- messages: result.messages,
276
- cursor: result.cursor,
277
- },
278
- });
279
- const filteredMessages = await this.filterControlRecordsForRequester(tenant, recordsQuery, requester, projectedResult.messages);
280
- visibleMessages.push(...filteredMessages);
281
- nextCursor = projectedResult.cursor;
282
- cursor = projectedResult.cursor;
283
- } while (visibleMessages.length < pagination.limit && cursor !== undefined);
284
- return { messages: visibleMessages, cursor: nextCursor };
285
- }
286
- static buildPublishedRecordsFilter(recordsQuery) {
287
- const { dateSort, filter } = recordsQuery.message.descriptor;
288
- // fetch all published records matching the query
289
- return {
290
- ...Records.convertFilter(filter, dateSort),
291
- interface: DwnInterfaceName.Records,
292
- method: DwnMethodName.Write,
293
- published: true,
294
- isLatestBaseState: true
295
- };
296
- }
297
- /**
298
- * Creates a filter for unpublished records that are intended for the query author (where `recipient` is the author).
299
- */
300
- static buildUnpublishedRecordsForQueryAuthorFilter(recordsQuery) {
301
- const { dateSort, filter } = recordsQuery.message.descriptor;
302
- // include records where recipient is query author
303
- return {
304
- ...Records.convertFilter(filter, dateSort),
305
- interface: DwnInterfaceName.Records,
306
- method: DwnMethodName.Write,
307
- recipient: recordsQuery.author,
308
- isLatestBaseState: true,
309
- published: false
310
- };
311
- }
312
- /**
313
- * Creates a filter for unpublished records that are within the specified protocol.
314
- * Validation that `protocol` and other required protocol-related fields occurs before this method.
315
- */
316
- static buildUnpublishedProtocolAuthorizedRecordsFilter(recordsQuery) {
317
- const { dateSort, filter } = recordsQuery.message.descriptor;
318
- return {
319
- ...Records.convertFilter(filter, dateSort),
320
- interface: DwnInterfaceName.Records,
321
- method: DwnMethodName.Write,
322
- isLatestBaseState: true,
323
- published: false
324
- };
325
- }
326
- /**
327
- * Creates a filter for unpublished records authorized by a permission grant.
328
- */
329
- static buildUnpublishedPermissionGrantAuthorizedRecordsFilter(recordsQuery) {
330
- const { dateSort, filter } = recordsQuery.message.descriptor;
331
- return {
332
- ...Records.convertFilter(filter, dateSort),
333
- interface: DwnInterfaceName.Records,
334
- method: DwnMethodName.Write,
335
- isLatestBaseState: true,
336
- published: false
337
- };
338
- }
339
- /**
340
- * Creates a filter for only unpublished records where the author is the same as the query author.
341
- */
342
- static buildUnpublishedRecordsByQueryAuthorFilter(recordsQuery) {
343
- const { dateSort, filter } = recordsQuery.message.descriptor;
344
- // include records where author is the same as the query author
345
- return {
346
- ...Records.convertFilter(filter, dateSort),
347
- author: recordsQuery.author,
348
- interface: DwnInterfaceName.Records,
349
- method: DwnMethodName.Write,
350
- isLatestBaseState: true,
351
- published: false
352
- };
353
- }
354
- /**
355
- * @param messageStore Used to check if the grant has been revoked.
356
- */
357
- static async authorizeRecordsQuery(tenant, recordsQuery, deps) {
358
- if (Message.isSignedByAuthorDelegate(recordsQuery.message) &&
359
- !EncryptionControl.filterTargetsOnlyControlRecords(recordsQuery.message.descriptor.filter)) {
360
- await recordsQuery.authorizeDelegate(deps.validationStateReader);
361
- }
362
- else if (EncryptionControl.filterTargetsOnlyControlRecords(recordsQuery.message.descriptor.filter)) {
363
- await EncryptionControl.authorizeControlReadRequest({
364
- tenant,
365
- incomingMessage: recordsQuery.message,
366
- requester: Message.getRequester(recordsQuery.message),
367
- validationStateReader: deps.validationStateReader,
368
- });
369
- }
370
- const permissionGrantId = Message.getPermissionGrantId(recordsQuery.signaturePayload);
371
- if (permissionGrantId !== undefined) {
372
- const permissionGrant = await deps.validationStateReader.fetchGrant(tenant, permissionGrantId);
373
- await RecordsGrantAuthorization.authorizeQueryOrSubscribe({
374
- incomingMessage: recordsQuery.message,
375
- expectedGrantor: tenant,
376
- expectedGrantee: recordsQuery.author,
377
- permissionGrant,
378
- validationStateReader: deps.validationStateReader,
379
- });
380
- return;
381
- }
382
- // NOTE: not all RecordsQuery messages require protocol authorization even if the filter includes protocol-related fields,
383
- // this is because we dynamically filter out records that the caller is not authorized to see.
384
- // Currently only run protocol authorization if message deliberately invokes a protocol role.
385
- if (Records.shouldProtocolAuthorize(recordsQuery.signaturePayload)) {
386
- await ProtocolAuthorization.authorizeQueryOrSubscribe(tenant, recordsQuery, deps.validationStateReader);
387
- }
388
- }
389
- async filterControlRecordsForRequester(tenant, recordsQuery, requester, recordsWrites) {
390
- return EncryptionControl.filterVisibleControlRecords({
391
- tenant,
392
- incomingMessage: recordsQuery.message,
393
- requester,
394
- recordsWriteMessages: recordsWrites,
395
- validationStateReader: this.deps.validationStateReader,
396
- });
397
43
  }
398
44
  }
399
45
  //# sourceMappingURL=records-query.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"records-query.js","sourceRoot":"","sources":["../../../../src/handlers/records-query.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"records-query.js","sourceRoot":"","sources":["../../../../src/handlers/records-query.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,kCAAkC,EAAE,MAAM,yBAAyB,CAAC;AAEtG,MAAM,OAAO,mBAAmB;IAED;IAA7B,YAA6B,IAAyB;QAAzB,SAAI,GAAJ,IAAI,CAAqB;IAAI,CAAC;IAEpD,KAAK,CAAC,MAAM,CAAC,EAClB,MAAM,EACN,OAAO,GACwC;QAC/C,IAAI,YAA0B,CAAC;QAC/B,IAAI,CAAC;YACH,YAAY,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,qBAAqB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC3C,CAAC;QAED,IAAI,UAAuC,CAAC;QAC5C,IAAI,CAAC;YACH,UAAU,GAAG,MAAM,kCAAkC,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACzF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,qBAAqB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC3C,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC;YAC3C,IAAI,EAAM,IAAI,CAAC,IAAI;YACnB,MAAM;YACN,OAAO,EAAG,YAAY;YACtB,UAAU;SACX,CAAC,CAAC;QAEH,wFAAwF;QACxF,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC;YACxC,YAAY,EAAI,IAAI,CAAC,IAAI,CAAC,YAAY;YACtC,MAAM;YACN,aAAa,EAAG,MAAM,CAAC,QAAQ;YAC/B,aAAa,EAAG,cAAc;SAC/B,CAAC,CAAC;QAEH,OAAO;YACL,MAAM,EAAG,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE;YACpC,OAAO;YACP,MAAM,EAAG,MAAM,CAAC,MAAM;SACvB,CAAC;IACJ,CAAC;CACF"}