@casual-simulation/aux-records-aws 3.0.16 → 3.0.18-alpha.2733785418

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.
@@ -0,0 +1,26 @@
1
+ import { AddressType, AuthLoginRequest, AuthSession, AuthStore, AuthUser, ListSessionsDataResult, SaveNewUserResult } from '@casual-simulation/aux-records/AuthStore';
2
+ import dynamodb from 'aws-sdk/clients/dynamodb';
3
+ export declare class DynamoDBAuthStore implements AuthStore {
4
+ private _dynamo;
5
+ private _usersTableName;
6
+ private _userAddressesTableName;
7
+ private _loginRequestsTableName;
8
+ private _sessionsTableName;
9
+ private _sessionsTableExpireTimeIndexName;
10
+ constructor(dynamo: dynamodb.DocumentClient, usersTableName: string, userAddressesTableName: string, loginRequestsTableName: string, sessionsTableName: string, sessionsTableExpireTimeIndexName: string);
11
+ setRevokeAllSessionsTimeForUser(userId: string, allSessionRevokeTimeMs: number): Promise<void>;
12
+ saveUser(user: AuthUser): Promise<void>;
13
+ saveNewUser(user: AuthUser): Promise<SaveNewUserResult>;
14
+ setCurrentLoginRequest(userId: string, requestId: string): Promise<void>;
15
+ findUser(userId: string): Promise<AuthUser>;
16
+ findUserByAddress(address: string, addressType: AddressType): Promise<AuthUser>;
17
+ findLoginRequest(userId: string, requestId: string): Promise<AuthLoginRequest>;
18
+ saveLoginRequest(request: AuthLoginRequest): Promise<AuthLoginRequest>;
19
+ markLoginRequestComplete(userId: string, requestId: string, completedTimeMs: number): Promise<void>;
20
+ incrementLoginRequestAttemptCount(userId: string, requestId: string): Promise<void>;
21
+ findSession(userId: string, sessionId: string): Promise<AuthSession>;
22
+ saveSession(session: AuthSession): Promise<void>;
23
+ listSessions(userId: string, expireTimeMs: number | null): Promise<ListSessionsDataResult>;
24
+ }
25
+ export declare function cleanupObject<T extends Object>(obj: T): Partial<T>;
26
+ //# sourceMappingURL=DynamoDBAuthStore.d.ts.map
@@ -0,0 +1,421 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { omitBy } from 'lodash';
11
+ export class DynamoDBAuthStore {
12
+ constructor(dynamo, usersTableName, userAddressesTableName, loginRequestsTableName, sessionsTableName, sessionsTableExpireTimeIndexName) {
13
+ this._dynamo = dynamo;
14
+ this._usersTableName = usersTableName;
15
+ this._userAddressesTableName = userAddressesTableName;
16
+ this._loginRequestsTableName = loginRequestsTableName;
17
+ this._sessionsTableName = sessionsTableName;
18
+ this._sessionsTableExpireTimeIndexName =
19
+ sessionsTableExpireTimeIndexName;
20
+ }
21
+ setRevokeAllSessionsTimeForUser(userId, allSessionRevokeTimeMs) {
22
+ return __awaiter(this, void 0, void 0, function* () {
23
+ yield this._dynamo
24
+ .update({
25
+ TableName: this._usersTableName,
26
+ Key: {
27
+ id: userId,
28
+ },
29
+ UpdateExpression: 'SET allSessionRevokeTimeMs = :allSessionRevokeTimeMs',
30
+ ExpressionAttributeValues: {
31
+ ':allSessionRevokeTimeMs': allSessionRevokeTimeMs,
32
+ },
33
+ })
34
+ .promise();
35
+ });
36
+ }
37
+ saveUser(user) {
38
+ return __awaiter(this, void 0, void 0, function* () {
39
+ let items = [
40
+ {
41
+ Put: {
42
+ TableName: this._usersTableName,
43
+ Item: cleanupObject({
44
+ id: user.id,
45
+ name: user.name,
46
+ email: user.email,
47
+ phoneNumber: user.phoneNumber,
48
+ avatarUrl: user.avatarUrl,
49
+ avatarPortraitUrl: user.avatarPortraitUrl,
50
+ allSessionRevokeTimeMs: user.allSessionRevokeTimeMs,
51
+ currentLoginRequestId: user.currentLoginRequestId,
52
+ }),
53
+ },
54
+ },
55
+ ];
56
+ if (user.email) {
57
+ // Save the email to the addresses table
58
+ // This will overwrite the user ID that is associated with the email.
59
+ // This is OK because findUserByAddress() checks to ensure that the email stored in the user record matches the one that was used to look up
60
+ // the user.
61
+ items.push({
62
+ Put: {
63
+ TableName: this._userAddressesTableName,
64
+ Item: {
65
+ address: user.email,
66
+ addressType: 'email',
67
+ userId: user.id,
68
+ },
69
+ },
70
+ });
71
+ }
72
+ if (user.phoneNumber) {
73
+ // Save the phone number to the addresses table.
74
+ // This will overwrite the user ID that is associated with the phone number.
75
+ // This is OK because findUserByAddress() checks to ensure that the phone number stored in the user record matches the one that was used to look up
76
+ // the user.
77
+ items.push({
78
+ Put: {
79
+ TableName: this._userAddressesTableName,
80
+ Item: {
81
+ address: user.phoneNumber,
82
+ addressType: 'phone',
83
+ userId: user.id,
84
+ },
85
+ },
86
+ });
87
+ }
88
+ yield this._dynamo
89
+ .transactWrite({
90
+ TransactItems: items,
91
+ })
92
+ .promise();
93
+ });
94
+ }
95
+ saveNewUser(user) {
96
+ let items = [
97
+ {
98
+ Put: {
99
+ TableName: this._usersTableName,
100
+ Item: cleanupObject({
101
+ id: user.id,
102
+ name: user.name,
103
+ email: user.email,
104
+ phoneNumber: user.phoneNumber,
105
+ avatarUrl: user.avatarUrl,
106
+ avatarPortraitUrl: user.avatarPortraitUrl,
107
+ allSessionRevokeTimeMs: user.allSessionRevokeTimeMs,
108
+ currentLoginRequestId: user.currentLoginRequestId,
109
+ }),
110
+ ConditionExpression: 'attribute_not_exists(id)',
111
+ },
112
+ },
113
+ ];
114
+ if (user.email) {
115
+ // Save the email to the addresses table
116
+ items.push({
117
+ Put: {
118
+ TableName: this._userAddressesTableName,
119
+ Item: {
120
+ address: user.email,
121
+ addressType: 'email',
122
+ userId: user.id,
123
+ },
124
+ ConditionExpression: 'attribute_not_exists(address)',
125
+ },
126
+ });
127
+ }
128
+ if (user.phoneNumber) {
129
+ // Save the phone number to the addresses table
130
+ items.push({
131
+ Put: {
132
+ TableName: this._userAddressesTableName,
133
+ Item: {
134
+ address: user.phoneNumber,
135
+ addressType: 'phone',
136
+ userId: user.id,
137
+ },
138
+ ConditionExpression: 'attribute_not_exists(address)',
139
+ },
140
+ });
141
+ }
142
+ return this._dynamo
143
+ .transactWrite({
144
+ TransactItems: items,
145
+ })
146
+ .promise()
147
+ .then((result) => {
148
+ return {
149
+ success: true,
150
+ };
151
+ }, (err) => {
152
+ if (err.name === 'ConditionalCheckFailedException') {
153
+ return {
154
+ success: false,
155
+ errorCode: 'user_already_exists',
156
+ errorMessage: 'The user already exists.',
157
+ };
158
+ }
159
+ else {
160
+ console.error('[DynamoDBAuthStore] Unable to save new user.', err);
161
+ return {
162
+ success: false,
163
+ errorCode: 'server_error',
164
+ errorMessage: 'A server error occurred.',
165
+ };
166
+ }
167
+ });
168
+ }
169
+ setCurrentLoginRequest(userId, requestId) {
170
+ return __awaiter(this, void 0, void 0, function* () {
171
+ yield this._dynamo
172
+ .update({
173
+ TableName: this._usersTableName,
174
+ Key: {
175
+ id: userId,
176
+ },
177
+ UpdateExpression: 'SET currentLoginRequestId = :currentLoginRequestId',
178
+ ExpressionAttributeValues: {
179
+ ':currentLoginRequestId': requestId,
180
+ },
181
+ })
182
+ .promise();
183
+ });
184
+ }
185
+ findUser(userId) {
186
+ return __awaiter(this, void 0, void 0, function* () {
187
+ const userResult = yield this._dynamo
188
+ .get({
189
+ TableName: this._usersTableName,
190
+ Key: {
191
+ id: userId,
192
+ },
193
+ })
194
+ .promise();
195
+ const user = userResult.Item;
196
+ if (user) {
197
+ return {
198
+ id: user.id,
199
+ email: user.email,
200
+ phoneNumber: user.phoneNumber,
201
+ avatarPortraitUrl: user.avatarPortraitUrl,
202
+ avatarUrl: user.avatarUrl,
203
+ name: user.name,
204
+ allSessionRevokeTimeMs: user.allSessionRevokeTimeMs,
205
+ currentLoginRequestId: user.currentLoginRequestId,
206
+ };
207
+ }
208
+ else {
209
+ return null;
210
+ }
211
+ });
212
+ }
213
+ findUserByAddress(address, addressType) {
214
+ return __awaiter(this, void 0, void 0, function* () {
215
+ const addressQuery = yield this._dynamo
216
+ .get({
217
+ TableName: this._userAddressesTableName,
218
+ Key: {
219
+ address: address,
220
+ addressType: addressType,
221
+ },
222
+ })
223
+ .promise();
224
+ if (addressQuery.Item) {
225
+ const userId = addressQuery.Item.userId;
226
+ const user = yield this.findUser(userId);
227
+ if (user) {
228
+ if (addressType === 'email' && user.email === address) {
229
+ return user;
230
+ }
231
+ else if (addressType === 'phone' &&
232
+ user.phoneNumber === address) {
233
+ return user;
234
+ }
235
+ }
236
+ return null;
237
+ }
238
+ else {
239
+ return null;
240
+ }
241
+ });
242
+ }
243
+ findLoginRequest(userId, requestId) {
244
+ return __awaiter(this, void 0, void 0, function* () {
245
+ const result = yield this._dynamo
246
+ .get({
247
+ TableName: this._loginRequestsTableName,
248
+ Key: {
249
+ userId: userId,
250
+ requestId: requestId,
251
+ },
252
+ })
253
+ .promise();
254
+ if (result.Item) {
255
+ return {
256
+ userId: result.Item.userId,
257
+ requestId: result.Item.requestId,
258
+ secretHash: result.Item.secretHash,
259
+ expireTimeMs: result.Item.expireTimeMs,
260
+ completedTimeMs: result.Item.completedTimeMs,
261
+ requestTimeMs: result.Item.requestTimeMs,
262
+ address: result.Item.address,
263
+ addressType: result.Item.addressType,
264
+ ipAddress: result.Item.ipAddress,
265
+ attemptCount: result.Item.attemptCount,
266
+ };
267
+ }
268
+ return null;
269
+ });
270
+ }
271
+ saveLoginRequest(request) {
272
+ return __awaiter(this, void 0, void 0, function* () {
273
+ const data = {
274
+ userId: request.userId,
275
+ requestId: request.requestId,
276
+ secretHash: request.secretHash,
277
+ expireTimeMs: request.expireTimeMs,
278
+ completedTimeMs: request.completedTimeMs,
279
+ requestTimeMs: request.requestTimeMs,
280
+ address: request.address,
281
+ addressType: request.addressType,
282
+ ipAddress: request.ipAddress,
283
+ attemptCount: request.attemptCount,
284
+ };
285
+ yield this._dynamo
286
+ .put({
287
+ TableName: this._loginRequestsTableName,
288
+ Item: cleanupObject(data),
289
+ })
290
+ .promise();
291
+ return data;
292
+ });
293
+ }
294
+ markLoginRequestComplete(userId, requestId, completedTimeMs) {
295
+ return __awaiter(this, void 0, void 0, function* () {
296
+ yield this._dynamo
297
+ .update({
298
+ TableName: this._loginRequestsTableName,
299
+ Key: {
300
+ userId: userId,
301
+ requestId: requestId,
302
+ },
303
+ UpdateExpression: 'SET completedTimeMs = :completedTimeMs',
304
+ ExpressionAttributeValues: {
305
+ ':completedTimeMs': completedTimeMs,
306
+ },
307
+ })
308
+ .promise();
309
+ });
310
+ }
311
+ incrementLoginRequestAttemptCount(userId, requestId) {
312
+ return __awaiter(this, void 0, void 0, function* () {
313
+ yield this._dynamo
314
+ .update({
315
+ TableName: this._loginRequestsTableName,
316
+ Key: {
317
+ userId: userId,
318
+ requestId: requestId,
319
+ },
320
+ UpdateExpression: 'SET attemptCount = attemptCount + 1',
321
+ })
322
+ .promise();
323
+ });
324
+ }
325
+ findSession(userId, sessionId) {
326
+ return __awaiter(this, void 0, void 0, function* () {
327
+ const result = yield this._dynamo
328
+ .get({
329
+ TableName: this._sessionsTableName,
330
+ Key: {
331
+ userId: userId,
332
+ sessionId: sessionId,
333
+ },
334
+ })
335
+ .promise();
336
+ if (result.Item) {
337
+ return {
338
+ userId: result.Item.userId,
339
+ sessionId: result.Item.sessionId,
340
+ secretHash: result.Item.secretHash,
341
+ expireTimeMs: result.Item.expireTimeMs,
342
+ grantedTimeMs: result.Item.grantedTimeMs,
343
+ revokeTimeMs: result.Item.revokeTimeMs,
344
+ ipAddress: result.Item.ipAddress,
345
+ requestId: result.Item.requestId,
346
+ previousSessionId: result.Item.previousSessionId,
347
+ nextSessionId: result.Item.nextSessionId,
348
+ };
349
+ }
350
+ return null;
351
+ });
352
+ }
353
+ saveSession(session) {
354
+ return __awaiter(this, void 0, void 0, function* () {
355
+ const data = {
356
+ userId: session.userId,
357
+ sessionId: session.sessionId,
358
+ secretHash: session.secretHash,
359
+ expireTimeMs: session.expireTimeMs,
360
+ grantedTimeMs: session.grantedTimeMs,
361
+ revokeTimeMs: session.revokeTimeMs,
362
+ ipAddress: session.ipAddress,
363
+ requestId: session.requestId,
364
+ previousSessionId: session.previousSessionId,
365
+ nextSessionId: session.nextSessionId,
366
+ };
367
+ yield this._dynamo
368
+ .put({
369
+ TableName: this._sessionsTableName,
370
+ Item: cleanupObject(data),
371
+ })
372
+ .promise();
373
+ });
374
+ }
375
+ listSessions(userId, expireTimeMs) {
376
+ return __awaiter(this, void 0, void 0, function* () {
377
+ const query = typeof expireTimeMs === 'number'
378
+ ? 'userId = :userId AND expireTimeMs < :expireTimeMs'
379
+ : 'userId = :userId';
380
+ const values = typeof expireTimeMs === 'number'
381
+ ? {
382
+ ':userId': userId,
383
+ ':expireTimeMs': expireTimeMs,
384
+ }
385
+ : {
386
+ ':userId': userId,
387
+ };
388
+ const result = yield this._dynamo
389
+ .query({
390
+ TableName: this._sessionsTableName,
391
+ IndexName: this._sessionsTableExpireTimeIndexName,
392
+ KeyConditionExpression: query,
393
+ ExpressionAttributeValues: values,
394
+ Limit: 10,
395
+ })
396
+ .promise();
397
+ return {
398
+ success: true,
399
+ sessions: result.Items.map((i) => {
400
+ let session = {
401
+ userId: i.userId,
402
+ sessionId: i.sessionId,
403
+ secretHash: i.secretHash,
404
+ expireTimeMs: i.expireTimeMs,
405
+ grantedTimeMs: i.grantedTimeMs,
406
+ revokeTimeMs: i.revokeTimeMs,
407
+ ipAddress: i.ipAddress,
408
+ requestId: i.requestId,
409
+ previousSessionId: i.previousSessionId,
410
+ nextSessionId: i.nextSessionId,
411
+ };
412
+ return session;
413
+ }),
414
+ };
415
+ });
416
+ }
417
+ }
418
+ export function cleanupObject(obj) {
419
+ return omitBy(obj, (o) => typeof o === 'undefined' || o === null);
420
+ }
421
+ //# sourceMappingURL=DynamoDBAuthStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DynamoDBAuthStore.js","sourceRoot":"","sources":["DynamoDBAuthStore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { AuthMessenger, SendCodeResult } from '@casual-simulation/aux-records/AuthMessenger';
2
+ import { AddressType } from '@casual-simulation/aux-records/AuthStore';
3
+ /**
4
+ * Defines a class that implements an AuthMessenger for TextIt.
5
+ */
6
+ export declare class TextItAuthMessenger implements AuthMessenger {
7
+ private _apiKey;
8
+ private _flowId;
9
+ constructor(apiKey: string, flowId: string);
10
+ supportsAddressType(addressType: AddressType): Promise<boolean>;
11
+ sendCode(address: string, addressType: AddressType, code: string): Promise<SendCodeResult>;
12
+ }
13
+ //# sourceMappingURL=TextItAuthMessenger.d.ts.map
@@ -0,0 +1,72 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import axios from 'axios';
11
+ /**
12
+ * Defines a class that implements an AuthMessenger for TextIt.
13
+ */
14
+ export class TextItAuthMessenger {
15
+ constructor(apiKey, flowId) {
16
+ this._apiKey = apiKey;
17
+ this._flowId = flowId;
18
+ }
19
+ supportsAddressType(addressType) {
20
+ return Promise.resolve(addressType === 'email' || addressType === 'phone');
21
+ }
22
+ sendCode(address, addressType, code) {
23
+ return __awaiter(this, void 0, void 0, function* () {
24
+ if (addressType !== 'email' && addressType !== 'phone') {
25
+ return {
26
+ success: false,
27
+ errorCode: 'address_type_not_supported',
28
+ errorMessage: `${addressType} addresses are not supported`,
29
+ };
30
+ }
31
+ try {
32
+ const result = yield axios.post('https://textit.com/api/v2/flow_starts.json', {
33
+ flow: this._flowId,
34
+ urns: [
35
+ addressType === 'email'
36
+ ? `mailto:${address}`
37
+ : `tel:${address}`,
38
+ ],
39
+ params: {
40
+ code: code,
41
+ },
42
+ restart_participants: true,
43
+ }, {
44
+ headers: {
45
+ Authorization: `Token ${this._apiKey}`,
46
+ },
47
+ });
48
+ return {
49
+ success: true,
50
+ };
51
+ }
52
+ catch (err) {
53
+ if (err.response) {
54
+ if (err.response.status === 400) {
55
+ return {
56
+ success: false,
57
+ errorCode: 'unacceptable_address',
58
+ errorMessage: 'The given address is invalid.',
59
+ };
60
+ }
61
+ }
62
+ console.error('[TextItAuthMessenger] A server error ocurred:', err);
63
+ return {
64
+ success: false,
65
+ errorCode: 'server_error',
66
+ errorMessage: 'A server error occurred.',
67
+ };
68
+ }
69
+ });
70
+ }
71
+ }
72
+ //# sourceMappingURL=TextItAuthMessenger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TextItAuthMessenger.js","sourceRoot":"","sources":["TextItAuthMessenger.ts"],"names":[],"mappings":";;;;;;;;;AAKA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;GAEG;AACH,MAAM,OAAO,mBAAmB;IAI5B,YAAY,MAAc,EAAE,MAAc;QACtC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IAC1B,CAAC;IAED,mBAAmB,CAAC,WAAwB;QACxC,OAAO,OAAO,CAAC,OAAO,CAClB,WAAW,KAAK,OAAO,IAAI,WAAW,KAAK,OAAO,CACrD,CAAC;IACN,CAAC;IAEK,QAAQ,CACV,OAAe,EACf,WAAwB,EACxB,IAAY;;YAEZ,IAAI,WAAW,KAAK,OAAO,IAAI,WAAW,KAAK,OAAO,EAAE;gBACpD,OAAO;oBACH,OAAO,EAAE,KAAK;oBACd,SAAS,EAAE,4BAA4B;oBACvC,YAAY,EAAE,GAAG,WAAW,8BAA8B;iBAC7D,CAAC;aACL;YAED,IAAI;gBACA,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,IAAI,CAC3B,4CAA4C,EAC5C;oBACI,IAAI,EAAE,IAAI,CAAC,OAAO;oBAClB,IAAI,EAAE;wBACF,WAAW,KAAK,OAAO;4BACnB,CAAC,CAAC,UAAU,OAAO,EAAE;4BACrB,CAAC,CAAC,OAAO,OAAO,EAAE;qBACzB;oBACD,MAAM,EAAE;wBACJ,IAAI,EAAE,IAAI;qBACb;oBACD,oBAAoB,EAAE,IAAI;iBAC7B,EACD;oBACI,OAAO,EAAE;wBACL,aAAa,EAAE,SAAS,IAAI,CAAC,OAAO,EAAE;qBACzC;iBACJ,CACJ,CAAC;gBAEF,OAAO;oBACH,OAAO,EAAE,IAAI;iBAChB,CAAC;aACL;YAAC,OAAO,GAAG,EAAE;gBACV,IAAI,GAAG,CAAC,QAAQ,EAAE;oBACd,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;wBAC7B,OAAO;4BACH,OAAO,EAAE,KAAK;4BACd,SAAS,EAAE,sBAAsB;4BACjC,YAAY,EAAE,+BAA+B;yBAChD,CAAC;qBACL;iBACJ;gBACD,OAAO,CAAC,KAAK,CAAC,+CAA+C,EAAE,GAAG,CAAC,CAAC;gBACpE,OAAO;oBACH,OAAO,EAAE,KAAK;oBACd,SAAS,EAAE,cAAc;oBACzB,YAAY,EAAE,0BAA0B;iBAC3C,CAAC;aACL;QACL,CAAC;KAAA;CACJ"}
package/index.d.ts CHANGED
@@ -2,4 +2,6 @@ export * from './DynamoDBRecordsStore';
2
2
  export * from './DynamoDBDataStore';
