@bitblit/ratchet-warden-server 4.0.420-alpha → 4.0.421-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.
- package/lib/build/index.d.ts +1 -0
- package/lib/build/index.js +2 -0
- package/lib/build/index.js.map +1 -0
- package/lib/build/ratchet-warden-server-info.d.ts +5 -0
- package/lib/build/ratchet-warden-server-info.js +15 -0
- package/lib/build/ratchet-warden-server-info.js.map +1 -0
- package/lib/server/index.d.ts +17 -0
- package/lib/server/index.js +18 -0
- package/lib/server/index.js.map +1 -0
- package/lib/server/provider/warden-default-send-magic-link-command-validator.d.ts +6 -0
- package/lib/server/provider/warden-default-send-magic-link-command-validator.js +14 -0
- package/lib/server/provider/warden-default-send-magic-link-command-validator.js.map +1 -0
- package/lib/server/provider/warden-default-user-decoration-provider.d.ts +7 -0
- package/lib/server/provider/warden-default-user-decoration-provider.js +12 -0
- package/lib/server/provider/warden-default-user-decoration-provider.js.map +1 -0
- package/lib/server/provider/warden-event-processing-provider.d.ts +5 -0
- package/lib/server/provider/warden-event-processing-provider.js +2 -0
- package/lib/server/provider/warden-event-processing-provider.js.map +1 -0
- package/lib/server/provider/warden-mailer-and-expiring-code-ratchet-single-use-code-provider.d.ts +22 -0
- package/lib/server/provider/warden-mailer-and-expiring-code-ratchet-single-use-code-provider.js +101 -0
- package/lib/server/provider/warden-mailer-and-expiring-code-ratchet-single-use-code-provider.js.map +1 -0
- package/lib/server/provider/warden-mailer-and-expiring-code-ratchet-single-user-provider-options.d.ts +8 -0
- package/lib/server/provider/warden-mailer-and-expiring-code-ratchet-single-user-provider-options.js +2 -0
- package/lib/server/provider/warden-mailer-and-expiring-code-ratchet-single-user-provider-options.js.map +1 -0
- package/lib/server/provider/warden-message-sending-provider.d.ts +8 -0
- package/lib/server/provider/warden-message-sending-provider.js +2 -0
- package/lib/server/provider/warden-message-sending-provider.js.map +1 -0
- package/lib/server/provider/warden-no-op-event-processing-provider.d.ts +6 -0
- package/lib/server/provider/warden-no-op-event-processing-provider.js +5 -0
- package/lib/server/provider/warden-no-op-event-processing-provider.js.map +1 -0
- package/lib/server/provider/warden-s3-single-file-storage-provider-options.d.ts +4 -0
- package/lib/server/provider/warden-s3-single-file-storage-provider-options.js +2 -0
- package/lib/server/provider/warden-s3-single-file-storage-provider-options.js.map +1 -0
- package/lib/server/provider/warden-s3-single-file-storage-provider.d.ts +31 -0
- package/lib/server/provider/warden-s3-single-file-storage-provider.js +91 -0
- package/lib/server/provider/warden-s3-single-file-storage-provider.js.map +1 -0
- package/lib/server/provider/warden-send-magic-link-command-validator.d.ts +5 -0
- package/lib/server/provider/warden-send-magic-link-command-validator.js +2 -0
- package/lib/server/provider/warden-send-magic-link-command-validator.js.map +1 -0
- package/lib/server/provider/warden-single-use-code-provider.d.ts +9 -0
- package/lib/server/provider/warden-single-use-code-provider.js +2 -0
- package/lib/server/provider/warden-single-use-code-provider.js.map +1 -0
- package/lib/server/provider/warden-storage-provider.d.ts +12 -0
- package/lib/server/provider/warden-storage-provider.js +2 -0
- package/lib/server/provider/warden-storage-provider.js.map +1 -0
- package/lib/server/provider/warden-twilio-verify-single-use-code-provider-options.d.ts +5 -0
- package/lib/server/provider/warden-twilio-verify-single-use-code-provider-options.js +2 -0
- package/lib/server/provider/warden-twilio-verify-single-use-code-provider-options.js.map +1 -0
- package/lib/server/provider/warden-twilio-verify-single-use-code-provider.d.ts +13 -0
- package/lib/server/provider/warden-twilio-verify-single-use-code-provider.js +32 -0
- package/lib/server/provider/warden-twilio-verify-single-use-code-provider.js.map +1 -0
- package/lib/server/provider/warden-user-decoration-provider.d.ts +5 -0
- package/lib/server/provider/warden-user-decoration-provider.js +2 -0
- package/lib/server/provider/warden-user-decoration-provider.js.map +1 -0
- package/lib/server/warden-service-options.d.ts +16 -0
- package/lib/server/warden-service-options.js +2 -0
- package/lib/server/warden-service-options.js.map +1 -0
- package/lib/server/warden-service.d.ts +35 -0
- package/lib/server/warden-service.js +518 -0
- package/lib/server/warden-service.js.map +1 -0
- package/package.json +17 -18
- package/lib/index.mjs +0 -2
- package/lib/types.d.ts +0 -168
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './ratchet-warden-server-info.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/build/index.ts"],"names":[],"mappings":"AAIA,cAAc,iCAAiC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export class RatchetWardenServerInfo {
|
|
2
|
+
constructor() { }
|
|
3
|
+
static buildInformation() {
|
|
4
|
+
const val = {
|
|
5
|
+
version: 'LOCAL-SNAPSHOT',
|
|
6
|
+
hash: 'LOCAL-HASH',
|
|
7
|
+
branch: 'LOCAL-BRANCH',
|
|
8
|
+
tag: 'LOCAL-TAG',
|
|
9
|
+
timeBuiltISO: 'LOCAL-TIME-ISO',
|
|
10
|
+
notes: 'LOCAL-NOTES',
|
|
11
|
+
};
|
|
12
|
+
return val;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=ratchet-warden-server-info.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ratchet-warden-server-info.js","sourceRoot":"","sources":["../../src/build/ratchet-warden-server-info.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,uBAAuB;IAGlC,gBAAuB,CAAC;IAEjB,MAAM,CAAC,gBAAgB;QAC5B,MAAM,GAAG,GAAqB;YAC5B,OAAO,EAAE,gBAAgB;YACzB,IAAI,EAAE,YAAY;YAClB,MAAM,EAAE,cAAc;YACtB,GAAG,EAAE,WAAW;YAChB,YAAY,EAAE,gBAAgB;YAC9B,KAAK,EAAE,aAAa;SACrB,CAAC;QACF,OAAO,GAAG,CAAC;IACb,CAAC;CACF"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export * from './warden-service-options.js';
|
|
2
|
+
export * from './warden-service.js';
|
|
3
|
+
export * from './provider/warden-default-send-magic-link-command-validator.js';
|
|
4
|
+
export * from './provider/warden-default-user-decoration-provider.js';
|
|
5
|
+
export * from './provider/warden-event-processing-provider.js';
|
|
6
|
+
export * from './provider/warden-mailer-and-expiring-code-ratchet-single-use-code-provider.js';
|
|
7
|
+
export * from './provider/warden-mailer-and-expiring-code-ratchet-single-user-provider-options.js';
|
|
8
|
+
export * from './provider/warden-message-sending-provider.js';
|
|
9
|
+
export * from './provider/warden-no-op-event-processing-provider.js';
|
|
10
|
+
export * from './provider/warden-s3-single-file-storage-provider-options.js';
|
|
11
|
+
export * from './provider/warden-s3-single-file-storage-provider.js';
|
|
12
|
+
export * from './provider/warden-send-magic-link-command-validator.js';
|
|
13
|
+
export * from './provider/warden-single-use-code-provider.js';
|
|
14
|
+
export * from './provider/warden-storage-provider.js';
|
|
15
|
+
export * from './provider/warden-twilio-verify-single-use-code-provider-options.js';
|
|
16
|
+
export * from './provider/warden-twilio-verify-single-use-code-provider.js';
|
|
17
|
+
export * from './provider/warden-user-decoration-provider.js';
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export * from './warden-service-options.js';
|
|
2
|
+
export * from './warden-service.js';
|
|
3
|
+
export * from './provider/warden-default-send-magic-link-command-validator.js';
|
|
4
|
+
export * from './provider/warden-default-user-decoration-provider.js';
|
|
5
|
+
export * from './provider/warden-event-processing-provider.js';
|
|
6
|
+
export * from './provider/warden-mailer-and-expiring-code-ratchet-single-use-code-provider.js';
|
|
7
|
+
export * from './provider/warden-mailer-and-expiring-code-ratchet-single-user-provider-options.js';
|
|
8
|
+
export * from './provider/warden-message-sending-provider.js';
|
|
9
|
+
export * from './provider/warden-no-op-event-processing-provider.js';
|
|
10
|
+
export * from './provider/warden-s3-single-file-storage-provider-options.js';
|
|
11
|
+
export * from './provider/warden-s3-single-file-storage-provider.js';
|
|
12
|
+
export * from './provider/warden-send-magic-link-command-validator.js';
|
|
13
|
+
export * from './provider/warden-single-use-code-provider.js';
|
|
14
|
+
export * from './provider/warden-storage-provider.js';
|
|
15
|
+
export * from './provider/warden-twilio-verify-single-use-code-provider-options.js';
|
|
16
|
+
export * from './provider/warden-twilio-verify-single-use-code-provider.js';
|
|
17
|
+
export * from './provider/warden-user-decoration-provider.js';
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAIA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qBAAqB,CAAC;AACpC,cAAc,gEAAgE,CAAC;AAC/E,cAAc,uDAAuD,CAAC;AACtE,cAAc,gDAAgD,CAAC;AAC/D,cAAc,gFAAgF,CAAC;AAC/F,cAAc,oFAAoF,CAAC;AACnG,cAAc,+CAA+C,CAAC;AAC9D,cAAc,sDAAsD,CAAC;AACrE,cAAc,8DAA8D,CAAC;AAC7E,cAAc,sDAAsD,CAAC;AACrE,cAAc,wDAAwD,CAAC;AACvE,cAAc,+CAA+C,CAAC;AAC9D,cAAc,uCAAuC,CAAC;AACtD,cAAc,qEAAqE,CAAC;AACpF,cAAc,6DAA6D,CAAC;AAC5E,cAAc,+CAA+C,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { WardenEntry } from '@bitblit/ratchet-warden-common/common/model/warden-entry';
|
|
2
|
+
import { SendMagicLink } from '@bitblit/ratchet-warden-common/common/command/send-magic-link';
|
|
3
|
+
import { WardenSendMagicLinkCommandValidator } from './warden-send-magic-link-command-validator.js';
|
|
4
|
+
export declare class WardenDefaultSendMagicLinkCommandValidator implements WardenSendMagicLinkCommandValidator {
|
|
5
|
+
allowMagicLinkCommand(cmd: SendMagicLink, origin: string, loggedInUser: WardenEntry): Promise<void>;
|
|
6
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export class WardenDefaultSendMagicLinkCommandValidator {
|
|
2
|
+
async allowMagicLinkCommand(cmd, origin, loggedInUser) {
|
|
3
|
+
if (!cmd) {
|
|
4
|
+
throw new Error('Cannot process null magic link');
|
|
5
|
+
}
|
|
6
|
+
if (cmd.ttlSeconds && cmd.ttlSeconds > 3600) {
|
|
7
|
+
throw new Error('TTL may not exceed 3600 seconds');
|
|
8
|
+
}
|
|
9
|
+
if (cmd.overrideDestinationContact) {
|
|
10
|
+
throw new Error('You may not specify an overrideDestinationContact');
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=warden-default-send-magic-link-command-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"warden-default-send-magic-link-command-validator.js","sourceRoot":"","sources":["../../../src/server/provider/warden-default-send-magic-link-command-validator.ts"],"names":[],"mappings":"AAQA,MAAM,OAAO,0CAA0C;IAC9C,KAAK,CAAC,qBAAqB,CAAC,GAAkB,EAAE,MAAc,EAAE,YAAyB;QAC9F,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QACD,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,GAAG,IAAI,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACrD,CAAC;QACD,IAAI,GAAG,CAAC,0BAA0B,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { WardenEntrySummary } from '@bitblit/ratchet-warden-common/common/model/warden-entry-summary';
|
|
2
|
+
import { WardenEntry } from '@bitblit/ratchet-warden-common/common/model/warden-entry';
|
|
3
|
+
import { WardenUserDecoration } from '@bitblit/ratchet-warden-common/common/model/warden-user-decoration';
|
|
4
|
+
import { WardenUserDecorationProvider } from './warden-user-decoration-provider.js';
|
|
5
|
+
export declare class WardenDefaultUserDecorationProvider implements WardenUserDecorationProvider<WardenEntrySummary> {
|
|
6
|
+
fetchDecoration(wardenUser: WardenEntry): Promise<WardenUserDecoration<WardenEntrySummary>>;
|
|
7
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { WardenUtils } from '@bitblit/ratchet-warden-common/common/util/warden-utils';
|
|
2
|
+
export class WardenDefaultUserDecorationProvider {
|
|
3
|
+
async fetchDecoration(wardenUser) {
|
|
4
|
+
const rval = {
|
|
5
|
+
userTokenData: WardenUtils.stripWardenEntryToSummary(wardenUser),
|
|
6
|
+
userTokenExpirationSeconds: 3600,
|
|
7
|
+
userTeamRoles: [{ team: 'WARDEN', role: 'USER' }],
|
|
8
|
+
};
|
|
9
|
+
return rval;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=warden-default-user-decoration-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"warden-default-user-decoration-provider.js","sourceRoot":"","sources":["../../../src/server/provider/warden-default-user-decoration-provider.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,WAAW,EAAE,MAAM,yDAAyD,CAAC;AAItF,MAAM,OAAO,mCAAmC;IACvC,KAAK,CAAC,eAAe,CAAC,UAAuB;QAElD,MAAM,IAAI,GAA6C;YACrD,aAAa,EAAE,WAAW,CAAC,yBAAyB,CAAC,UAAU,CAAC;YAChE,0BAA0B,EAAE,IAAI;YAChC,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;SAClD,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"warden-event-processing-provider.js","sourceRoot":"","sources":["../../../src/server/provider/warden-event-processing-provider.ts"],"names":[],"mappings":""}
|
package/lib/server/provider/warden-mailer-and-expiring-code-ratchet-single-use-code-provider.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { WardenSingleUseCodeProvider } from './warden-single-use-code-provider.js';
|
|
2
|
+
import { WardenMailerAndExpiringCodeRatchetSingleUseCodeProviderOptions } from './warden-mailer-and-expiring-code-ratchet-single-user-provider-options.js';
|
|
3
|
+
import { ExpiringCodeRatchet } from '@bitblit/ratchet-aws/expiring-code/expiring-code-ratchet';
|
|
4
|
+
import { Mailer } from '@bitblit/ratchet-common/mail/mailer';
|
|
5
|
+
import { ReadyToSendEmail } from '@bitblit/ratchet-common/mail/ready-to-send-email';
|
|
6
|
+
import { WardenContactType } from '@bitblit/ratchet-warden-common/common/model/warden-contact-type';
|
|
7
|
+
import { WardenContact } from '@bitblit/ratchet-warden-common/common/model/warden-contact';
|
|
8
|
+
import { WardenCustomerMessageType } from '@bitblit/ratchet-warden-common/common/model/warden-customer-message-type';
|
|
9
|
+
import { WardenCustomTemplateDescriptor } from '@bitblit/ratchet-warden-common/common/command/warden-custom-template-descriptor';
|
|
10
|
+
export declare class WardenMailerAndExpiringCodeRatchetSingleUseCodeProvider implements WardenSingleUseCodeProvider {
|
|
11
|
+
private mailer;
|
|
12
|
+
private expiringCodeRatchet;
|
|
13
|
+
private mailerOptions;
|
|
14
|
+
private static defaultOptions;
|
|
15
|
+
constructor(mailer: Mailer<any, any>, expiringCodeRatchet: ExpiringCodeRatchet, mailerOptions?: WardenMailerAndExpiringCodeRatchetSingleUseCodeProviderOptions);
|
|
16
|
+
handlesContactType(type: WardenContactType): boolean;
|
|
17
|
+
createAndSendNewCode(contact: WardenContact, relyingPartyName: string): Promise<boolean>;
|
|
18
|
+
checkCode(contactValue: string, code: string): Promise<boolean>;
|
|
19
|
+
createCodeAndSendMagicLink?(loginContact: WardenContact, relyingPartyName: string, landingUrl: string, metaIn?: Record<string, string>, ttlSeconds?: number, destinationContact?: WardenContact, customTemplate?: WardenCustomTemplateDescriptor): Promise<boolean>;
|
|
20
|
+
formatMessage(contact: WardenContact, messageType: WardenCustomerMessageType, context: Record<string, any>, destinationContact?: WardenContact, customTemplate?: WardenCustomTemplateDescriptor): Promise<ReadyToSendEmail>;
|
|
21
|
+
sendMessage(message: ReadyToSendEmail): Promise<boolean>;
|
|
22
|
+
}
|
package/lib/server/provider/warden-mailer-and-expiring-code-ratchet-single-use-code-provider.js
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { Logger } from '@bitblit/ratchet-common/logger/logger';
|
|
2
|
+
import { ErrorRatchet } from '@bitblit/ratchet-common/lang/error-ratchet';
|
|
3
|
+
import { StringRatchet } from '@bitblit/ratchet-common/lang/string-ratchet';
|
|
4
|
+
import { Base64Ratchet } from '@bitblit/ratchet-common/lang/base64-ratchet';
|
|
5
|
+
import { WardenContactType } from '@bitblit/ratchet-warden-common/common/model/warden-contact-type';
|
|
6
|
+
import { WardenCustomerMessageType } from '@bitblit/ratchet-warden-common/common/model/warden-customer-message-type';
|
|
7
|
+
export class WardenMailerAndExpiringCodeRatchetSingleUseCodeProvider {
|
|
8
|
+
mailer;
|
|
9
|
+
expiringCodeRatchet;
|
|
10
|
+
mailerOptions;
|
|
11
|
+
static defaultOptions() {
|
|
12
|
+
const rval = {
|
|
13
|
+
emailBaseLayoutName: undefined,
|
|
14
|
+
expiringTokenHtmlTemplateName: 'expiring-token-request-email',
|
|
15
|
+
expiringTokenTxtTemplateName: undefined,
|
|
16
|
+
magicLinkHtmlTemplateName: 'magic-token-request-email',
|
|
17
|
+
magicLinkTxtTemplateName: undefined,
|
|
18
|
+
};
|
|
19
|
+
return rval;
|
|
20
|
+
}
|
|
21
|
+
constructor(mailer, expiringCodeRatchet, mailerOptions = WardenMailerAndExpiringCodeRatchetSingleUseCodeProvider.defaultOptions()) {
|
|
22
|
+
this.mailer = mailer;
|
|
23
|
+
this.expiringCodeRatchet = expiringCodeRatchet;
|
|
24
|
+
this.mailerOptions = mailerOptions;
|
|
25
|
+
}
|
|
26
|
+
handlesContactType(type) {
|
|
27
|
+
return type === WardenContactType.EmailAddress;
|
|
28
|
+
}
|
|
29
|
+
async createAndSendNewCode(contact, relyingPartyName) {
|
|
30
|
+
let rval = null;
|
|
31
|
+
const token = await this.expiringCodeRatchet.createNewCode({
|
|
32
|
+
context: contact.value,
|
|
33
|
+
length: 6,
|
|
34
|
+
alphabet: '0123456789',
|
|
35
|
+
timeToLiveSeconds: 300,
|
|
36
|
+
tags: ['Login'],
|
|
37
|
+
});
|
|
38
|
+
const msg = await this.formatMessage(contact, WardenCustomerMessageType.ExpiringCode, {
|
|
39
|
+
code: token.code,
|
|
40
|
+
relyingPartyName: relyingPartyName,
|
|
41
|
+
});
|
|
42
|
+
rval = await this.sendMessage(msg);
|
|
43
|
+
return rval;
|
|
44
|
+
}
|
|
45
|
+
async checkCode(contactValue, code) {
|
|
46
|
+
const rval = await this.expiringCodeRatchet.checkCode(code, contactValue);
|
|
47
|
+
return rval;
|
|
48
|
+
}
|
|
49
|
+
async createCodeAndSendMagicLink(loginContact, relyingPartyName, landingUrl, metaIn, ttlSeconds, destinationContact, customTemplate) {
|
|
50
|
+
let rval = null;
|
|
51
|
+
const token = await this.expiringCodeRatchet.createNewCode({
|
|
52
|
+
context: loginContact.value,
|
|
53
|
+
length: 36,
|
|
54
|
+
alphabet: StringRatchet.UPPER_CASE_LATIN,
|
|
55
|
+
timeToLiveSeconds: ttlSeconds,
|
|
56
|
+
tags: ['MagicLink'],
|
|
57
|
+
});
|
|
58
|
+
const meta = Object.assign({}, metaIn || {}, { contact: loginContact });
|
|
59
|
+
const encodedMeta = Base64Ratchet.safeObjectToBase64JSON(meta || {});
|
|
60
|
+
const landingUrlFilled = StringRatchet.simpleTemplateFill(landingUrl, { CODE: token.code, META: encodedMeta }, true, '{', '}');
|
|
61
|
+
const context = Object.assign({}, meta || {}, {
|
|
62
|
+
landingUrl: landingUrlFilled,
|
|
63
|
+
code: token.code,
|
|
64
|
+
relyingPartyName: relyingPartyName,
|
|
65
|
+
});
|
|
66
|
+
const msgType = customTemplate ? WardenCustomerMessageType.Custom : WardenCustomerMessageType.MagicLink;
|
|
67
|
+
const msg = await this.formatMessage(loginContact, msgType, context, destinationContact, customTemplate);
|
|
68
|
+
rval = await this.sendMessage(msg);
|
|
69
|
+
return rval;
|
|
70
|
+
}
|
|
71
|
+
async formatMessage(contact, messageType, context, destinationContact, customTemplate) {
|
|
72
|
+
const rts = {
|
|
73
|
+
destinationAddresses: [destinationContact?.value || contact.value],
|
|
74
|
+
subject: customTemplate?.subjectLine || this.mailerOptions.magicLinkSubjectLine || 'Your login token',
|
|
75
|
+
};
|
|
76
|
+
Logger.info('Formatting Message for magic link, rts: %j, messageType: %s, context: %j', rts, messageType, context);
|
|
77
|
+
if (messageType === WardenCustomerMessageType.ExpiringCode) {
|
|
78
|
+
await this.mailer.fillEmailBody(rts, context, this.mailerOptions.expiringTokenHtmlTemplateName, this.mailerOptions.expiringTokenTxtTemplateName, this.mailerOptions.emailBaseLayoutName);
|
|
79
|
+
}
|
|
80
|
+
else if (messageType === WardenCustomerMessageType.MagicLink) {
|
|
81
|
+
await this.mailer.fillEmailBody(rts, context, this.mailerOptions.magicLinkHtmlTemplateName, this.mailerOptions.magicLinkTxtTemplateName, this.mailerOptions.emailBaseLayoutName);
|
|
82
|
+
}
|
|
83
|
+
else if (messageType === WardenCustomerMessageType.Custom) {
|
|
84
|
+
if (!customTemplate) {
|
|
85
|
+
throw ErrorRatchet.fErr('Cannot send custom message if customTemplate not set');
|
|
86
|
+
}
|
|
87
|
+
Logger.info('Sending custom template : %j', customTemplate);
|
|
88
|
+
await this.mailer.fillEmailBody(rts, context, customTemplate.htmlVersion, customTemplate.textVersion, customTemplate.baseLayout === 'DEFAULT' ? this.mailerOptions.emailBaseLayoutName : customTemplate.baseLayout);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
throw ErrorRatchet.fErr('No such message type : %s', messageType);
|
|
92
|
+
}
|
|
93
|
+
return rts;
|
|
94
|
+
}
|
|
95
|
+
async sendMessage(message) {
|
|
96
|
+
const rval = await this.mailer.sendEmail(message);
|
|
97
|
+
Logger.debug('SendRawEmailResponse was : %j', rval);
|
|
98
|
+
return !!rval;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=warden-mailer-and-expiring-code-ratchet-single-use-code-provider.js.map
|
package/lib/server/provider/warden-mailer-and-expiring-code-ratchet-single-use-code-provider.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"warden-mailer-and-expiring-code-ratchet-single-use-code-provider.js","sourceRoot":"","sources":["../../../src/server/provider/warden-mailer-and-expiring-code-ratchet-single-use-code-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export interface WardenMailerAndExpiringCodeRatchetSingleUseCodeProviderOptions {
|
|
2
|
+
emailBaseLayoutName?: string;
|
|
3
|
+
expiringTokenHtmlTemplateName: string;
|
|
4
|
+
expiringTokenTxtTemplateName?: string;
|
|
5
|
+
magicLinkHtmlTemplateName: string;
|
|
6
|
+
magicLinkTxtTemplateName?: string;
|
|
7
|
+
magicLinkSubjectLine?: string;
|
|
8
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"warden-mailer-and-expiring-code-ratchet-single-user-provider-options.js","sourceRoot":"","sources":["../../../src/server/provider/warden-mailer-and-expiring-code-ratchet-single-user-provider-options.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { WardenContactType } from '@bitblit/ratchet-warden-common/common/model/warden-contact-type';
|
|
2
|
+
import { WardenContact } from '@bitblit/ratchet-warden-common/common/model/warden-contact';
|
|
3
|
+
import { WardenCustomerMessageType } from '@bitblit/ratchet-warden-common/common/model/warden-customer-message-type';
|
|
4
|
+
export interface WardenMessageSendingProvider<T> {
|
|
5
|
+
handlesContactType(type: WardenContactType): boolean;
|
|
6
|
+
sendMessage(contact: WardenContact, message: T): Promise<boolean>;
|
|
7
|
+
formatMessage(contact: WardenContact, messageType: WardenCustomerMessageType, context: Record<string, any>): Promise<T>;
|
|
8
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"warden-message-sending-provider.js","sourceRoot":"","sources":["../../../src/server/provider/warden-message-sending-provider.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { WardenEntry } from '@bitblit/ratchet-warden-common/common/model/warden-entry';
|
|
2
|
+
import { WardenEventProcessingProvider } from './warden-event-processing-provider.js';
|
|
3
|
+
export declare class WardenNoOpEventProcessingProvider implements WardenEventProcessingProvider {
|
|
4
|
+
userCreated(entry: WardenEntry): Promise<void>;
|
|
5
|
+
userRemoved(entry: WardenEntry): Promise<void>;
|
|
6
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"warden-no-op-event-processing-provider.js","sourceRoot":"","sources":["../../../src/server/provider/warden-no-op-event-processing-provider.ts"],"names":[],"mappings":"AAMA,MAAM,OAAO,iCAAiC;IAErC,KAAK,CAAC,WAAW,CAAC,KAAkB,IAAkB,CAAC;IAEvD,KAAK,CAAC,WAAW,CAAC,KAAkB,IAAkB,CAAC;CAC/D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"warden-s3-single-file-storage-provider-options.js","sourceRoot":"","sources":["../../../src/server/provider/warden-s3-single-file-storage-provider-options.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { WardenContact } from '@bitblit/ratchet-warden-common/common/model/warden-contact';
|
|
2
|
+
import { WardenEntrySummary } from '@bitblit/ratchet-warden-common/common/model/warden-entry-summary';
|
|
3
|
+
import { WardenEntry } from '@bitblit/ratchet-warden-common/common/model/warden-entry';
|
|
4
|
+
import { WardenStorageProvider } from './warden-storage-provider.js';
|
|
5
|
+
import { WardenS3SingleFileStorageProviderOptions } from './warden-s3-single-file-storage-provider-options.js';
|
|
6
|
+
import { PutObjectOutput, S3Client } from '@aws-sdk/client-s3';
|
|
7
|
+
export declare class WardenS3SingleFileStorageProvider implements WardenStorageProvider {
|
|
8
|
+
private s3;
|
|
9
|
+
private options;
|
|
10
|
+
private ratchet;
|
|
11
|
+
constructor(s3: S3Client, options: WardenS3SingleFileStorageProviderOptions);
|
|
12
|
+
listUserSummaries(): Promise<WardenEntrySummary[]>;
|
|
13
|
+
fetchDataFile(): Promise<WardenS3SingleFileStorageProviderDataFile>;
|
|
14
|
+
storeDataFile(file: WardenS3SingleFileStorageProviderDataFile): Promise<PutObjectOutput>;
|
|
15
|
+
fetchCurrentUserChallenge(userId: string, relyingPartyId: string): Promise<string>;
|
|
16
|
+
findEntryByContact(contact: WardenContact): Promise<WardenEntry>;
|
|
17
|
+
findEntryById(userId: string): Promise<WardenEntry>;
|
|
18
|
+
removeEntry(userId: string): Promise<boolean>;
|
|
19
|
+
saveEntry(entry: WardenEntry): Promise<WardenEntry>;
|
|
20
|
+
updateUserChallenge(userId: string, relyingPartyId: string, challenge: string): Promise<boolean>;
|
|
21
|
+
}
|
|
22
|
+
export interface WardenS3SingleFileStorageProviderChallengeRecord {
|
|
23
|
+
userId: string;
|
|
24
|
+
relyingPartyId: string;
|
|
25
|
+
challenge: string;
|
|
26
|
+
updatedEpochMS: number;
|
|
27
|
+
}
|
|
28
|
+
export interface WardenS3SingleFileStorageProviderDataFile {
|
|
29
|
+
entries: WardenEntry[];
|
|
30
|
+
challenges: WardenS3SingleFileStorageProviderChallengeRecord[];
|
|
31
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { WardenUtils } from '@bitblit/ratchet-warden-common/common/util/warden-utils';
|
|
2
|
+
import { S3CacheRatchet } from '@bitblit/ratchet-aws/s3/s3-cache-ratchet';
|
|
3
|
+
import { ErrorRatchet } from '@bitblit/ratchet-common/lang/error-ratchet';
|
|
4
|
+
import { StringRatchet } from '@bitblit/ratchet-common/lang/string-ratchet';
|
|
5
|
+
export class WardenS3SingleFileStorageProvider {
|
|
6
|
+
s3;
|
|
7
|
+
options;
|
|
8
|
+
ratchet;
|
|
9
|
+
constructor(s3, options) {
|
|
10
|
+
this.s3 = s3;
|
|
11
|
+
this.options = options;
|
|
12
|
+
this.ratchet = new S3CacheRatchet(this.s3, this.options.bucket);
|
|
13
|
+
}
|
|
14
|
+
async listUserSummaries() {
|
|
15
|
+
const allData = (await this.fetchDataFile()).entries;
|
|
16
|
+
const rval = allData.map((d) => WardenUtils.stripWardenEntryToSummary(d));
|
|
17
|
+
return rval;
|
|
18
|
+
}
|
|
19
|
+
async fetchDataFile() {
|
|
20
|
+
let data = await this.ratchet.fetchCacheFileAsObject(this.options.dataFileKey);
|
|
21
|
+
data = data || {
|
|
22
|
+
entries: [],
|
|
23
|
+
challenges: [],
|
|
24
|
+
};
|
|
25
|
+
return data;
|
|
26
|
+
}
|
|
27
|
+
async storeDataFile(file) {
|
|
28
|
+
let rval = null;
|
|
29
|
+
if (file) {
|
|
30
|
+
rval = await this.ratchet.writeObjectToCacheFile(this.options.dataFileKey, file);
|
|
31
|
+
}
|
|
32
|
+
return rval;
|
|
33
|
+
}
|
|
34
|
+
async fetchCurrentUserChallenge(userId, relyingPartyId) {
|
|
35
|
+
const data = await this.fetchDataFile();
|
|
36
|
+
const entry = (data.challenges || []).find((d) => d.userId === userId && d.relyingPartyId === relyingPartyId);
|
|
37
|
+
if (!entry) {
|
|
38
|
+
ErrorRatchet.throwFormattedErr('fetchCurrentUserChallenge: Could not find user %s', userId);
|
|
39
|
+
}
|
|
40
|
+
return entry.challenge;
|
|
41
|
+
}
|
|
42
|
+
async findEntryByContact(contact) {
|
|
43
|
+
let rval = null;
|
|
44
|
+
if (contact?.type && StringRatchet.trimToNull(contact?.value)) {
|
|
45
|
+
const data = await this.fetchDataFile();
|
|
46
|
+
rval = (data.entries || []).find((d) => !!(d.contactMethods || []).find((x) => x.type === contact.type && x.value === contact.value));
|
|
47
|
+
}
|
|
48
|
+
return rval;
|
|
49
|
+
}
|
|
50
|
+
async findEntryById(userId) {
|
|
51
|
+
let rval = null;
|
|
52
|
+
if (StringRatchet.trimToNull(userId)) {
|
|
53
|
+
const data = await this.fetchDataFile();
|
|
54
|
+
rval = (data.entries || []).find((d) => d.userId === userId);
|
|
55
|
+
}
|
|
56
|
+
return rval;
|
|
57
|
+
}
|
|
58
|
+
async removeEntry(userId) {
|
|
59
|
+
const data = await this.fetchDataFile();
|
|
60
|
+
data.entries = (data.entries || []).filter((d) => d.userId !== userId);
|
|
61
|
+
await this.storeDataFile(data);
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
async saveEntry(entry) {
|
|
65
|
+
let rval = null;
|
|
66
|
+
if (entry && entry.userId) {
|
|
67
|
+
const now = Date.now();
|
|
68
|
+
entry.createdEpochMS = entry.createdEpochMS || now;
|
|
69
|
+
entry.updatedEpochMS = now;
|
|
70
|
+
const data = await this.fetchDataFile();
|
|
71
|
+
data.entries = (data.entries || []).filter((d) => d.userId !== entry.userId);
|
|
72
|
+
data.entries.push(entry);
|
|
73
|
+
await this.storeDataFile(data);
|
|
74
|
+
rval = await this.findEntryById(entry.userId);
|
|
75
|
+
}
|
|
76
|
+
return rval;
|
|
77
|
+
}
|
|
78
|
+
async updateUserChallenge(userId, relyingPartyId, challenge) {
|
|
79
|
+
const data = await this.fetchDataFile();
|
|
80
|
+
data.challenges = (data.challenges || []).filter((d) => d.userId !== userId || d.relyingPartyId !== relyingPartyId);
|
|
81
|
+
data.challenges.push({
|
|
82
|
+
userId: userId,
|
|
83
|
+
relyingPartyId: relyingPartyId,
|
|
84
|
+
challenge: challenge,
|
|
85
|
+
updatedEpochMS: Date.now(),
|
|
86
|
+
});
|
|
87
|
+
await this.storeDataFile(data);
|
|
88
|
+
return true;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=warden-s3-single-file-storage-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"warden-s3-single-file-storage-provider.js","sourceRoot":"","sources":["../../../src/server/provider/warden-s3-single-file-storage-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { WardenEntry } from '@bitblit/ratchet-warden-common/common/model/warden-entry';
|
|
2
|
+
import { SendMagicLink } from '@bitblit/ratchet-warden-common/common/command/send-magic-link';
|
|
3
|
+
export interface WardenSendMagicLinkCommandValidator {
|
|
4
|
+
allowMagicLinkCommand(cmd: SendMagicLink, origin: string, loggedInUser: WardenEntry): Promise<void>;
|
|
5
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"warden-send-magic-link-command-validator.js","sourceRoot":"","sources":["../../../src/server/provider/warden-send-magic-link-command-validator.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { WardenContactType } from '@bitblit/ratchet-warden-common/common/model/warden-contact-type';
|
|
2
|
+
import { WardenContact } from '@bitblit/ratchet-warden-common/common/model/warden-contact';
|
|
3
|
+
import { WardenCustomTemplateDescriptor } from '@bitblit/ratchet-warden-common/common/command/warden-custom-template-descriptor';
|
|
4
|
+
export interface WardenSingleUseCodeProvider {
|
|
5
|
+
handlesContactType(type: WardenContactType): boolean;
|
|
6
|
+
createAndSendNewCode(contact: WardenContact, relyingPartyName: string): Promise<boolean>;
|
|
7
|
+
checkCode(contactValue: string, code: string): Promise<boolean>;
|
|
8
|
+
createCodeAndSendMagicLink?(loginContact: WardenContact, relyingPartyName: string, landingUrl: string, metaIn?: Record<string, string>, ttlSeconds?: number, destinationContact?: WardenContact, customTemplate?: WardenCustomTemplateDescriptor): Promise<boolean>;
|
|
9
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"warden-single-use-code-provider.js","sourceRoot":"","sources":["../../../src/server/provider/warden-single-use-code-provider.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { WardenContact } from '@bitblit/ratchet-warden-common/common/model/warden-contact';
|
|
2
|
+
import { WardenEntrySummary } from '@bitblit/ratchet-warden-common/common/model/warden-entry-summary';
|
|
3
|
+
import { WardenEntry } from '@bitblit/ratchet-warden-common/common/model/warden-entry';
|
|
4
|
+
export interface WardenStorageProvider {
|
|
5
|
+
findEntryById(userId: string): Promise<WardenEntry>;
|
|
6
|
+
findEntryByContact(contact: WardenContact): Promise<WardenEntry>;
|
|
7
|
+
saveEntry(entry: WardenEntry): Promise<WardenEntry>;
|
|
8
|
+
removeEntry(userId: string): Promise<boolean>;
|
|
9
|
+
updateUserChallenge(userId: string, relyingPartyId: string, challenge: string): Promise<boolean>;
|
|
10
|
+
fetchCurrentUserChallenge(userId: string, relyingPartyId: string): Promise<string>;
|
|
11
|
+
listUserSummaries(): Promise<WardenEntrySummary[]>;
|
|
12
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"warden-storage-provider.js","sourceRoot":"","sources":["../../../src/server/provider/warden-storage-provider.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"warden-twilio-verify-single-use-code-provider-options.js","sourceRoot":"","sources":["../../../src/server/provider/warden-twilio-verify-single-use-code-provider-options.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { WardenTwilioVerifySingleUseCodeProviderOptions } from './warden-twilio-verify-single-use-code-provider-options.js';
|
|
2
|
+
import { WardenSingleUseCodeProvider } from './warden-single-use-code-provider.js';
|
|
3
|
+
import { WardenContactType } from '@bitblit/ratchet-warden-common/common/model/warden-contact-type';
|
|
4
|
+
import { WardenContact } from '@bitblit/ratchet-warden-common/common/model/warden-contact';
|
|
5
|
+
export declare class WardenTwilioVerifySingleUseCodeProvider implements WardenSingleUseCodeProvider {
|
|
6
|
+
private optsPromise;
|
|
7
|
+
private _cacheTwilioVerifyRatchet;
|
|
8
|
+
constructor(optsPromise: Promise<WardenTwilioVerifySingleUseCodeProviderOptions>);
|
|
9
|
+
private twilioVerifyRatchet;
|
|
10
|
+
handlesContactType(type: WardenContactType): boolean;
|
|
11
|
+
createAndSendNewCode(contact: WardenContact, relyingPartyNameIgnored: string): Promise<boolean>;
|
|
12
|
+
checkCode(contactValue: string, code: string): Promise<boolean>;
|
|
13
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Logger } from '@bitblit/ratchet-common/logger/logger';
|
|
2
|
+
import { TwilioVerifyRatchet } from '@bitblit/ratchet-common/third-party/twilio/twilio-verify-ratchet';
|
|
3
|
+
import { WardenContactType } from '@bitblit/ratchet-warden-common/common/model/warden-contact-type';
|
|
4
|
+
export class WardenTwilioVerifySingleUseCodeProvider {
|
|
5
|
+
optsPromise;
|
|
6
|
+
_cacheTwilioVerifyRatchet;
|
|
7
|
+
constructor(optsPromise) {
|
|
8
|
+
this.optsPromise = optsPromise;
|
|
9
|
+
}
|
|
10
|
+
async twilioVerifyRatchet() {
|
|
11
|
+
if (!this._cacheTwilioVerifyRatchet) {
|
|
12
|
+
const opts = await this.optsPromise;
|
|
13
|
+
this._cacheTwilioVerifyRatchet = new TwilioVerifyRatchet(opts.accountSID, opts.authToken, opts.verifyServiceSID);
|
|
14
|
+
}
|
|
15
|
+
return this._cacheTwilioVerifyRatchet;
|
|
16
|
+
}
|
|
17
|
+
handlesContactType(type) {
|
|
18
|
+
return type === WardenContactType.TextCapablePhoneNumber;
|
|
19
|
+
}
|
|
20
|
+
async createAndSendNewCode(contact, relyingPartyNameIgnored) {
|
|
21
|
+
const ratchet = await this.twilioVerifyRatchet();
|
|
22
|
+
const rval = await ratchet.sendVerificationTokenUsingTwilioVerify(contact.value);
|
|
23
|
+
Logger.debug('sendMessage was : %j', rval);
|
|
24
|
+
return !!rval;
|
|
25
|
+
}
|
|
26
|
+
async checkCode(contactValue, code) {
|
|
27
|
+
const ratchet = await this.twilioVerifyRatchet();
|
|
28
|
+
const rval = await ratchet.simpleCheckVerificationTokenUsingTwilioVerify(contactValue, code);
|
|
29
|
+
return rval;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=warden-twilio-verify-single-use-code-provider.js.map
|