@bitblit/ratchet-warden-server 5.1.609-alpha → 5.1.611-alpha

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,3 @@
1
+ export declare class WardenDynamoStorageProviderOptions {
2
+ tableName: string;
3
+ }
@@ -0,0 +1,4 @@
1
+ export class WardenDynamoStorageProviderOptions {
2
+ tableName;
3
+ }
4
+ //# sourceMappingURL=warden-dynamo-storage-provider-options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"warden-dynamo-storage-provider-options.js","sourceRoot":"","sources":["../../../src/server/provider/warden-dynamo-storage-provider-options.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,kCAAkC;IAC7C,SAAS,CAAS;CACnB"}
@@ -0,0 +1,36 @@
1
+ import { DynamoRatchet } from '@bitblit/ratchet-aws/dynamodb/dynamo-ratchet';
2
+ import { WardenDynamoStorageProviderOptions } from './warden-dynamo-storage-provider-options.js';
3
+ import { WardenContact } from '@bitblit/ratchet-warden-common/common/model/warden-contact';
4
+ import { WardenEntry } from '@bitblit/ratchet-warden-common/common/model/warden-entry';
5
+ import { WardenEntrySummary } from '@bitblit/ratchet-warden-common/common/model/warden-entry-summary';
6
+ import { ExpiringCodeProvider } from '@bitblit/ratchet-aws/expiring-code/expiring-code-provider';
7
+ import { ExpiringCode } from '@bitblit/ratchet-aws/expiring-code/expiring-code';
8
+ import { WardenStorageProvider } from "./warden-storage-provider.js";
9
+ export declare class WardenDynamoStorageProvider implements WardenStorageProvider, ExpiringCodeProvider {
10
+ private ddb;
11
+ private options;
12
+ private static readonly EXPIRING_CODE_PROVIDER_KEY;
13
+ constructor(ddb: DynamoRatchet, options: WardenDynamoStorageProviderOptions);
14
+ private fetchExpiringCodes;
15
+ checkCode(code: string, context: string, deleteOnMatch?: boolean): Promise<boolean>;
16
+ storeCode(code: ExpiringCode): Promise<boolean>;
17
+ private static contactToSearchString;
18
+ private fetchInternalByUserId;
19
+ fetchCurrentUserChallenge(userId: string, relyingPartyId: string): Promise<string>;
20
+ findEntryByContact(contact: WardenContact): Promise<WardenEntry>;
21
+ findEntryById(userId: string): Promise<WardenEntry>;
22
+ listUserSummaries(): Promise<WardenEntrySummary[]>;
23
+ removeEntry(userId: string): Promise<boolean>;
24
+ saveEntry(entry: WardenEntry): Promise<WardenEntry>;
25
+ updateUserChallenge(userId: string, relyingPartyId: string, challenge: string): Promise<boolean>;
26
+ }
27
+ export interface WardenDynamoStorageDataWrapper {
28
+ userId: string;
29
+ entry: WardenEntry;
30
+ currentUserChallenges: string[];
31
+ contactSearchString: string;
32
+ }
33
+ export interface ExpiringCodeHolder {
34
+ userId: string;
35
+ values: ExpiringCode[];
36
+ }
@@ -0,0 +1,131 @@
1
+ import { Logger } from '@bitblit/ratchet-common/logger/logger';
2
+ import { ErrorRatchet } from '@bitblit/ratchet-common/lang/error-ratchet';
3
+ import { WardenUtils } from '@bitblit/ratchet-warden-common/common/util/warden-utils';
4
+ export class WardenDynamoStorageProvider {
5
+ ddb;
6
+ options;
7
+ static EXPIRING_CODE_PROVIDER_KEY = '__EXPIRING_CODE_DATA';
8
+ constructor(ddb, options) {
9
+ this.ddb = ddb;
10
+ this.options = options;
11
+ }
12
+ async fetchExpiringCodes() {
13
+ let rval = await this.ddb.simpleGet(this.options.tableName, {
14
+ userId: WardenDynamoStorageProvider.EXPIRING_CODE_PROVIDER_KEY
15
+ });
16
+ if (!rval) {
17
+ rval = {
18
+ userId: WardenDynamoStorageProvider.EXPIRING_CODE_PROVIDER_KEY,
19
+ values: []
20
+ };
21
+ await this.ddb.simplePut(this.options.tableName, rval);
22
+ }
23
+ return rval;
24
+ }
25
+ async checkCode(code, context, deleteOnMatch) {
26
+ const codes = await this.fetchExpiringCodes();
27
+ const rval = codes.values.find((c) => c.code === code && c.context === context);
28
+ if (rval) {
29
+ if (deleteOnMatch) {
30
+ codes.values = codes.values.filter((c) => c.code !== code || c.context !== context);
31
+ await this.ddb.simplePut(this.options.tableName, codes);
32
+ }
33
+ return true;
34
+ }
35
+ else {
36
+ return !!rval;
37
+ }
38
+ }
39
+ async storeCode(code) {
40
+ const codes = await this.fetchExpiringCodes();
41
+ codes.values.push(code);
42
+ const now = Date.now();
43
+ codes.values = codes.values.filter(c => c.expiresEpochMS > now);
44
+ const stored = await this.ddb.simplePut(this.options.tableName, codes);
45
+ return stored ? true : false;
46
+ }
47
+ static contactToSearchString(contact) {
48
+ const toFind = `${contact.type}:${contact.value}`;
49
+ return toFind;
50
+ }
51
+ async fetchInternalByUserId(userId) {
52
+ return this.ddb.simpleGet(this.options.tableName, { userId: userId });
53
+ }
54
+ async fetchCurrentUserChallenge(userId, relyingPartyId) {
55
+ const rval = await this.fetchInternalByUserId(userId);
56
+ const cuc = rval ? rval.currentUserChallenges.find((c) => c.startsWith(relyingPartyId)) : null;
57
+ return cuc ? cuc.substring(relyingPartyId.length + 1) : null;
58
+ }
59
+ async findEntryByContact(contact) {
60
+ const toFind = WardenDynamoStorageProvider.contactToSearchString(contact);
61
+ const scan = {
62
+ TableName: this.options.tableName,
63
+ FilterExpression: 'contains(#contactSearchString,:contactSearchString)',
64
+ ExpressionAttributeNames: {
65
+ '#contactSearchString': 'contactSearchString',
66
+ },
67
+ ExpressionAttributeValues: {
68
+ ':contactSearchString': toFind
69
+ }
70
+ };
71
+ const results = await this.ddb.fullyExecuteScan(scan);
72
+ if (results && results.length > 0) {
73
+ const rval = results[0];
74
+ return rval.entry;
75
+ }
76
+ else {
77
+ Logger.info('No results found for %s', toFind);
78
+ return null;
79
+ }
80
+ }
81
+ async findEntryById(userId) {
82
+ const rval = await this.fetchInternalByUserId(userId);
83
+ return rval ? rval.entry : null;
84
+ }
85
+ async listUserSummaries() {
86
+ const scan = {
87
+ TableName: this.options.tableName,
88
+ };
89
+ const results = await this.ddb.fullyExecuteScan(scan);
90
+ const rval = results.map(wd => {
91
+ return WardenUtils.stripWardenEntryToSummary(wd.entry);
92
+ });
93
+ return rval;
94
+ }
95
+ async removeEntry(userId) {
96
+ const tmp = await this.ddb.simpleDelete(this.options.tableName, { userId: userId });
97
+ return tmp.Attributes ? true : false;
98
+ }
99
+ async saveEntry(entry) {
100
+ let rval = await this.fetchInternalByUserId(entry.userId);
101
+ if (!rval) {
102
+ rval = {
103
+ userId: entry.userId,
104
+ entry: entry,
105
+ currentUserChallenges: [],
106
+ contactSearchString: (entry.contactMethods || []).map((cm) => WardenDynamoStorageProvider.contactToSearchString(cm)).join(' '),
107
+ };
108
+ }
109
+ rval.entry = entry;
110
+ const now = Date.now();
111
+ rval.entry.updatedEpochMS = now;
112
+ rval.entry.createdEpochMS = rval.entry.createdEpochMS || now;
113
+ const saved = await this.ddb.simplePut(this.options.tableName, rval);
114
+ Logger.silly('Saved %j', saved);
115
+ const postSaveLookup = await this.fetchInternalByUserId(entry.userId);
116
+ return postSaveLookup.entry;
117
+ }
118
+ async updateUserChallenge(userId, relyingPartyId, challenge) {
119
+ const rval = await this.fetchInternalByUserId(userId);
120
+ if (!rval) {
121
+ throw ErrorRatchet.fErr('Cannot update user challenge - no entry found for %s', userId);
122
+ }
123
+ rval.currentUserChallenges = (rval.currentUserChallenges || []).filter((c) => !c.startsWith(relyingPartyId));
124
+ const cuc = relyingPartyId + ':' + challenge;
125
+ rval.currentUserChallenges.push(cuc);
126
+ const saved = await this.ddb.simplePut(this.options.tableName, rval);
127
+ Logger.silly('Saved %j', saved);
128
+ return saved.Attributes ? true : false;
129
+ }
130
+ }
131
+ //# sourceMappingURL=warden-dynamo-storage-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"warden-dynamo-storage-provider.js","sourceRoot":"","sources":["../../../src/server/provider/warden-dynamo-storage-provider.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bitblit/ratchet-warden-server",
3
- "version": "5.1.609-alpha",
3
+ "version": "5.1.611-alpha",
4
4
  "description": "Typescript library to simplify using simplewebauthn and secondary auth methods over GraphQL",
