@casual-simulation/aux-records 3.0.0 → 3.0.5

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.
@@ -25,7 +25,14 @@ export declare class DataRecordsController {
25
25
  recordData(recordKey: string, address: string, data: string, subjectId: string): Promise<RecordDataResult>;
26
26
  getData(recordName: string, address: string): Promise<GetDataResult>;
27
27
  listData(recordName: string, address: string | null): Promise<ListDataResult>;
28
- eraseData(recordKey: string, address: string): Promise<EraseDataResult>;
28
+ /**
29
+ * Erases the data in the given record and address.
30
+ * Uses the given record key to access the record and the given subject ID to determine if the user is allowed to access the record.
31
+ * @param recordKey The key that should be used to access the record.
32
+ * @param address The address that the record should be deleted from.
33
+ * @param subjectId THe ID of the user that this request came from.
34
+ */
35
+ eraseData(recordKey: string, address: string, subjectId: string): Promise<EraseDataResult>;
29
36
  }
30
37
  export declare type RecordDataResult = RecordDataSuccess | RecordDataFailure;
31
38
  export interface RecordDataSuccess {
@@ -74,7 +81,7 @@ export interface EraseDataSuccess {
74
81
  }
75
82
  export interface EraseDataFailure {
76
83
  success: false;
77
- errorCode: ServerError | EraseDataStoreResult['errorCode'] | ValidatePublicRecordKeyFailure['errorCode'];
84
+ errorCode: ServerError | NotLoggedInError | EraseDataStoreResult['errorCode'] | ValidatePublicRecordKeyFailure['errorCode'];
78
85
  errorMessage: string;
79
86
  }
80
87
  export declare type ListDataResult = ListDataSuccess | ListDataFailure;
@@ -40,6 +40,16 @@ export class DataRecordsController {
40
40
  errorMessage: result.errorMessage,
41
41
  };
42
42
  }
43
+ if (!subjectId && result.policy !== 'subjectless') {
44
+ return {
45
+ success: false,
46
+ errorCode: 'not_logged_in',
47
+ errorMessage: 'The user must be logged in in order to record data.',
48
+ };
49
+ }
50
+ if (result.policy === 'subjectless') {
51
+ subjectId = null;
52
+ }
43
53
  const recordName = result.recordName;
44
54
  const result2 = yield this._store.setData(recordName, address, data, result.ownerId, subjectId);
45
55
  if (result2.success === false) {
@@ -109,7 +119,14 @@ export class DataRecordsController {
109
119
  }
110
120
  });
111
121
  }