3
3
  export * from './DynamoDBFileStore';
4
4
  export * from './DynamoDBEventStore';
5
+ export * from './DynamoDBAuthStore';
6
+ export * from './TextItAuthMessenger';
5
7
  //# sourceMappingURL=index.d.ts.map
package/index.js CHANGED
@@ -2,4 +2,6 @@ export * from './DynamoDBRecordsStore';
2
2
  export * from './DynamoDBDataStore';
3
3
  export * from './DynamoDBFileStore';
4
4
  export * from './DynamoDBEventStore';
5
+ export * from './DynamoDBAuthStore';
6
+ export * from './TextItAuthMessenger';
5
7
  //# sourceMappingURL=index.js.map
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@casual-simulation/aux-records-aws",
3
- "version": "3.0.16",
3
+ "version": "3.0.18-alpha.2733785418",
4
4
  "description": "AWS Store implementations for the CasualOS Records System.",
5
5
  "keywords": [],
6
6
  "author": "Casual Simulation, Inc.",
@@ -37,7 +37,7 @@
37
37
  "access": "public"
38
38
  },
39
39
  "dependencies": {
40
- "@casual-simulation/aux-records": "^3.0.16"
40
+ "@casual-simulation/aux-records": "^3.0.18-alpha.2733785418"
41
41
  },
42
- "gitHead": "726f96f4506e38b3cf00918685585656b8a3b32c"
42
+ "gitHead": "258b6d4a9a7cfa920e258d202624d880cc098355"
43
43
  }