5
5
  "sideEffects": false,
6
6
  "type": "module",
@@ -48,10 +48,10 @@
48
48
  "dependencies": {
49
49
  "@aws-sdk/client-s3": "3.743.0",
50
50
  "@aws-sdk/client-ses": "3.743.0",
51
- "@bitblit/ratchet-aws": "5.1.609-alpha",
52
- "@bitblit/ratchet-common": "5.1.609-alpha",
53
- "@bitblit/ratchet-node-only": "5.1.609-alpha",
54
- "@bitblit/ratchet-warden-common": "5.1.609-alpha",
51
+ "@bitblit/ratchet-aws": "5.1.611-alpha",
52
+ "@bitblit/ratchet-common": "5.1.611-alpha",
53
+ "@bitblit/ratchet-node-only": "5.1.611-alpha",
54
+ "@bitblit/ratchet-warden-common": "5.1.611-alpha",
55
55
  "@simplewebauthn/browser": "13.1.0",
56
56
  "@simplewebauthn/server": "13.1.1",
57
57
  "jsonwebtoken": "9.0.2"
@@ -59,9 +59,9 @@
59
59
  "peerDependencies": {
60
60
  "@aws-sdk/client-s3": "^3.743.0",
61
61
  "@aws-sdk/client-ses": "^3.743.0",
62
- "@bitblit/ratchet-aws": "5.1.609-alpha",
63
- "@bitblit/ratchet-common": "5.1.609-alpha",
64
- "@bitblit/ratchet-warden-common": "5.1.609-alpha",
62
+ "@bitblit/ratchet-aws": "5.1.611-alpha",
63
+ "@bitblit/ratchet-common": "5.1.611-alpha",
64
+ "@bitblit/ratchet-warden-common": "5.1.611-alpha",
65
65
  "@simplewebauthn/browser": "^13.1.0",
66
66
  "@simplewebauthn/server": "^13.1.1",
67
67
  "jsonwebtoken": "^9.0.2"