@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.
Files changed (63) hide show
  1. package/lib/build/index.d.ts +1 -0
  2. package/lib/build/index.js +2 -0
  3. package/lib/build/index.js.map +1 -0
  4. package/lib/build/ratchet-warden-server-info.d.ts +5 -0
  5. package/lib/build/ratchet-warden-server-info.js +15 -0
  6. package/lib/build/ratchet-warden-server-info.js.map +1 -0
  7. package/lib/server/index.d.ts +17 -0
  8. package/lib/server/index.js +18 -0
  9. package/lib/server/index.js.map +1 -0
  10. package/lib/server/provider/warden-default-send-magic-link-command-validator.d.ts +6 -0
  11. package/lib/server/provider/warden-default-send-magic-link-command-validator.js +14 -0
  12. package/lib/server/provider/warden-default-send-magic-link-command-validator.js.map +1 -0
  13. package/lib/server/provider/warden-default-user-decoration-provider.d.ts +7 -0
  14. package/lib/server/provider/warden-default-user-decoration-provider.js +12 -0
  15. package/lib/server/provider/warden-default-user-decoration-provider.js.map +1 -0
  16. package/lib/server/provider/warden-event-processing-provider.d.ts +5 -0
  17. package/lib/server/provider/warden-event-processing-provider.js +2 -0
  18. package/lib/server/provider/warden-event-processing-provider.js.map +1 -0
  19. package/lib/server/provider/warden-mailer-and-expiring-code-ratchet-single-use-code-provider.d.ts +22 -0
  20. package/lib/server/provider/warden-mailer-and-expiring-code-ratchet-single-use-code-provider.js +101 -0
  21. package/lib/server/provider/warden-mailer-and-expiring-code-ratchet-single-use-code-provider.js.map +1 -0
  22. package/lib/server/provider/warden-mailer-and-expiring-code-ratchet-single-user-provider-options.d.ts +8 -0
  23. package/lib/server/provider/warden-mailer-and-expiring-code-ratchet-single-user-provider-options.js +2 -0
  24. package/lib/server/provider/warden-mailer-and-expiring-code-ratchet-single-user-provider-options.js.map +1 -0
  25. package/lib/server/provider/warden-message-sending-provider.d.ts +8 -0
  26. package/lib/server/provider/warden-message-sending-provider.js +2 -0
  27. package/lib/server/provider/warden-message-sending-provider.js.map +1 -0
  28. package/lib/server/provider/warden-no-op-event-processing-provider.d.ts +6 -0
  29. package/lib/server/provider/warden-no-op-event-processing-provider.js +5 -0
  30. package/lib/server/provider/warden-no-op-event-processing-provider.js.map +1 -0
  31. package/lib/server/provider/warden-s3-single-file-storage-provider-options.d.ts +4 -0
  32. package/lib/server/provider/warden-s3-single-file-storage-provider-options.js +2 -0
  33. package/lib/server/provider/warden-s3-single-file-storage-provider-options.js.map +1 -0
  34. package/lib/server/provider/warden-s3-single-file-storage-provider.d.ts +31 -0
  35. package/lib/server/provider/warden-s3-single-file-storage-provider.js +91 -0
  36. package/lib/server/provider/warden-s3-single-file-storage-provider.js.map +1 -0
  37. package/lib/server/provider/warden-send-magic-link-command-validator.d.ts +5 -0
  38. package/lib/server/provider/warden-send-magic-link-command-validator.js +2 -0
  39. package/lib/server/provider/warden-send-magic-link-command-validator.js.map +1 -0
  40. package/lib/server/provider/warden-single-use-code-provider.d.ts +9 -0
  41. package/lib/server/provider/warden-single-use-code-provider.js +2 -0
  42. package/lib/server/provider/warden-single-use-code-provider.js.map +1 -0
  43. package/lib/server/provider/warden-storage-provider.d.ts +12 -0
  44. package/lib/server/provider/warden-storage-provider.js +2 -0
  45. package/lib/server/provider/warden-storage-provider.js.map +1 -0
  46. package/lib/server/provider/warden-twilio-verify-single-use-code-provider-options.d.ts +5 -0
  47. package/lib/server/provider/warden-twilio-verify-single-use-code-provider-options.js +2 -0
  48. package/lib/server/provider/warden-twilio-verify-single-use-code-provider-options.js.map +1 -0
  49. package/lib/server/provider/warden-twilio-verify-single-use-code-provider.d.ts +13 -0
  50. package/lib/server/provider/warden-twilio-verify-single-use-code-provider.js +32 -0
  51. package/lib/server/provider/warden-twilio-verify-single-use-code-provider.js.map +1 -0
  52. package/lib/server/provider/warden-user-decoration-provider.d.ts +5 -0
  53. package/lib/server/provider/warden-user-decoration-provider.js +2 -0
  54. package/lib/server/provider/warden-user-decoration-provider.js.map +1 -0
  55. package/lib/server/warden-service-options.d.ts +16 -0
  56. package/lib/server/warden-service-options.js +2 -0
  57. package/lib/server/warden-service-options.js.map +1 -0
  58. package/lib/server/warden-service.d.ts +35 -0
  59. package/lib/server/warden-service.js +518 -0
  60. package/lib/server/warden-service.js.map +1 -0
  61. package/package.json +17 -18
  62. package/lib/index.mjs +0 -2
  63. package/lib/types.d.ts +0 -168