112
- eraseData(recordKey, address) {
122
+ /**
123
+ * Erases the data in the given record and address.
124
+ * Uses the given record key to access the record and the given subject ID to determine if the user is allowed to access the record.
125
+ * @param recordKey The key that should be used to access the record.
126
+ * @param address The address that the record should be deleted from.
127
+ * @param subjectId THe ID of the user that this request came from.
128
+ */
129
+ eraseData(recordKey, address, subjectId) {
113
130
  return __awaiter(this, void 0, void 0, function* () {
114
131
  try {
115
132
  const result = yield this._manager.validatePublicRecordKey(recordKey);
@@ -120,6 +137,13 @@ export class DataRecordsController {
120
137
  errorMessage: result.errorMessage,
121
138
  };
122
139
  }
140
+ if (!subjectId && result.policy !== 'subjectless') {
141
+ return {
142
+ success: false,
143
+ errorCode: 'not_logged_in',
144
+ errorMessage: 'The user must be logged in in order to record data.',
145
+ };
146
+ }
123
147
  const recordName = result.recordName;
124
148
  const result2 = yield this._store.eraseData(recordName, address);
125
149
  if (result2.success === false) {
@@ -1 +1 @@
1
- {"version":3,"file":"DataRecordsController.js","sourceRoot":"","sources":["DataRecordsController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DataRecordsController.js","sourceRoot":"","sources":["DataRecordsController.ts"],"names":[],"mappings":"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"}
@@ -18,8 +18,9 @@ export declare class EventRecordsController {
18
18
  * @param recordKey The record key that should be used to add the events.
19
19
  * @param eventName The name of the events to record.
20
20
  * @param count The number of events to add/subtract.
21
+ * @param subjectId The ID of the user that is adding the count.
21
22
  */
22
- addCount(recordKey: string, eventName: string, count: number): Promise<AddCountResult>;
23
+ addCount(recordKey: string, eventName: string, count: number, subjectId: string): Promise<AddCountResult>;
23
24
  /**
24
25
  * Gets the current count of events with the given name from the given record.
25
26
  * @param recordName The name of the record.
@@ -25,8 +25,9 @@ export class EventRecordsController {
25
25
  * @param recordKey The record key that should be used to add the events.
26
26
  * @param eventName The name of the events to record.
27
27
  * @param count The number of events to add/subtract.
28
+ * @param subjectId The ID of the user that is adding the count.
28
29
  */
29
- addCount(recordKey, eventName, count) {
30
+ addCount(recordKey, eventName, count, subjectId) {
30
31
  return __awaiter(this, void 0, void 0, function* () {
31
32
  try {
32
33
  const result = yield this._manager.validatePublicRecordKey(recordKey);
@@ -37,6 +38,13 @@ export class EventRecordsController {
37
38
  errorMessage: result.errorMessage,
38
39
  };
39
40
  }
41
+ if (!subjectId && result.policy !== 'subjectless') {
42
+ return {
43
+ success: false,
44
+ errorCode: 'not_logged_in',
45
+ errorMessage: 'The user must be logged in in order to record events.',
46
+ };
47
+ }
40
48
  const recordName = result.recordName;
41
49
  const result2 = yield this._store.addEventCount(recordName, eventName, count);
42
50
  if (result2.success === true) {
@@ -1 +1 @@
1
- {"version":3,"file":"EventRecordsController.js","sourceRoot":"","sources":["EventRecordsController.ts"],"names":[],"mappings":";;;;;;;;;AAWA;;GAEG;AACH,MAAM,OAAO,sBAAsB;IAI/B;;;;OAIG;IACH,YAAY,OAA0B,EAAE,KAAwB;QAC5D,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACxB,CAAC;IAED;;;;;OAKG;IACG,QAAQ,CACV,SAAiB,EACjB,SAAiB,EACjB,KAAa;;YAEb,IAAI;gBACA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CACtD,SAAS,CACZ,CAAC;gBACF,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,EAAE;oBAC1B,OAAO;wBACH,OAAO,EAAE,KAAK;wBACd,SAAS,EAAE,MAAM,CAAC,SAAS;wBAC3B,YAAY,EAAE,MAAM,CAAC,YAAY;qBACpC,CAAC;iBACL;gBAED,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;gBACrC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAC3C,UAAU,EACV,SAAS,EACT,KAAK,CACR,CAAC;gBAEF,IAAI,OAAO,CAAC,OAAO,KAAK,IAAI,EAAE;oBAC1B,OAAO;wBACH,OAAO,EAAE,IAAI;wBACb,UAAU,EAAE,KAAK;wBACjB,SAAS,EAAE,SAAS;wBACpB,UAAU,EAAE,UAAU;qBACzB,CAAC;iBACL;qBAAM;oBACH,OAAO;wBACH,OAAO,EAAE,KAAK;wBACd,SAAS,EAAE,OAAO,CAAC,SAAS;wBAC5B,YAAY,EAAE,OAAO,CAAC,YAAY;qBACrC,CAAC;iBACL;aACJ;YAAC,OAAO,GAAG,EAAE;gBACV,OAAO;oBACH,OAAO,EAAE,KAAK;oBACd,SAAS,EAAE,cAAc;oBACzB,YAAY,EAAE,GAAG,CAAC,QAAQ,EAAE;iBAC/B,CAAC;aACL;QACL,CAAC;KAAA;IAED;;;;OAIG;IACG,QAAQ,CACV,UAAkB,EAClB,SAAiB;;YAEjB,IAAI;gBACA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAC1C,UAAU,EACV,SAAS,CACZ,CAAC;gBAEF,IAAI,MAAM,CAAC,OAAO,EAAE;oBAChB,OAAO;wBACH,OAAO,EAAE,IAAI;wBACb,KAAK,EAAE,MAAM,CAAC,KAAK;wBACnB,SAAS,EAAE,SAAS;wBACpB,UAAU,EAAE,UAAU;qBACzB,CAAC;iBACL;qBAAM;oBACH,OAAO;wBACH,OAAO,EAAE,KAAK;wBACd,SAAS,EAAE,MAAM,CAAC,SAAS;wBAC3B,YAAY,EAAE,MAAM,CAAC,YAAY;qBACpC,CAAC;iBACL;aACJ;YAAC,OAAO,GAAG,EAAE;gBACV,OAAO;oBACH,OAAO,EAAE,KAAK;oBACd,SAAS,EAAE,cAAc;oBACzB,YAAY,EAAE,GAAG,CAAC,QAAQ,EAAE;iBAC/B,CAAC;aACL;QACL,CAAC;KAAA;CACJ"}
1
+ {"version":3,"file":"EventRecordsController.js","sourceRoot":"","sources":["EventRecordsController.ts"],"names":[],"mappings":";;;;;;;;;AAWA;;GAEG;AACH,MAAM,OAAO,sBAAsB;IAI/B;;;;OAIG;IACH,YAAY,OAA0B,EAAE,KAAwB;QAC5D,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACxB,CAAC;IAED;;;;;;OAMG;IACG,QAAQ,CACV,SAAiB,EACjB,SAAiB,EACjB,KAAa,EACb,SAAiB;;YAEjB,IAAI;gBACA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CACtD,SAAS,CACZ,CAAC;gBACF,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,EAAE;oBAC1B,OAAO;wBACH,OAAO,EAAE,KAAK;wBACd,SAAS,EAAE,MAAM,CAAC,SAAS;wBAC3B,YAAY,EAAE,MAAM,CAAC,YAAY;qBACpC,CAAC;iBACL;gBAED,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,aAAa,EAAE;oBAC/C,OAAO;wBACH,OAAO,EAAE,KAAK;wBACd,SAAS,EAAE,eAAe;wBAC1B,YAAY,EAAE,uDAAuD;qBACxE,CAAC;iBACL;gBAED,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;gBACrC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAC3C,UAAU,EACV,SAAS,EACT,KAAK,CACR,CAAC;gBAEF,IAAI,OAAO,CAAC,OAAO,KAAK,IAAI,EAAE;oBAC1B,OAAO;wBACH,OAAO,EAAE,IAAI;wBACb,UAAU,EAAE,KAAK;wBACjB,SAAS,EAAE,SAAS;wBACpB,UAAU,EAAE,UAAU;qBACzB,CAAC;iBACL;qBAAM;oBACH,OAAO;wBACH,OAAO,EAAE,KAAK;wBACd,SAAS,EAAE,OAAO,CAAC,SAAS;wBAC5B,YAAY,EAAE,OAAO,CAAC,YAAY;qBACrC,CAAC;iBACL;aACJ;YAAC,OAAO,GAAG,EAAE;gBACV,OAAO;oBACH,OAAO,EAAE,KAAK;oBACd,SAAS,EAAE,cAAc;oBACzB,YAAY,EAAE,GAAG,CAAC,QAAQ,EAAE;iBAC/B,CAAC;aACL;QACL,CAAC;KAAA;IAED;;;;OAIG;IACG,QAAQ,CACV,UAAkB,EAClB,SAAiB;;YAEjB,IAAI;gBACA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAC1C,UAAU,EACV,SAAS,CACZ,CAAC;gBAEF,IAAI,MAAM,CAAC,OAAO,EAAE;oBAChB,OAAO;wBACH,OAAO,EAAE,IAAI;wBACb,KAAK,EAAE,MAAM,CAAC,KAAK;wBACnB,SAAS,EAAE,SAAS;wBACpB,UAAU,EAAE,UAAU;qBACzB,CAAC;iBACL;qBAAM;oBACH,OAAO;wBACH,OAAO,EAAE,KAAK;wBACd,SAAS,EAAE,MAAM,CAAC,SAAS;wBAC3B,YAAY,EAAE,MAAM,CAAC,YAAY;qBACpC,CAAC;iBACL;aACJ;YAAC,OAAO,GAAG,EAAE;gBACV,OAAO;oBACH,OAAO,EAAE,KAAK;oBACd,SAAS,EAAE,cAAc;oBACzB,YAAY,EAAE,GAAG,CAAC,QAAQ,EAAE;iBAC/B,CAAC;aACL;QACL,CAAC;KAAA;CACJ"}
@@ -9,7 +9,13 @@ export declare class FileRecordsController {
9
9
  private _store;
10
10
  constructor(controller: RecordsController, store: FileRecordsStore);
11
11
  recordFile(recordKey: string, userId: string, request: RecordFileRequest): Promise<RecordFileResult>;
12
- eraseFile(recordKey: string, fileName: string): Promise<EraseFileResult>;
12
+ /**
13
+ * Attempts to erase the given file using the given record key and subject.
14
+ * @param recordKey The key that should be used to erase the file.
15
+ * @param fileName The name of the file.
16
+ * @param subjectId The ID of the user that is making this request.
17
+ */
18
+ eraseFile(recordKey: string, fileName: string, subjectId: string): Promise<EraseFileResult>;
13
19
  markFileAsUploaded(recordName: string, fileName: string): Promise<FileUploadedResult>;
14
20
  }
15
21
  /**
@@ -23,6 +23,16 @@ export class FileRecordsController {
23
23
  if (keyResult.success === false) {
24
24
  return keyResult;
25
25
  }
26
+ if (!userId && keyResult.policy !== 'subjectless') {
27
+ return {
28
+ success: false,
29
+ errorCode: 'not_logged_in',
30
+ errorMessage: 'The user must be logged in in order to record files.',
31
+ };
32
+ }
33
+ if (keyResult.policy === 'subjectless') {
34
+ userId = null;
35
+ }
26
36
  const publisherId = keyResult.ownerId;
27
37
  const recordName = keyResult.recordName;
28
38
  const subjectId = userId;
@@ -91,13 +101,26 @@ export class FileRecordsController {
91
101
  }
92
102
  });
93
103
  }
94
- eraseFile(recordKey, fileName) {
104
+ /**
105
+ * Attempts to erase the given file using the given record key and subject.
106
+ * @param recordKey The key that should be used to erase the file.
107
+ * @param fileName The name of the file.
108
+ * @param subjectId The ID of the user that is making this request.
109
+ */
110
+ eraseFile(recordKey, fileName, subjectId) {
95
111
  return __awaiter(this, void 0, void 0, function* () {
96
112
  try {
97
113
  const keyResult = yield this._controller.validatePublicRecordKey(recordKey);
98
114
  if (keyResult.success === false) {
99
115
  return keyResult;
100
116
  }
117
+ if (!subjectId && keyResult.policy !== 'subjectless') {
118
+ return {
119
+ success: false,
120
+ errorCode: 'not_logged_in',
121
+ errorMessage: 'The user must be logged in in order to erase files.',
122
+ };
123
+ }
101
124
  const publisherId = keyResult.ownerId;
102
125
  const recordName = keyResult.recordName;
103
126
  const eraseResult = yield this._store.eraseFileRecord(recordName, fileName);
@@ -1 +1 @@
1
- {"version":3,"file":"FileRecordsController.js","sourceRoot":"","sources":["FileRecordsController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FileRecordsController.js","sourceRoot":"","sources":["FileRecordsController.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,12 @@
1
- import { Record, RecordsStore } from './RecordsStore';
1
+ import { Record, RecordKey, RecordsStore } from './RecordsStore';
2
2
  export declare class MemoryRecordsStore implements RecordsStore {
3
3
  private _records;
4
+ private _recordKeys;
5
+ get recordKeys(): RecordKey[];
4
6
  getRecordByName(name: string): Promise<Record>;
5
7
  updateRecord(record: Record): Promise<void>;
6
8
  addRecord(record: Record): Promise<void>;
9
+ addRecordKey(key: RecordKey): Promise<void>;
10
+ getRecordKeyByRecordAndHash(recordName: string, hash: string): Promise<RecordKey>;
7
11
  }
8
12
  //# sourceMappingURL=MemoryRecordsStore.d.ts.map
@@ -10,6 +10,10 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
10
10
  export class MemoryRecordsStore {
11
11
  constructor() {
12
12
  this._records = [];
13
+ this._recordKeys = [];
14
+ }
15
+ get recordKeys() {
16
+ return this._recordKeys;
13
17
  }
14
18
  getRecordByName(name) {
15
19
  return __awaiter(this, void 0, void 0, function* () {
@@ -33,5 +37,19 @@ export class MemoryRecordsStore {
33
37
  }
34
38
  });
35
39
  }
40
+ addRecordKey(key) {
41
+ return __awaiter(this, void 0, void 0, function* () {
42
+ const existingKeyIndex = this._recordKeys.findIndex((k) => k.recordName === key.recordName && k.secretHash === key.secretHash);
43
+ if (existingKeyIndex < 0) {
44
+ this._recordKeys.push(key);
45
+ }
46
+ });
47
+ }
48
+ getRecordKeyByRecordAndHash(recordName, hash) {
49
+ return __awaiter(this, void 0, void 0, function* () {
50
+ const key = this._recordKeys.find(k => k.recordName === recordName && k.secretHash == hash);
51
+ return key;
52
+ });
53
+ }
36
54
  }
37
55
  //# sourceMappingURL=MemoryRecordsStore.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MemoryRecordsStore.js","sourceRoot":"","sources":["MemoryRecordsStore.ts"],"names":[],"mappings":";;;;;;;;;AAEA,MAAM,OAAO,kBAAkB;IAA/B;QACY,aAAQ,GAAa,EAAE,CAAC;IAwBpC,CAAC;IAtBS,eAAe,CAAC,IAAY;;YAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;YAC1D,OAAO,MAAM,CAAC;QAClB,CAAC;KAAA;IAEK,YAAY,CAAC,MAAc;;YAC7B,MAAM,mBAAmB,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAC/C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAChC,CAAC;YACF,IAAI,mBAAmB,IAAI,CAAC,EAAE;gBAC1B,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,GAAG,MAAM,CAAC;aAC/C;QACL,CAAC;KAAA;IAEK,SAAS,CAAC,MAAc;;YAC1B,MAAM,mBAAmB,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAC/C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAChC,CAAC;YACF,IAAI,mBAAmB,GAAG,CAAC,EAAE;gBACzB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aAC9B;QACL,CAAC;KAAA;CACJ"}
1
+ {"version":3,"file":"MemoryRecordsStore.js","sourceRoot":"","sources":["MemoryRecordsStore.ts"],"names":[],"mappings":";;;;;;;;;AAEA,MAAM,OAAO,kBAAkB;IAA/B;QACY,aAAQ,GAAa,EAAE,CAAC;QACxB,gBAAW,GAAgB,EAAE,CAAC;IA0C1C,CAAC;IAxCG,IAAI,UAAU;QACV,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;IAEK,eAAe,CAAC,IAAY;;YAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;YAC1D,OAAO,MAAM,CAAC;QAClB,CAAC;KAAA;IAEK,YAAY,CAAC,MAAc;;YAC7B,MAAM,mBAAmB,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAC/C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAChC,CAAC;YACF,IAAI,mBAAmB,IAAI,CAAC,EAAE;gBAC1B,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,GAAG,MAAM,CAAC;aAC/C;QACL,CAAC;KAAA;IAEK,SAAS,CAAC,MAAc;;YAC1B,MAAM,mBAAmB,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAC/C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAChC,CAAC;YACF,IAAI,mBAAmB,GAAG,CAAC,EAAE;gBACzB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aAC9B;QACL,CAAC;KAAA;IAEK,YAAY,CAAC,GAAc;;YAC7B,MAAM,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAC/C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,GAAG,CAAC,UAAU,IAAI,CAAC,CAAC,UAAU,KAAK,GAAG,CAAC,UAAU,CAC5E,CAAC;YACF,IAAI,gBAAgB,GAAG,CAAC,EAAE;gBACtB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aAC9B;QACL,CAAC;KAAA;IAEK,2BAA2B,CAAC,UAAkB,EAAE,IAAY;;YAC9D,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,UAAU,IAAI,CAAC,CAAC,UAAU,IAAI,IAAI,CAAC,CAAC;YAC5F,OAAO,GAAG,CAAC;QACf,CAAC;KAAA;CACJ"}
@@ -1,5 +1,5 @@
1
- import { RecordsStore } from './RecordsStore';
2
- import { ServerError } from './Errors';
1
+ import { PublicRecordKeyPolicy, RecordsStore } from './RecordsStore';
2
+ import { NotLoggedInError, ServerError } from './Errors';
3
3
  /**
4
4
  * Defines a class that manages records and their keys.
5
5
  */
@@ -9,10 +9,11 @@ export declare class RecordsController {
9
9
  /**
10
10
  * Creates a new public record key for the given bucket name.
11
11
  * @param name The name of the record.
12
+ * @param policy The policy that should be used for the public record key.
12
13
  * @param userId The ID of the user that is creating the public record.
13
14
  * @returns
14
15
  */
15
- createPublicRecordKey(name: string, userId: string): Promise<CreatePublicRecordKeyResult>;
16
+ createPublicRecordKey(name: string, policy: PublicRecordKeyPolicy, userId: string): Promise<CreatePublicRecordKeyResult>;
16
17
  /**
17
18
  * Validates the given record key. Returns success if the key is valid and can be used to publish things to its bucket.
18
19
  * @param key The key that should be validated.
@@ -34,6 +35,10 @@ export interface ValidatePublicRecordKeySuccess {
34
35
  * The ID of the user that owns the record.
35
36
  */
36
37
  ownerId: string;
38
+ /**
39
+ * The policy for the record key.
40
+ */
41
+ policy: PublicRecordKeyPolicy;
37
42
  }
38
43
  /**
39
44
  * Defines an interface that represents a failed "validate public record key" result.
@@ -84,7 +89,7 @@ export interface CreatePublicRecordKeyFailure {
84
89
  /**
85
90
  * The type of error that occurred.
86
91
  */
87
- errorCode: UnauthorizedToCreateRecordKeyError | ServerError | 'not_supported';
92
+ errorCode: UnauthorizedToCreateRecordKeyError | NotLoggedInError | 'invalid_policy' | ServerError | 'not_supported';
88
93
  /**
89
94
  * The error message.
90
95
  */
@@ -99,19 +104,41 @@ export declare type UnauthorizedToCreateRecordKeyError = 'unauthorized_to_create
99
104
  * Defines an error that occurs when an unspecified error occurs while creating a public record key.
100
105
  */
101
106
  export declare type InvalidRecordKey = 'invalid_record_key';
107
+ /**
108
+ * The default policy for keys that do not have a specified record key.
109
+ */
110
+ export declare const DEFAULT_RECORD_KEY_POLICY: PublicRecordKeyPolicy;
111
+ /**
112
+ * Formats the given record name and record secret into a record key.
113
+ * @param recordName The name of the record.
114
+ * @param recordSecret The secret that is used to access the record.
115
+ */
116
+ export declare function formatV1RecordKey(recordName: string, recordSecret: string): string;
102
117
  /**
103
118
  * Formats the given record name and record secret into a record key.
104
119
  * @param recordName The name of the record.
105
120
  * @param recordSecret The secret that is used to access the record.
121
+ * @param keyPolicy The policy that the key uses.
106
122
  */
107
- export declare function formatRecordKey(recordName: string, recordSecret: string): string;
123
+ export declare function formatV2RecordKey(recordName: string, recordSecret: string, keyPolicy: PublicRecordKeyPolicy): string;
108
124
  /**
109
125
  * Parses the given record key into a name and password pair.
110
126
  * Returns null if the key cannot be parsed.
111
127
  * @param key The key to parse.
112
- * @returns
113
128
  */
114
- export declare function parseRecordKey(key: string): [name: string, password: string];
129
+ export declare function parseRecordKey(key: string): [name: string, password: string, policy: PublicRecordKeyPolicy];
130
+ /**
131
+ * Parses a version 2 record key into a name, password, and policy trio.
132
+ * Returns null if the key cannot be parsed or if it is not a V2 key.
133
+ * @param key The key to parse.
134
+ */
135
+ export declare function parseV2RecordKey(key: string): [name: string, password: string, policy: PublicRecordKeyPolicy];
136
+ /**
137
+ * Parses a version 1 record key into a name and password pair.
138
+ * Returns null if the key cannot be parsed or if it is not a V1 key.
139
+ * @param key The key to parse.
140
+ */
141
+ export declare function parseV1RecordKey(key: string): [name: string, password: string, policy: PublicRecordKeyPolicy];
115
142
  /**
116
143
  * Determines if the given value is a record key.
117
144
  * @param key The value to check.
@@ -8,7 +8,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  });
9
9
  };
10
10
  import { toBase64String, fromBase64String } from './Utils';
11
- import { hashPasswordWithSalt, verifyPasswordAgainstHashes, } from '@casual-simulation/crypto';
11
+ import { hashPasswordWithSalt, } from '@casual-simulation/crypto';
12
12
  import { randomBytes } from 'tweetnacl';
13
13
  import { fromByteArray } from 'base64-js';
14
14
  /**
@@ -21,13 +21,28 @@ export class RecordsController {
21
21
  /**
22
22
  * Creates a new public record key for the given bucket name.
23
23
  * @param name The name of the record.
24
+ * @param policy The policy that should be used for the public record key.
24
25
  * @param userId The ID of the user that is creating the public record.
25
26
  * @returns
26
27
  */
27
- createPublicRecordKey(name, userId) {
28
+ createPublicRecordKey(name, policy, userId) {
28
29
  return __awaiter(this, void 0, void 0, function* () {
29
30
  try {
31
+ if (!userId) {
32
+ return {
33
+ success: false,
34
+ errorCode: 'not_logged_in',
35
+ errorMessage: 'The user must be logged in in order to create a record key.'
36
+ };
37
+ }
30
38
  const record = yield this._store.getRecordByName(name);
39
+ if (!!policy && policy !== 'subjectfull' && policy !== 'subjectless') {
40
+ return {
41
+ success: false,
42
+ errorCode: 'invalid_policy',
43
+ errorMessage: 'The record key policy must be either "subjectfull" or "subjectless".'
44
+ };
45
+ }
31
46
  if (record) {
32
47
  if (record.ownerId !== userId) {
33
48
  return {
@@ -40,10 +55,15 @@ export class RecordsController {
40
55
  const password = fromByteArray(passwordBytes); // convert to human-readable string
41
56
  const salt = record.secretSalt;
42
57
  const passwordHash = hashPasswordWithSalt(password, salt);
43
- yield this._store.updateRecord(Object.assign(Object.assign({}, record), { secretHashes: [...record.secretHashes, passwordHash] }));
58
+ yield this._store.addRecordKey({
59
+ recordName: name,
60
+ secretHash: passwordHash,
61
+ policy: policy !== null && policy !== void 0 ? policy : DEFAULT_RECORD_KEY_POLICY,
62
+ creatorId: record.ownerId,
63
+ });
44
64
  return {
45
65
  success: true,
46
- recordKey: formatRecordKey(name, password),
66
+ recordKey: formatV2RecordKey(name, password, policy),
47
67
  recordName: name,
48
68
  };
49
69
  }
@@ -55,12 +75,18 @@ export class RecordsController {
55
75
  yield this._store.addRecord({
56
76
  name,
57
77
  ownerId: userId,
58
- secretHashes: [passwordHash],
78
+ secretHashes: [],
59
79
  secretSalt: salt,
60
80
  });
81
+ yield this._store.addRecordKey({
82
+ recordName: name,
83
+ secretHash: passwordHash,
84
+ policy: policy !== null && policy !== void 0 ? policy : DEFAULT_RECORD_KEY_POLICY,
85
+ creatorId: userId,
86
+ });
61
87
  return {
62
88
  success: true,
63
- recordKey: formatRecordKey(name, password),
89
+ recordKey: formatV2RecordKey(name, password, policy),
64
90
  recordName: name,
65
91
  };
66
92
  }
@@ -91,7 +117,7 @@ export class RecordsController {
91
117
  errorMessage: 'Invalid record key.',
92
118
  };
93
119
  }
94
- const [name, password] = parseResult;
120
+ const [name, password, policy] = parseResult;
95
121
  const record = yield this._store.getRecordByName(name);
96
122
  if (!record) {
97
123
  return {
@@ -100,11 +126,31 @@ export class RecordsController {
100
126
  errorMessage: 'Record not found.',
101
127
  };
102
128
  }
103
- const result = verifyPasswordAgainstHashes(password, record.secretSalt, record.secretHashes);
104
- if (result) {
129
+ const hash = hashPasswordWithSalt(password, record.secretSalt);
130
+ let valid = false;
131
+ let resultPolicy = DEFAULT_RECORD_KEY_POLICY;
132
+ if (record.secretHashes.some(h => h === hash)) {
133
+ valid = true;
134
+ }
135
+ else {
136
+ const key = yield this._store.getRecordKeyByRecordAndHash(name, hash);
137
+ if (!!key) {
138
+ resultPolicy = key.policy;
139
+ valid = true;
140
+ }
141
+ }
142
+ if (resultPolicy !== policy) {
143
+ return {
144
+ success: false,
145
+ errorCode: 'invalid_record_key',
146
+ errorMessage: 'Invalid record key.'
147
+ };
148
+ }
149
+ if (valid) {
105
150
  return {
106
151
  success: true,
107
152
  recordName: name,
153
+ policy: policy,
108
154
  ownerId: record.ownerId,
109
155
  };
110
156
  }
@@ -127,21 +173,85 @@ export class RecordsController {
127
173
  });
128
174
  }
129
175
  }
176
+ /**
177
+ * The default policy for keys that do not have a specified record key.
178
+ */
179
+ export const DEFAULT_RECORD_KEY_POLICY = 'subjectfull';
130
180
  /**
131
181
  * Formats the given record name and record secret into a record key.
132
182
  * @param recordName The name of the record.
133
183
  * @param recordSecret The secret that is used to access the record.
134
184
  */
135
- export function formatRecordKey(recordName, recordSecret) {
185
+ export function formatV1RecordKey(recordName, recordSecret) {
136
186
  return `vRK1.${toBase64String(recordName)}.${toBase64String(recordSecret)}`;
137
187
  }
188
+ /**
189
+ * Formats the given record name and record secret into a record key.
190
+ * @param recordName The name of the record.
191
+ * @param recordSecret The secret that is used to access the record.
192
+ * @param keyPolicy The policy that the key uses.
193
+ */
194
+ export function formatV2RecordKey(recordName, recordSecret, keyPolicy) {
195
+ return `vRK2.${toBase64String(recordName)}.${toBase64String(recordSecret)}.${keyPolicy !== null && keyPolicy !== void 0 ? keyPolicy : DEFAULT_RECORD_KEY_POLICY}`;
196
+ }
138
197
  /**
139
198
  * Parses the given record key into a name and password pair.
140
199
  * Returns null if the key cannot be parsed.
141
200
  * @param key The key to parse.
142
- * @returns
143
201
  */
144
202
  export function parseRecordKey(key) {
203
+ var _a;
204
+ return (_a = parseV2RecordKey(key)) !== null && _a !== void 0 ? _a : parseV1RecordKey(key);
205
+ }
206
+ /**
207
+ * Parses a version 2 record key into a name, password, and policy trio.
208
+ * Returns null if the key cannot be parsed or if it is not a V2 key.
209
+ * @param key The key to parse.
210
+ */
211
+ export function parseV2RecordKey(key) {
212
+ if (!key) {
213
+ return null;
214
+ }
215
+ if (!key.startsWith('vRK2.')) {
216
+ return null;
217
+ }
218
+ const withoutVersion = key.slice('vRK2.'.length);
219
+ let periodAfterName = withoutVersion.indexOf('.');
220
+ if (periodAfterName < 0) {
221
+ return null;
222
+ }
223
+ const nameBase64 = withoutVersion.slice(0, periodAfterName);
224
+ const passwordPlusPolicy = withoutVersion.slice(periodAfterName + 1);
225
+ if (nameBase64.length <= 0 || passwordPlusPolicy.length <= 0) {
226
+ return null;
227
+ }
228
+ const periodAfterPassword = passwordPlusPolicy.indexOf('.');
229
+ if (periodAfterPassword < 0) {
230
+ return null;
231
+ }
232
+ const passwordBase64 = passwordPlusPolicy.slice(0, periodAfterPassword);
233
+ const policy = passwordPlusPolicy.slice(periodAfterPassword + 1);
234
+ if (passwordBase64.length <= 0 || policy.length <= 0) {
235
+ return null;
236
+ }
237
+ if (policy !== 'subjectfull' && policy !== 'subjectless') {
238
+ return null;
239
+ }
240
+ try {
241
+ const name = fromBase64String(nameBase64);
242
+ const password = fromBase64String(passwordBase64);
243
+ return [name, password, policy];
244
+ }
245
+ catch (err) {
246
+ return null;
247
+ }
248
+ }
249
+ /**
250
+ * Parses a version 1 record key into a name and password pair.
251
+ * Returns null if the key cannot be parsed or if it is not a V1 key.
252
+ * @param key The key to parse.
253
+ */
254
+ export function parseV1RecordKey(key) {
145
255
  if (!key) {
146
256
  return null;
147
257
  }
@@ -161,7 +271,7 @@ export function parseRecordKey(key) {
161
271
  try {
162
272
  const name = fromBase64String(nameBase64);
163
273
  const password = fromBase64String(passwordBase64);
164
- return [name, password];
274
+ return [name, password, DEFAULT_RECORD_KEY_POLICY];
165
275
  }
166
276
  catch (err) {
167
277
  return null;
@@ -1 +1 @@
1
- {"version":3,"file":"RecordsController.js","sourceRoot":"","sources":["RecordsController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RecordsController.js","sourceRoot":"","sources":["RecordsController.ts"],"names":[],"mappings":"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"}
package/RecordsStore.d.ts CHANGED
@@ -17,6 +17,17 @@ export interface RecordsStore {
17
17
  * @param name The name of the record.
18
18
  */
19
19
  getRecordByName(name: string): Promise<Record>;
20
+ /**
21
+ * Adds the given record key to the store.
22
+ * @param key The key to add.
23
+ */
24
+ addRecordKey(key: RecordKey): Promise<void>;
25
+ /**
26
+ * Gets the record key for the given record name that has the given hash.
27
+ * @param recordName The name of the record.
28
+ * @param hash The scrypt hash of the key that should be retrieved.
29
+ */
30
+ getRecordKeyByRecordAndHash(recordName: string, hash: string): Promise<RecordKey>;
20
31
  }
21
32
  /**
22
33
  * Defines an interface for record objects.
@@ -42,4 +53,32 @@ export interface Record {
42
53
  */
43
54
  secretSalt: string;
44
55
  }
56
+ /**
57
+ * Defines a type that represents the different kinds of policies that a record key can have.
58
+ *
59
+ * - null and "subjectfull" indicate that actions performed with this key must require a subject to provide their access token in order for operations to succeed.
60
+ * - "subjectless" indicates that actions may be performed with key despite not having an access key from a subject.
61
+ */
62
+ export declare type PublicRecordKeyPolicy = null | 'subjectfull' | 'subjectless';
63
+ /**
64
+ * Defines an interface for record key objects.
65
+ */
66
+ export interface RecordKey {
67
+ /**
68
+ * The name of the record that the key is for.
69
+ */
70
+ recordName: string;
71
+ /**
72
+ * The scrypt hash of the secret that this key is for.
73
+ */
74
+ secretHash: string;
75
+ /**
76
+ * The policy that the key uses.
77
+ */
78
+ policy: PublicRecordKeyPolicy;
79
+ /**
80
+ * The ID of the user that created this key.
81
+ */
82
+ creatorId: string;
83
+ }
45
84
  //# sourceMappingURL=RecordsStore.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@casual-simulation/aux-records",
3
- "version": "3.0.0",
3
+ "version": "3.0.5",
4
4
  "description": "Helpers and managers used by the CasualOS records system.",
5
5
  "keywords": [],
6
6
  "author": "Casual Simulation, Inc.",
@@ -41,5 +41,5 @@
41
41
  "@casual-simulation/crypto": "^3.0.0",
42
42
  "tweetnacl": "1.0.3"
43
43
  },
44
- "gitHead": "61191ee46ea40ab2cc79d9d4cb85f5e98cdd7d38"
44
+ "gitHead": "64a1ab80b4fc73db4f190deb874618a6a52394fa"
45
45
  }