@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,13 +1,10 @@
1
- import { authenticate } from '../core/auth.js';
2
1
  import { EncryptionControl } from '../core/encryption-control.js';
3
2
  import { Message } from '../core/message.js';
4
3
  import { messageReplyFromError } from '../core/message-reply.js';
5
- import { ProtocolAuthorization } from '../core/protocol-authorization.js';
6
4
  import { Records } from '../utils/records.js';
7
5
  import { RecordsCount } from '../interfaces/records-count.js';
8
- import { RecordsGrantAuthorization } from '../core/records-grant-authorization.js';
9
- import { countRecordsWithRecordLimitOccupancy, queryRecordsWithRecordLimitOccupancy } from '../utils/record-limit-occupancy.js';
10
- import { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';
6
+ import { buildRecordsSnapshotFilters, resolveRecordsCollectionVisibility } from './records-collection.js';
7
+ import { countRecordsWithRecordLimitOccupancy, queryRecordsWithRecordLimitOccupancy, resolveRecordLimitOccupancy, } from '../utils/record-limit-occupancy.js';
11
8
  export class RecordsCountHandler {
12
9
  deps;
13
10
  constructor(deps) {
@@ -18,104 +15,38 @@ export class RecordsCountHandler {
18
15
  try {
19
16
  recordsCount = await RecordsCount.parse(message);
20
17
  }
21
- catch (e) {
22
- return messageReplyFromError(e, 400);
18
+ catch (error) {
19
+ return messageReplyFromError(error, 400);
23
20
  }
24
- let count;
25
21
  const requester = Message.getRequester(recordsCount.message);
26
- // if this is an anonymous count and the filter supports published records, count only published records
27
- if (Records.filterIncludesPublishedRecords(recordsCount.message.descriptor.filter) && recordsCount.author === undefined) {
28
- count = await this.countPublishedRecords(tenant, recordsCount, requester);
22
+ let visibility;
23
+ try {
24
+ visibility = await resolveRecordsCollectionVisibility(tenant, recordsCount, this.deps);
29
25
  }
30
- else {
31
- // authentication and authorization
32
- try {
33
- await authenticate(message.authorization, this.deps.didResolver);
34
- await RecordsCountHandler.authorizeRecordsCount(tenant, recordsCount, this.deps);
35
- }
36
- catch (e) {
37
- return messageReplyFromError(e, 401);
38
- }
39
- if (recordsCount.author === tenant && requester === tenant) {
40
- count = await this.countRecordsAsOwner(tenant, recordsCount);
41
- }
42
- else if (recordsCount.author === tenant) {
43
- count = await this.countRecordsAsOwnerDelegate(tenant, recordsCount, requester);
44
- }
45
- else {
46
- count = await this.countRecordsAsNonOwner(tenant, recordsCount, requester);
47
- }
26
+ catch (error) {
27
+ return messageReplyFromError(error, 401);
48
28
  }
29
+ const filters = buildRecordsSnapshotFilters(recordsCount, visibility);
30
+ const recordLimit = await resolveRecordLimitOccupancy({
31
+ validationStateReader: this.deps.validationStateReader,
32
+ tenant,
33
+ recordsFilter: recordsCount.message.descriptor.filter,
34
+ messageTimestamp: recordsCount.message.descriptor.messageTimestamp,
35
+ });
36
+ const count = recordsCount.author === tenant && requester === tenant
37
+ ? await this.countProjectedRecords(tenant, filters, recordLimit)
38
+ : await this.countProjectedRecordsForRequester(tenant, recordsCount, requester, filters, recordLimit);
49
39
  return {
50
40
  status: { code: 200, detail: 'OK' },
51
41
  count,
52
42
  };
53
43
  }
54
- /**
55
- * Counts records as the owner of the DWN with no additional filtering.
56
- */
57
- async countRecordsAsOwner(tenant, recordsCount) {
58
- const { filter } = recordsCount.message.descriptor;
59
- const countFilter = {
60
- ...Records.convertFilter(filter),
61
- interface: DwnInterfaceName.Records,
62
- method: DwnMethodName.Write,
63
- isLatestBaseState: true
64
- };
65
- return this.countProjectedRecords(tenant, recordsCount, [countFilter]);
66
- }
67
- async countRecordsAsOwnerDelegate(tenant, recordsCount, requester) {
68
- const { filter } = recordsCount.message.descriptor;
69
- const countFilter = {
70
- ...Records.convertFilter(filter),
71
- interface: DwnInterfaceName.Records,
72
- method: DwnMethodName.Write,
73
- isLatestBaseState: true
74
- };
75
- return this.countProjectedRecordsForRequester(tenant, recordsCount, requester, [countFilter]);
76
- }
77
- /**
78
- * Counts records as a non-owner, applying the same filter logic as RecordsQuery.
79
- */
80
- async countRecordsAsNonOwner(tenant, recordsCount, requester) {
81
- const { filter } = recordsCount.message.descriptor;
82
- const filters = [];
83
- if (Records.filterIncludesPublishedRecords(filter)) {
84
- filters.push(RecordsCountHandler.buildPublishedRecordsFilter(recordsCount));
85
- }
86
- if (Records.filterIncludesUnpublishedRecords(filter)) {
87
- if (EncryptionControl.isExactAudienceFilter(filter)) {
88
- filters.push(Records.buildUnpublishedControlRecordsFilter(filter));
89
- }
90
- if (Records.shouldBuildUnpublishedAuthorFilter(filter, recordsCount.author)) {
91
- filters.push(RecordsCountHandler.buildUnpublishedRecordsByCountAuthorFilter(recordsCount));
92
- }
93
- if (Records.shouldProtocolAuthorize(recordsCount.signaturePayload)) {
94
- filters.push(RecordsCountHandler.buildUnpublishedProtocolAuthorizedRecordsFilter(recordsCount));
95
- }
96
- if (Message.getPermissionGrantId(recordsCount.signaturePayload) !== undefined) {
97
- filters.push(RecordsCountHandler.buildUnpublishedPermissionGrantAuthorizedRecordsFilter(recordsCount));
98
- }
99
- if (Records.shouldBuildUnpublishedRecipientFilter(filter, recordsCount.author)) {
100
- filters.push(RecordsCountHandler.buildUnpublishedRecordsForCountAuthorFilter(recordsCount));
101
- }
102
- }
103
- return this.countProjectedRecordsForRequester(tenant, recordsCount, requester, filters);
104
- }
105
- /**
106
- * Counts only published records.
107
- */
108
- async countPublishedRecords(tenant, recordsCount, requester) {
109
- const filter = RecordsCountHandler.buildPublishedRecordsFilter(recordsCount);
110
- return this.countProjectedRecordsForRequester(tenant, recordsCount, requester, [filter]);
111
- }
112
- async countProjectedRecords(tenant, recordsCount, filters) {
44
+ async countProjectedRecords(tenant, filters, recordLimit) {
113
45
  const totalCount = await countRecordsWithRecordLimitOccupancy({
114
46
  messageStore: this.deps.messageStore,
115
- validationStateReader: this.deps.validationStateReader,
116
47
  tenant,
117
48
  filters,
118
- messageTimestamp: recordsCount.message.descriptor.messageTimestamp,
49
+ recordLimit,
119
50
  });
120
51
  const audienceFilters = EncryptionControl.buildAudienceRecordFilters(filters);
121
52
  if (audienceFilters.length === 0) {
@@ -134,22 +65,21 @@ export class RecordsCountHandler {
134
65
  });
135
66
  return totalCount - storedAudienceCount + projectedAudienceMessages.length;
136
67
  }
137
- async countProjectedRecordsForRequester(tenant, recordsCount, requester, filters) {
68
+ async countProjectedRecordsForRequester(tenant, recordsCount, requester, filters, recordLimit) {
138
69
  const controlFilters = Records.buildControlRecordsFilters(filters);
139
70
  if (controlFilters.length === 0) {
140
- return this.countProjectedRecords(tenant, recordsCount, filters);
71
+ return this.countProjectedRecords(tenant, filters, recordLimit);
141
72
  }
142
- const totalCount = await this.countProjectedRecords(tenant, recordsCount, filters);
143
- const controlCount = await this.countProjectedRecords(tenant, recordsCount, controlFilters);
73
+ const totalCount = await this.countProjectedRecords(tenant, filters, recordLimit);
74
+ const controlCount = await this.countProjectedRecords(tenant, controlFilters, recordLimit);
144
75
  if (controlCount === 0) {
145
76
  return totalCount;
146
77
  }
147
78
  const { messages } = await queryRecordsWithRecordLimitOccupancy({
148
79
  messageStore: this.deps.messageStore,
149
- validationStateReader: this.deps.validationStateReader,
150
80
  tenant,
151
81
  filters: controlFilters,
152
- messageTimestamp: recordsCount.message.descriptor.messageTimestamp,
82
+ recordLimit,
153
83
  });
154
84
  const projectedMessages = await EncryptionControl.projectCurrentAudienceRecords({
155
85
  messageStore: this.deps.messageStore,
@@ -166,104 +96,5 @@ export class RecordsCountHandler {
166
96
  });
167
97
  return totalCount - controlCount + visibleMessages.length;
168
98
  }
169
- static buildPublishedRecordsFilter(recordsCount) {
170
- const { filter } = recordsCount.message.descriptor;
171
- return {
172
- ...Records.convertFilter(filter),
173
- interface: DwnInterfaceName.Records,
174
- method: DwnMethodName.Write,
175
- published: true,
176
- isLatestBaseState: true
177
- };
178
- }
179
- /**
180
- * Creates a filter for unpublished records that are intended for the count author (where `recipient` is the author).
181
- */
182
- static buildUnpublishedRecordsForCountAuthorFilter(recordsCount) {
183
- const { filter } = recordsCount.message.descriptor;
184
- return {
185
- ...Records.convertFilter(filter),
186
- interface: DwnInterfaceName.Records,
187
- method: DwnMethodName.Write,
188
- recipient: recordsCount.author,
189
- isLatestBaseState: true,
190
- published: false
191
- };
192
- }
193
- /**
194
- * Creates a filter for unpublished records that are within the specified protocol.
195
- */
196
- static buildUnpublishedProtocolAuthorizedRecordsFilter(recordsCount) {
197
- const { filter } = recordsCount.message.descriptor;
198
- return {
199
- ...Records.convertFilter(filter),
200
- interface: DwnInterfaceName.Records,
201
- method: DwnMethodName.Write,
202
- isLatestBaseState: true,
203
- published: false
204
- };
205
- }
206
- /**
207
- * Creates a filter for unpublished records authorized by a permission grant.
208
- */
209
- static buildUnpublishedPermissionGrantAuthorizedRecordsFilter(recordsCount) {
210
- const { filter } = recordsCount.message.descriptor;
211
- return {
212
- ...Records.convertFilter(filter),
213
- interface: DwnInterfaceName.Records,
214
- method: DwnMethodName.Write,
215
- isLatestBaseState: true,
216
- published: false
217
- };
218
- }
219
- /**
220
- * Creates a filter for only unpublished records where the author is the same as the count author.
221
- */
222
- static buildUnpublishedRecordsByCountAuthorFilter(recordsCount) {
223
- const { filter } = recordsCount.message.descriptor;
224
- return {
225
- ...Records.convertFilter(filter),
226
- author: recordsCount.author,
227
- interface: DwnInterfaceName.Records,
228
- method: DwnMethodName.Write,
229
- isLatestBaseState: true,
230
- published: false
231
- };
232
- }
233
- /**
234
- * @param messageStore Used to check if the grant has been revoked.
235
- */
236
- static async authorizeRecordsCount(tenant, recordsCount, deps) {
237
- if (Message.isSignedByAuthorDelegate(recordsCount.message) &&
238
- !EncryptionControl.filterTargetsOnlyControlRecords(recordsCount.message.descriptor.filter)) {
239
- await recordsCount.authorizeDelegate(deps.validationStateReader);
240
- }
241
- else if (EncryptionControl.filterTargetsOnlyControlRecords(recordsCount.message.descriptor.filter)) {
242
- await EncryptionControl.authorizeControlReadRequest({
243
- tenant,
244
- incomingMessage: recordsCount.message,
245
- requester: Message.getRequester(recordsCount.message),
246
- validationStateReader: deps.validationStateReader,
247
- });
248
- }
249
- const permissionGrantId = Message.getPermissionGrantId(recordsCount.signaturePayload);
250
- if (permissionGrantId !== undefined) {
251
- const permissionGrant = await deps.validationStateReader.fetchGrant(tenant, permissionGrantId);
252
- await RecordsGrantAuthorization.authorizeQueryOrSubscribe({
253
- incomingMessage: recordsCount.message,
254
- expectedGrantor: tenant,
255
- expectedGrantee: recordsCount.author,
256
- permissionGrant,
257
- validationStateReader: deps.validationStateReader,
258
- });
259
- return;
260
- }
261
- // NOTE: not all RecordsCount messages require protocol authorization even if the filter includes protocol-related fields,
262
- // this is because we dynamically filter out records that the caller is not authorized to see.
263
- // Currently only run protocol authorization if message deliberately invokes a protocol role.
264
- if (Records.shouldProtocolAuthorize(recordsCount.signaturePayload)) {
265
- await ProtocolAuthorization.authorizeQueryOrSubscribe(tenant, recordsCount, deps.validationStateReader);
266
- }
267
- }
268
99
  }
269
100
  //# sourceMappingURL=records-count.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"records-count.js","sourceRoot":"","sources":["../../../../src/handlers/records-count.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,wCAAwC,CAAC;AACnF,OAAO,EAAE,oCAAoC,EAAE,oCAAoC,EAAE,MAAM,oCAAoC,CAAC;AAChI,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAEnF,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,CAAC,EAAE,CAAC;YACX,OAAO,qBAAqB,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACvC,CAAC;QAED,IAAI,KAAa,CAAC;QAClB,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAE7D,wGAAwG;QACxG,IAAI,OAAO,CAAC,8BAA8B,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,YAAY,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACxH,KAAK,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;QAC5E,CAAC;aAAM,CAAC;YACN,mCAAmC;YACnC,IAAI,CAAC;gBACH,MAAM,YAAY,CAAC,OAAO,CAAC,aAAc,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAElE,MAAM,mBAAmB,CAAC,qBAAqB,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YACnF,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,qBAAqB,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YACvC,CAAC;YAED,IAAI,YAAY,CAAC,MAAM,KAAK,MAAM,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;gBAC3D,KAAK,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;YAC/D,CAAC;iBAAM,IAAI,YAAY,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC1C,KAAK,GAAG,MAAM,IAAI,CAAC,2BAA2B,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;YAClF,CAAC;iBAAM,CAAC;gBACN,KAAK,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;YAC7E,CAAC;QACH,CAAC;QAED,OAAO;YACL,MAAM,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE;YACnC,KAAK;SACN,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,mBAAmB,CAAC,MAAc,EAAE,YAA0B;QAC1E,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC;QACnD,MAAM,WAAW,GAAG;YAClB,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC;YAChC,SAAS,EAAW,gBAAgB,CAAC,OAAO;YAC5C,MAAM,EAAc,aAAa,CAAC,KAAK;YACvC,iBAAiB,EAAG,IAAI;SACzB,CAAC;QAEF,OAAO,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IACzE,CAAC;IAEO,KAAK,CAAC,2BAA2B,CACvC,MAAc,EACd,YAA0B,EAC1B,SAA6B;QAE7B,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC;QACnD,MAAM,WAAW,GAAG;YAClB,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC;YAChC,SAAS,EAAW,gBAAgB,CAAC,OAAO;YAC5C,MAAM,EAAc,aAAa,CAAC,KAAK;YACvC,iBAAiB,EAAG,IAAI;SACzB,CAAC;QAEF,OAAO,IAAI,CAAC,iCAAiC,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAChG,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,sBAAsB,CAClC,MAAc,EACd,YAA0B,EAC1B,SAA6B;QAE7B,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC;QACnD,MAAM,OAAO,GAAa,EAAE,CAAC;QAE7B,IAAI,OAAO,CAAC,8BAA8B,CAAC,MAAM,CAAC,EAAE,CAAC;YACnD,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,2BAA2B,CAAC,YAAY,CAAC,CAAC,CAAC;QAC9E,CAAC;QAED,IAAI,OAAO,CAAC,gCAAgC,CAAC,MAAM,CAAC,EAAE,CAAC;YACrD,IAAI,iBAAiB,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE,CAAC;gBACpD,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,oCAAoC,CAAC,MAAM,CAAC,CAAC,CAAC;YACrE,CAAC;YAED,IAAI,OAAO,CAAC,kCAAkC,CAAC,MAAM,EAAE,YAAY,CAAC,MAAO,CAAC,EAAE,CAAC;gBAC7E,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,0CAA0C,CAAC,YAAY,CAAC,CAAC,CAAC;YAC7F,CAAC;YAED,IAAI,OAAO,CAAC,uBAAuB,CAAC,YAAY,CAAC,gBAAiB,CAAC,EAAE,CAAC;gBACpE,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,+CAA+C,CAAC,YAAY,CAAC,CAAC,CAAC;YAClG,CAAC;YAED,IAAI,OAAO,CAAC,oBAAoB,CAAC,YAAY,CAAC,gBAAiB,CAAC,KAAK,SAAS,EAAE,CAAC;gBAC/E,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,sDAAsD,CAAC,YAAY,CAAC,CAAC,CAAC;YACzG,CAAC;YAED,IAAI,OAAO,CAAC,qCAAqC,CAAC,MAAM,EAAE,YAAY,CAAC,MAAO,CAAC,EAAE,CAAC;gBAChF,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,2CAA2C,CAAC,YAAY,CAAC,CAAC,CAAC;YAC9F,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC,iCAAiC,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAC1F,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,qBAAqB,CACjC,MAAc,EACd,YAA0B,EAC1B,SAA6B;QAE7B,MAAM,MAAM,GAAG,mBAAmB,CAAC,2BAA2B,CAAC,YAAY,CAAC,CAAC;QAC7E,OAAO,IAAI,CAAC,iCAAiC,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3F,CAAC;IAEO,KAAK,CAAC,qBAAqB,CAAC,MAAc,EAAE,YAA0B,EAAE,OAAiB;QAC/F,MAAM,UAAU,GAAG,MAAM,oCAAoC,CAAC;YAC5D,YAAY,EAAY,IAAI,CAAC,IAAI,CAAC,YAAY;YAC9C,qBAAqB,EAAG,IAAI,CAAC,IAAI,CAAC,qBAAqB;YACvD,MAAM;YACN,OAAO;YACP,gBAAgB,EAAQ,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,gBAAgB;SACzE,CAAC,CAAC;QAEH,MAAM,eAAe,GAAG,iBAAiB,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC;QAC9E,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,MAAM,mBAAmB,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QACxF,IAAI,mBAAmB,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QACjF,MAAM,yBAAyB,GAAG,MAAM,iBAAiB,CAAC,6BAA6B,CAAC;YACtF,YAAY,EAAW,IAAI,CAAC,IAAI,CAAC,YAAY;YAC7C,MAAM;YACN,oBAAoB,EAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC;YAC9D,aAAa,EAAU,eAAe;SACvC,CAAC,CAAC;QAEH,OAAO,UAAU,GAAG,mBAAmB,GAAG,yBAAyB,CAAC,MAAM,CAAC;IAC7E,CAAC;IAEO,KAAK,CAAC,iCAAiC,CAC7C,MAAc,EACd,YAA0B,EAC1B,SAA6B,EAC7B,OAAiB;QAEjB,MAAM,cAAc,GAAG,OAAO,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC;QACnE,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;QACnE,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;QACnF,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC;QAC5F,IAAI,YAAY,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,oCAAoC,CAAC;YAC9D,YAAY,EAAY,IAAI,CAAC,IAAI,CAAC,YAAY;YAC9C,qBAAqB,EAAG,IAAI,CAAC,IAAI,CAAC,qBAAqB;YACvD,MAAM;YACN,OAAO,EAAiB,cAAc;YACtC,gBAAgB,EAAQ,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,gBAAgB;SACzE,CAAC,CAAC;QACH,MAAM,iBAAiB,GAAG,MAAM,iBAAiB,CAAC,6BAA6B,CAAC;YAC9E,YAAY,EAAW,IAAI,CAAC,IAAI,CAAC,YAAY;YAC7C,MAAM;YACN,oBAAoB,EAAG,QAAQ;YAC/B,aAAa,EAAU,cAAc;SACtC,CAAC,CAAC;QACH,MAAM,eAAe,GAAG,MAAM,iBAAiB,CAAC,2BAA2B,CAAC;YAC1E,MAAM;YACN,eAAe,EAAS,YAAY,CAAC,OAAO;YAC5C,SAAS;YACT,oBAAoB,EAAI,iBAAiB;YACzC,qBAAqB,EAAG,IAAI,CAAC,IAAI,CAAC,qBAAqB;SACxD,CAAC,CAAC;QACH,OAAO,UAAU,GAAG,YAAY,GAAG,eAAe,CAAC,MAAM,CAAC;IAC5D,CAAC;IAEO,MAAM,CAAC,2BAA2B,CAAC,YAA0B;QACnE,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC;QACnD,OAAO;YACL,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC;YAChC,SAAS,EAAW,gBAAgB,CAAC,OAAO;YAC5C,MAAM,EAAc,aAAa,CAAC,KAAK;YACvC,SAAS,EAAW,IAAI;YACxB,iBAAiB,EAAG,IAAI;SACzB,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,2CAA2C,CAAC,YAA0B;QACnF,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC;QACnD,OAAO;YACL,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC;YAChC,SAAS,EAAW,gBAAgB,CAAC,OAAO;YAC5C,MAAM,EAAc,aAAa,CAAC,KAAK;YACvC,SAAS,EAAW,YAAY,CAAC,MAAO;YACxC,iBAAiB,EAAG,IAAI;YACxB,SAAS,EAAW,KAAK;SAC1B,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,+CAA+C,CAAC,YAA0B;QACvF,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC;QACnD,OAAO;YACL,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC;YAChC,SAAS,EAAW,gBAAgB,CAAC,OAAO;YAC5C,MAAM,EAAc,aAAa,CAAC,KAAK;YACvC,iBAAiB,EAAG,IAAI;YACxB,SAAS,EAAW,KAAK;SAC1B,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,sDAAsD,CAAC,YAA0B;QAC9F,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC;QACnD,OAAO;YACL,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC;YAChC,SAAS,EAAW,gBAAgB,CAAC,OAAO;YAC5C,MAAM,EAAc,aAAa,CAAC,KAAK;YACvC,iBAAiB,EAAG,IAAI;YACxB,SAAS,EAAW,KAAK;SAC1B,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,0CAA0C,CAAC,YAA0B;QAClF,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC;QACnD,OAAO;YACL,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC;YAChC,MAAM,EAAc,YAAY,CAAC,MAAO;YACxC,SAAS,EAAW,gBAAgB,CAAC,OAAO;YAC5C,MAAM,EAAc,aAAa,CAAC,KAAK;YACvC,iBAAiB,EAAG,IAAI;YACxB,SAAS,EAAW,KAAK;SAC1B,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,KAAK,CAAC,qBAAqB,CACxC,MAAc,EACd,YAA0B,EAC1B,IAAyB;QAGzB,IAAI,OAAO,CAAC,wBAAwB,CAAC,YAAY,CAAC,OAAO,CAAC;YACtD,CAAC,iBAAiB,CAAC,+BAA+B,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/F,MAAM,YAAY,CAAC,iBAAiB,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACnE,CAAC;aAAM,IAAI,iBAAiB,CAAC,+BAA+B,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACrG,MAAM,iBAAiB,CAAC,2BAA2B,CAAC;gBAClD,MAAM;gBACN,eAAe,EAAS,YAAY,CAAC,OAAO;gBAC5C,SAAS,EAAe,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC;gBAClE,qBAAqB,EAAG,IAAI,CAAC,qBAAqB;aACnD,CAAC,CAAC;QACL,CAAC;QAED,MAAM,iBAAiB,GAAG,OAAO,CAAC,oBAAoB,CAAC,YAAY,CAAC,gBAAiB,CAAC,CAAC;QACvF,IAAI,iBAAiB,KAAK,SAAS,EAAE,CAAC;YACpC,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;YAC/F,MAAM,yBAAyB,CAAC,yBAAyB,CAAC;gBACxD,eAAe,EAAS,YAAY,CAAC,OAAO;gBAC5C,eAAe,EAAS,MAAM;gBAC9B,eAAe,EAAS,YAAY,CAAC,MAAO;gBAC5C,eAAe;gBACf,qBAAqB,EAAG,IAAI,CAAC,qBAAqB;aACnD,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,0HAA0H;QAC1H,8FAA8F;QAC9F,6FAA6F;QAC7F,IAAI,OAAO,CAAC,uBAAuB,CAAC,YAAY,CAAC,gBAAiB,CAAC,EAAE,CAAC;YACpE,MAAM,qBAAqB,CAAC,yBAAyB,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAC1G,CAAC;IACH,CAAC;CAEF"}
1
+ {"version":3,"file":"records-count.js","sourceRoot":"","sources":["../../../../src/handlers/records-count.ts"],"names":[],"mappings":"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"}