@@ -0,0 +1 @@
1
+ export * from './ratchet-warden-server-info.js';
@@ -0,0 +1,2 @@
1
+ export * from './ratchet-warden-server-info.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/build/index.ts"],"names":[],"mappings":"AAIA,cAAc,iCAAiC,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { BuildInformation } from '@bitblit/ratchet-common/build/build-information';
2
+ export declare class RatchetWardenServerInfo {
3
+ private constructor();
4
+ static buildInformation(): BuildInformation;
5
+ }
@@ -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,5 @@
1
+ import { WardenEntry } from '@bitblit/ratchet-warden-common/common/model/warden-entry';
2
+ export interface WardenEventProcessingProvider {
3
+ userCreated(entry: WardenEntry): Promise<void>;
4
+ userRemoved(entry: WardenEntry): Promise<void>;
5
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=warden-event-processing-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"warden-event-processing-provider.js","sourceRoot":"","sources":["../../../src/server/provider/warden-event-processing-provider.ts"],"names":[],"mappings":""}
@@ -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
+ }
@@ -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
@@ -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":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,uCAAuC,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,4CAA4C,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AAO5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,iEAAiE,CAAC;AAEpG,OAAO,EAAE,yBAAyB,EAAE,MAAM,0EAA0E,CAAC;AAQrH,MAAM,OAAO,uDAAuD;IAaxD;IACA;IACA;IAdF,MAAM,CAAC,cAAc;QAC3B,MAAM,IAAI,GAAmE;YAC3E,mBAAmB,EAAE,SAAS;YAC9B,6BAA6B,EAAE,8BAA8B;YAC7D,4BAA4B,EAAE,SAAS;YACvC,yBAAyB,EAAE,2BAA2B;YACtD,wBAAwB,EAAE,SAAS;SACpC,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,YACU,MAAwB,EACxB,mBAAwC,EACxC,gBAAgF,uDAAuD,CAAC,cAAc,EAAE;QAFxJ,WAAM,GAAN,MAAM,CAAkB;QACxB,wBAAmB,GAAnB,mBAAmB,CAAqB;QACxC,kBAAa,GAAb,aAAa,CAA2I;IAC/J,CAAC;IACG,kBAAkB,CAAC,IAAuB;QAC/C,OAAO,IAAI,KAAK,iBAAiB,CAAC,YAAY,CAAC;IACjD,CAAC;IAEM,KAAK,CAAC,oBAAoB,CAAC,OAAsB,EAAE,gBAAwB;QAChF,IAAI,IAAI,GAAY,IAAI,CAAC;QACzB,MAAM,KAAK,GAAiB,MAAM,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC;YACvE,OAAO,EAAE,OAAO,CAAC,KAAK;YACtB,MAAM,EAAE,CAAC;YACT,QAAQ,EAAE,YAAY;YACtB,iBAAiB,EAAE,GAAG;YACtB,IAAI,EAAE,CAAC,OAAO,CAAC;SAChB,CAAC,CAAC;QACH,MAAM,GAAG,GAAQ,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,yBAAyB,CAAC,YAAY,EAAE;YACzF,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,gBAAgB,EAAE,gBAAgB;SACnC,CAAC,CAAC;QACH,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IACM,KAAK,CAAC,SAAS,CAAC,YAAoB,EAAE,IAAY;QACvD,MAAM,IAAI,GAAY,MAAM,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QACnF,OAAO,IAAI,CAAC;IACd,CAAC;IACM,KAAK,CAAC,0BAA0B,CACrC,YAA2B,EAC3B,gBAAwB,EACxB,UAAkB,EAClB,MAA+B,EAC/B,UAAmB,EACnB,kBAAkC,EAClC,cAA+C;QAE/C,IAAI,IAAI,GAAY,IAAI,CAAC;QACzB,MAAM,KAAK,GAAiB,MAAM,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC;YACvE,OAAO,EAAE,YAAY,CAAC,KAAK;YAC3B,MAAM,EAAE,EAAE;YACV,QAAQ,EAAE,aAAa,CAAC,gBAAgB;YACxC,iBAAiB,EAAE,UAAU;YAC7B,IAAI,EAAE,CAAC,WAAW,CAAC;SACpB,CAAC,CAAC;QAEH,MAAM,IAAI,GAAwB,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC;QAC7F,MAAM,WAAW,GAAW,aAAa,CAAC,sBAAsB,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QAE7E,MAAM,gBAAgB,GAAW,aAAa,CAAC,kBAAkB,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAEvI,MAAM,OAAO,GAA2B,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,IAAI,EAAE,EAAE;YACpE,UAAU,EAAE,gBAAgB;YAC5B,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,gBAAgB,EAAE,gBAAgB;SACnC,CAAC,CAAC;QAEH,MAAM,OAAO,GAA8B,cAAc,CAAC,CAAC,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,SAAS,CAAC;QACnI,MAAM,GAAG,GAAqB,MAAM,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,cAAc,CAAC,CAAC;QAC3H,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,KAAK,CAAC,aAAa,CACxB,OAAsB,EACtB,WAAsC,EACtC,OAA4B,EAC5B,kBAAkC,EAClC,cAA+C;QAE/C,MAAM,GAAG,GAAqB;YAC5B,oBAAoB,EAAE,CAAC,kBAAkB,EAAE,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC;YAClE,OAAO,EAAE,cAAc,EAAE,WAAW,IAAI,IAAI,CAAC,aAAa,CAAC,oBAAoB,IAAI,kBAAkB;SACtG,CAAC;QAEF,MAAM,CAAC,IAAI,CAAC,0EAA0E,EAAE,GAAG,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;QAEnH,IAAI,WAAW,KAAK,yBAAyB,CAAC,YAAY,EAAE,CAAC;YAC3D,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAC7B,GAAG,EACH,OAAO,EACP,IAAI,CAAC,aAAa,CAAC,6BAA6B,EAChD,IAAI,CAAC,aAAa,CAAC,4BAA4B,EAC/C,IAAI,CAAC,aAAa,CAAC,mBAAmB,CACvC,CAAC;QACJ,CAAC;aAAM,IAAI,WAAW,KAAK,yBAAyB,CAAC,SAAS,EAAE,CAAC;YAC/D,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAC7B,GAAG,EACH,OAAO,EACP,IAAI,CAAC,aAAa,CAAC,yBAAyB,EAC5C,IAAI,CAAC,aAAa,CAAC,wBAAwB,EAC3C,IAAI,CAAC,aAAa,CAAC,mBAAmB,CACvC,CAAC;QACJ,CAAC;aAAM,IAAI,WAAW,KAAK,yBAAyB,CAAC,MAAM,EAAE,CAAC;YAC5D,IAAI,CAAC,cAAc,EAAE,CAAC;gBACpB,MAAM,YAAY,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;YAClF,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,8BAA8B,EAAE,cAAc,CAAC,CAAC;YAC5D,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAC7B,GAAG,EACH,OAAO,EACP,cAAc,CAAC,WAAW,EAC1B,cAAc,CAAC,WAAW,EAC1B,cAAc,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC,CAAC,cAAc,CAAC,UAAU,CAC7G,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,YAAY,CAAC,IAAI,CAAC,2BAA2B,EAAE,WAAW,CAAC,CAAC;QACpE,CAAC;QAED,OAAO,GAAG,CAAC;IACb,CAAC;IAEM,KAAK,CAAC,WAAW,CAAC,OAAyB;QAChD,MAAM,IAAI,GAA8B,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAC7E,MAAM,CAAC,KAAK,CAAC,+BAA+B,EAAE,IAAI,CAAC,CAAC;QACpD,OAAO,CAAC,CAAC,IAAI,CAAC;IAChB,CAAC;CACF"}
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=warden-mailer-and-expiring-code-ratchet-single-user-provider-options.js.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=warden-message-sending-provider.js.map
@@ -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,5 @@
1
+ export class WardenNoOpEventProcessingProvider {
2
+ async userCreated(entry) { }
3
+ async userRemoved(entry) { }
4
+ }
5
+ //# sourceMappingURL=warden-no-op-event-processing-provider.js.map
@@ -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,4 @@
1
+ export interface WardenS3SingleFileStorageProviderOptions {
2
+ bucket: string;
3
+ dataFileKey: string;
4
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=warden-s3-single-file-storage-provider-options.js.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=warden-send-magic-link-command-validator.js.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=warden-single-use-code-provider.js.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=warden-storage-provider.js.map
@@ -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,5 @@
1
+ export interface WardenTwilioVerifySingleUseCodeProviderOptions {
2
+ accountSID: string;
3
+ authToken: string;
4
+ verifyServiceSID: string;
5
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=warden-twilio-verify-single-use-code-provider-options.js.map
@@ -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