quidproquo-webserver 0.1.25 → 0.1.26

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 (107) hide show
  1. package/lib/commonjs/actions/email/EmailActionType.d.ts +3 -1
  2. package/lib/commonjs/actions/email/EmailActionType.js +2 -0
  3. package/lib/commonjs/actions/email/EmailActionType.js.map +1 -1
  4. package/lib/commonjs/actions/email/EmailMessage.d.ts +36 -0
  5. package/lib/commonjs/actions/email/EmailMessage.js +3 -0
  6. package/lib/commonjs/actions/email/EmailMessage.js.map +1 -0
  7. package/lib/commonjs/actions/email/askEmailParse.d.ts +9 -0
  8. package/lib/commonjs/actions/email/askEmailParse.js +17 -0
  9. package/lib/commonjs/actions/email/askEmailParse.js.map +1 -0
  10. package/lib/commonjs/actions/email/askEmailReceivingHosts.d.ts +7 -0
  11. package/lib/commonjs/actions/email/askEmailReceivingHosts.js +15 -0
  12. package/lib/commonjs/actions/email/askEmailReceivingHosts.js.map +1 -0
  13. package/lib/commonjs/actions/email/index.d.ts +3 -0
  14. package/lib/commonjs/actions/email/index.js +3 -0
  15. package/lib/commonjs/actions/email/index.js.map +1 -1
  16. package/lib/commonjs/config/QPQConfig.d.ts +2 -0
  17. package/lib/commonjs/config/QPQConfig.js +2 -0
  18. package/lib/commonjs/config/QPQConfig.js.map +1 -1
  19. package/lib/commonjs/config/settings/emailReceiver.d.ts +23 -0
  20. package/lib/commonjs/config/settings/emailReceiver.js +48 -0
  21. package/lib/commonjs/config/settings/emailReceiver.js.map +1 -0
  22. package/lib/commonjs/config/settings/emailReceivingDomain.d.ts +11 -0
  23. package/lib/commonjs/config/settings/emailReceivingDomain.js +17 -0
  24. package/lib/commonjs/config/settings/emailReceivingDomain.js.map +1 -0
  25. package/lib/commonjs/config/settings/index.d.ts +2 -0
  26. package/lib/commonjs/config/settings/index.js +2 -0
  27. package/lib/commonjs/config/settings/index.js.map +1 -1
  28. package/lib/commonjs/services/emailReceiving/constants/emailReceivingGlobals.d.ts +1 -0
  29. package/lib/commonjs/services/emailReceiving/constants/emailReceivingGlobals.js +7 -0
  30. package/lib/commonjs/services/emailReceiving/constants/emailReceivingGlobals.js.map +1 -0
  31. package/lib/commonjs/services/emailReceiving/constants/index.d.ts +1 -0
  32. package/lib/commonjs/services/emailReceiving/constants/index.js +18 -0
  33. package/lib/commonjs/services/emailReceiving/constants/index.js.map +1 -0
  34. package/lib/commonjs/services/emailReceiving/entry/storageDrive/onCreate.d.ts +3 -0
  35. package/lib/commonjs/services/emailReceiving/entry/storageDrive/onCreate.js +19 -0
  36. package/lib/commonjs/services/emailReceiving/entry/storageDrive/onCreate.js.map +1 -0
  37. package/lib/commonjs/services/emailReceiving/index.d.ts +2 -0
  38. package/lib/commonjs/services/emailReceiving/index.js +19 -0
  39. package/lib/commonjs/services/emailReceiving/index.js.map +1 -0
  40. package/lib/commonjs/services/index.d.ts +1 -0
  41. package/lib/commonjs/services/index.js +1 -0
  42. package/lib/commonjs/services/index.js.map +1 -1
  43. package/lib/commonjs/types/EmailReceivedEvent.d.ts +6 -0
  44. package/lib/commonjs/types/EmailReceivedEvent.js +3 -0
  45. package/lib/commonjs/types/EmailReceivedEvent.js.map +1 -0
  46. package/lib/commonjs/types/StorageDriveEvent.d.ts +1 -0
  47. package/lib/commonjs/types/StorageDriveEvent.js.map +1 -1
  48. package/lib/commonjs/types/index.d.ts +1 -0
  49. package/lib/commonjs/types/index.js +1 -0
  50. package/lib/commonjs/types/index.js.map +1 -1
  51. package/lib/commonjs/utils/qpqConfigAccessorsUtils.d.ts +6 -1
  52. package/lib/commonjs/utils/qpqConfigAccessorsUtils.js +10 -1
  53. package/lib/commonjs/utils/qpqConfigAccessorsUtils.js.map +1 -1
  54. package/lib/esm/actions/email/EmailActionType.d.ts +3 -1
  55. package/lib/esm/actions/email/EmailActionType.js +2 -0
  56. package/lib/esm/actions/email/EmailActionType.js.map +1 -1
  57. package/lib/esm/actions/email/EmailMessage.d.ts +36 -0
  58. package/lib/esm/actions/email/EmailMessage.js +2 -0
  59. package/lib/esm/actions/email/EmailMessage.js.map +1 -0
  60. package/lib/esm/actions/email/askEmailParse.d.ts +9 -0
  61. package/lib/esm/actions/email/askEmailParse.js +14 -0
  62. package/lib/esm/actions/email/askEmailParse.js.map +1 -0
  63. package/lib/esm/actions/email/askEmailReceivingHosts.d.ts +7 -0
  64. package/lib/esm/actions/email/askEmailReceivingHosts.js +12 -0
  65. package/lib/esm/actions/email/askEmailReceivingHosts.js.map +1 -0
  66. package/lib/esm/actions/email/index.d.ts +3 -0
  67. package/lib/esm/actions/email/index.js +3 -0
  68. package/lib/esm/actions/email/index.js.map +1 -1
  69. package/lib/esm/config/QPQConfig.d.ts +2 -0
  70. package/lib/esm/config/QPQConfig.js +2 -0
  71. package/lib/esm/config/QPQConfig.js.map +1 -1
  72. package/lib/esm/config/settings/emailReceiver.d.ts +23 -0
  73. package/lib/esm/config/settings/emailReceiver.js +45 -0
  74. package/lib/esm/config/settings/emailReceiver.js.map +1 -0
  75. package/lib/esm/config/settings/emailReceivingDomain.d.ts +11 -0
  76. package/lib/esm/config/settings/emailReceivingDomain.js +13 -0
  77. package/lib/esm/config/settings/emailReceivingDomain.js.map +1 -0
  78. package/lib/esm/config/settings/index.d.ts +2 -0
  79. package/lib/esm/config/settings/index.js +2 -0
  80. package/lib/esm/config/settings/index.js.map +1 -1
  81. package/lib/esm/services/emailReceiving/constants/emailReceivingGlobals.d.ts +1 -0
  82. package/lib/esm/services/emailReceiving/constants/emailReceivingGlobals.js +4 -0
  83. package/lib/esm/services/emailReceiving/constants/emailReceivingGlobals.js.map +1 -0
  84. package/lib/esm/services/emailReceiving/constants/index.d.ts +1 -0
  85. package/lib/esm/services/emailReceiving/constants/index.js +2 -0
  86. package/lib/esm/services/emailReceiving/constants/index.js.map +1 -0
  87. package/lib/esm/services/emailReceiving/entry/storageDrive/onCreate.d.ts +3 -0
  88. package/lib/esm/services/emailReceiving/entry/storageDrive/onCreate.js +16 -0
  89. package/lib/esm/services/emailReceiving/entry/storageDrive/onCreate.js.map +1 -0
  90. package/lib/esm/services/emailReceiving/index.d.ts +2 -0
  91. package/lib/esm/services/emailReceiving/index.js +3 -0
  92. package/lib/esm/services/emailReceiving/index.js.map +1 -0
  93. package/lib/esm/services/index.d.ts +1 -0
  94. package/lib/esm/services/index.js +1 -0
  95. package/lib/esm/services/index.js.map +1 -1
  96. package/lib/esm/types/EmailReceivedEvent.d.ts +6 -0
  97. package/lib/esm/types/EmailReceivedEvent.js +2 -0
  98. package/lib/esm/types/EmailReceivedEvent.js.map +1 -0
  99. package/lib/esm/types/StorageDriveEvent.d.ts +1 -0
  100. package/lib/esm/types/StorageDriveEvent.js.map +1 -1
  101. package/lib/esm/types/index.d.ts +1 -0
  102. package/lib/esm/types/index.js +1 -0
  103. package/lib/esm/types/index.js.map +1 -1
  104. package/lib/esm/utils/qpqConfigAccessorsUtils.d.ts +6 -1
  105. package/lib/esm/utils/qpqConfigAccessorsUtils.js +5 -0
  106. package/lib/esm/utils/qpqConfigAccessorsUtils.js.map +1 -1
  107. package/package.json +3 -3
@@ -1,4 +1,6 @@
1
1
  export declare enum EmailActionType {
2
2
  SendEmail = "@quidproquo-webserver/Email/SendEmail",
3
- SetDeliveryStatus = "@quidproquo-webserver/Email/SetDeliveryStatus"
3
+ SetDeliveryStatus = "@quidproquo-webserver/Email/SetDeliveryStatus",
4
+ Parse = "@quidproquo-webserver/Email/Parse",
5
+ ReceivingHosts = "@quidproquo-webserver/Email/ReceivingHosts"
4
6
  }
@@ -5,5 +5,7 @@ var EmailActionType;
5
5
  (function (EmailActionType) {
6
6
  EmailActionType["SendEmail"] = "@quidproquo-webserver/Email/SendEmail";
7
7
  EmailActionType["SetDeliveryStatus"] = "@quidproquo-webserver/Email/SetDeliveryStatus";
8
+ EmailActionType["Parse"] = "@quidproquo-webserver/Email/Parse";
9
+ EmailActionType["ReceivingHosts"] = "@quidproquo-webserver/Email/ReceivingHosts";
8
10
  })(EmailActionType || (exports.EmailActionType = EmailActionType = {}));
9
11
  //# sourceMappingURL=EmailActionType.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"EmailActionType.js","sourceRoot":"","sources":["../../../../src/actions/email/EmailActionType.ts"],"names":[],"mappings":";;;AAAA,IAAY,eAGX;AAHD,WAAY,eAAe;IACzB,sEAAmD,CAAA;IACnD,sFAAmE,CAAA;AACrE,CAAC,EAHW,eAAe,+BAAf,eAAe,QAG1B","sourcesContent":["export enum EmailActionType {\n SendEmail = '@quidproquo-webserver/Email/SendEmail',\n SetDeliveryStatus = '@quidproquo-webserver/Email/SetDeliveryStatus',\n}\n"]}
1
+ {"version":3,"file":"EmailActionType.js","sourceRoot":"","sources":["../../../../src/actions/email/EmailActionType.ts"],"names":[],"mappings":";;;AAAA,IAAY,eAKX;AALD,WAAY,eAAe;IACzB,sEAAmD,CAAA;IACnD,sFAAmE,CAAA;IACnE,8DAA2C,CAAA;IAC3C,gFAA6D,CAAA;AAC/D,CAAC,EALW,eAAe,+BAAf,eAAe,QAK1B","sourcesContent":["export enum EmailActionType {\n SendEmail = '@quidproquo-webserver/Email/SendEmail',\n SetDeliveryStatus = '@quidproquo-webserver/Email/SetDeliveryStatus',\n Parse = '@quidproquo-webserver/Email/Parse',\n ReceivingHosts = '@quidproquo-webserver/Email/ReceivingHosts',\n}\n"]}
@@ -0,0 +1,36 @@
1
+ /** One mailbox in a parsed message header. */
2
+ export type EmailMessageAddress = {
3
+ address: string;
4
+ name?: string;
5
+ };
6
+ /** A file the message carried, decoded. */
7
+ export type EmailMessageAttachment = {
8
+ filename?: string;
9
+ mimeType: string;
10
+ base64Data: string;
11
+ };
12
+ /**
13
+ * The provider's verdicts on the message, from its Authentication-Results header. Each is the
14
+ * raw result token (`pass`, `fail`, `softfail`, `none`, ...) or absent when the provider gave
15
+ * none. `from` is what the sender claims; these are the only evidence for who actually sent it.
16
+ */
17
+ export type EmailMessageAuthentication = {
18
+ spf?: string;
19
+ dkim?: string;
20
+ dmarc?: string;
21
+ };
22
+ /** A received message as askEmailParse returns it. */
23
+ export type EmailMessage = {
24
+ recipients: string[];
25
+ from: EmailMessageAddress[];
26
+ to: EmailMessageAddress[];
27
+ cc: EmailMessageAddress[];
28
+ replyTo: EmailMessageAddress[];
29
+ subject: string;
30
+ text?: string;
31
+ html?: string;
32
+ messageId?: string;
33
+ date?: string;
34
+ attachments: EmailMessageAttachment[];
35
+ authentication: EmailMessageAuthentication;
36
+ };
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=EmailMessage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EmailMessage.js","sourceRoot":"","sources":["../../../../src/actions/email/EmailMessage.ts"],"names":[],"mappings":"","sourcesContent":["/** One mailbox in a parsed message header. */\nexport type EmailMessageAddress = {\n address: string;\n name?: string;\n};\n\n/** A file the message carried, decoded. */\nexport type EmailMessageAttachment = {\n filename?: string;\n mimeType: string;\n base64Data: string;\n};\n\n/**\n * The provider's verdicts on the message, from its Authentication-Results header. Each is the\n * raw result token (`pass`, `fail`, `softfail`, `none`, ...) or absent when the provider gave\n * none. `from` is what the sender claims; these are the only evidence for who actually sent it.\n */\nexport type EmailMessageAuthentication = {\n spf?: string;\n dkim?: string;\n dmarc?: string;\n};\n\n/** A received message as askEmailParse returns it. */\nexport type EmailMessage = {\n // The addresses the provider delivered to (Delivered-To / X-Original-To), lower-cased.\n // A per-inbox lookup keys on these: the `to` header can name addresses this app never saw.\n recipients: string[];\n\n from: EmailMessageAddress[];\n to: EmailMessageAddress[];\n cc: EmailMessageAddress[];\n replyTo: EmailMessageAddress[];\n\n subject: string;\n text?: string;\n html?: string;\n\n messageId?: string;\n date?: string;\n attachments: EmailMessageAttachment[];\n\n authentication: EmailMessageAuthentication;\n};\n"]}
@@ -0,0 +1,9 @@
1
+ import { EmailActionType } from './EmailActionType';
2
+ import { EmailMessage } from './EmailMessage';
3
+ /**
4
+ * Parse a raw MIME message (base64, as askFileReadBinaryContents returns an object a
5
+ * defineEmailReceiver wrote) into an EmailMessage. Pure on every platform.
6
+ */
7
+ export declare const askEmailParse: import("quidproquo-core").ActionRequesterFunction<EmailActionType.Parse, [rawBase64: string], {
8
+ rawBase64: string;
9
+ }, EmailMessage, "Invalid">;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.askEmailParse = void 0;
4
+ const quidproquo_core_1 = require("quidproquo-core");
5
+ const EmailActionType_1 = require("./EmailActionType");
6
+ /**
7
+ * Parse a raw MIME message (base64, as askFileReadBinaryContents returns an object a
8
+ * defineEmailReceiver wrote) into an EmailMessage. Pure on every platform.
9
+ */
10
+ exports.askEmailParse = (0, quidproquo_core_1.createActionRequester)()({
11
+ actionType: EmailActionType_1.EmailActionType.Parse,
12
+ errorTypes: [
13
+ 'Invalid', // the bytes are not a MIME message
14
+ ],
15
+ getPayload: (rawBase64) => ({ rawBase64 }),
16
+ });
17
+ //# sourceMappingURL=askEmailParse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"askEmailParse.js","sourceRoot":"","sources":["../../../../src/actions/email/askEmailParse.ts"],"names":[],"mappings":";;;AAAA,qDAAwD;AAExD,uDAAoD;AAGpD;;;GAGG;AACU,QAAA,aAAa,GAAG,IAAA,uCAAqB,GAAgB,CAAC;IACjE,UAAU,EAAE,iCAAe,CAAC,KAAK;IACjC,UAAU,EAAE;QACV,SAAS,EAAE,mCAAmC;KAC/C;IACD,UAAU,EAAE,CAAC,SAAiB,EAAE,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC;CACnD,CAAC,CAAC","sourcesContent":["import { createActionRequester } from 'quidproquo-core';\n\nimport { EmailActionType } from './EmailActionType';\nimport { EmailMessage } from './EmailMessage';\n\n/**\n * Parse a raw MIME message (base64, as askFileReadBinaryContents returns an object a\n * defineEmailReceiver wrote) into an EmailMessage. Pure on every platform.\n */\nexport const askEmailParse = createActionRequester<EmailMessage>()({\n actionType: EmailActionType.Parse,\n errorTypes: [\n 'Invalid', // the bytes are not a MIME message\n ],\n getPayload: (rawBase64: string) => ({ rawBase64 }),\n});\n"]}
@@ -0,0 +1,7 @@
1
+ import { EmailActionType } from './EmailActionType';
2
+ /**
3
+ * The app's receiving hosts (defineEmailReceivingDomain resolved on every root, primary first),
4
+ * so a story can show a full address for a local part. Empty when the app declares no
5
+ * receiving domain.
6
+ */
7
+ export declare const askEmailReceivingHosts: import("quidproquo-core").ActionRequesterFunction<EmailActionType.ReceivingHosts, [], {}, string[], never>;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.askEmailReceivingHosts = void 0;
4
+ const quidproquo_core_1 = require("quidproquo-core");
5
+ const EmailActionType_1 = require("./EmailActionType");
6
+ /**
7
+ * The app's receiving hosts (defineEmailReceivingDomain resolved on every root, primary first),
8
+ * so a story can show a full address for a local part. Empty when the app declares no
9
+ * receiving domain.
10
+ */
11
+ exports.askEmailReceivingHosts = (0, quidproquo_core_1.createActionRequester)()({
12
+ actionType: EmailActionType_1.EmailActionType.ReceivingHosts,
13
+ getPayload: () => ({}),
14
+ });
15
+ //# sourceMappingURL=askEmailReceivingHosts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"askEmailReceivingHosts.js","sourceRoot":"","sources":["../../../../src/actions/email/askEmailReceivingHosts.ts"],"names":[],"mappings":";;;AAAA,qDAAwD;AAExD,uDAAoD;AAEpD;;;;GAIG;AACU,QAAA,sBAAsB,GAAG,IAAA,uCAAqB,GAAY,CAAC;IACtE,UAAU,EAAE,iCAAe,CAAC,cAAc;IAC1C,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;CACvB,CAAC,CAAC","sourcesContent":["import { createActionRequester } from 'quidproquo-core';\n\nimport { EmailActionType } from './EmailActionType';\n\n/**\n * The app's receiving hosts (defineEmailReceivingDomain resolved on every root, primary first),\n * so a story can show a full address for a local part. Empty when the app declares no\n * receiving domain.\n */\nexport const askEmailReceivingHosts = createActionRequester<string[]>()({\n actionType: EmailActionType.ReceivingHosts,\n getPayload: () => ({}),\n});\n"]}
@@ -1,4 +1,7 @@
1
+ export * from './askEmailParse';
2
+ export * from './askEmailReceivingHosts';
1
3
  export * from './askEmailSendEmail';
2
4
  export * from './askEmailSetDeliveryStatus';
3
5
  export * from './EmailActionType';
4
6
  export * from './EmailDeliveryStatus';
7
+ export * from './EmailMessage';
@@ -14,8 +14,11 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./askEmailParse"), exports);
18
+ __exportStar(require("./askEmailReceivingHosts"), exports);
17
19
  __exportStar(require("./askEmailSendEmail"), exports);
18
20
  __exportStar(require("./askEmailSetDeliveryStatus"), exports);
19
21
  __exportStar(require("./EmailActionType"), exports);
20
22
  __exportStar(require("./EmailDeliveryStatus"), exports);
23
+ __exportStar(require("./EmailMessage"), exports);
21
24
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/actions/email/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,sDAAoC;AACpC,8DAA4C;AAC5C,oDAAkC;AAClC,wDAAsC","sourcesContent":["export * from './askEmailSendEmail';\nexport * from './askEmailSetDeliveryStatus';\nexport * from './EmailActionType';\nexport * from './EmailDeliveryStatus';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/actions/email/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAAgC;AAChC,2DAAyC;AACzC,sDAAoC;AACpC,8DAA4C;AAC5C,oDAAkC;AAClC,wDAAsC;AACtC,iDAA+B","sourcesContent":["export * from './askEmailParse';\nexport * from './askEmailReceivingHosts';\nexport * from './askEmailSendEmail';\nexport * from './askEmailSetDeliveryStatus';\nexport * from './EmailActionType';\nexport * from './EmailDeliveryStatus';\nexport * from './EmailMessage';\n"]}
@@ -3,6 +3,8 @@ export declare enum QPQWebServerConfigSettingType {
3
3
  DefaultRouteOptions = "@quidproquo-webserver/config/DefaultRouteOptions",
4
4
  Dns = "@quidproquo-webserver/config/Dns",
5
5
  EmailSender = "@quidproquo-webserver/config/EmailSender",
6
+ EmailReceivingDomain = "@quidproquo-webserver/config/EmailReceivingDomain",
7
+ EmailReceiver = "@quidproquo-webserver/config/EmailReceiver",
6
8
  Seo = "@quidproquo-webserver/config/Seo",
7
9
  SubdomainRedirect = "@quidproquo-webserver/config/SubdomainRedirect",
8
10
  WebEntry = "@quidproquo-webserver/config/WebEntry",
@@ -7,6 +7,8 @@ var QPQWebServerConfigSettingType;
7
7
  QPQWebServerConfigSettingType["DefaultRouteOptions"] = "@quidproquo-webserver/config/DefaultRouteOptions";
8
8
  QPQWebServerConfigSettingType["Dns"] = "@quidproquo-webserver/config/Dns";
9
9
  QPQWebServerConfigSettingType["EmailSender"] = "@quidproquo-webserver/config/EmailSender";
10
+ QPQWebServerConfigSettingType["EmailReceivingDomain"] = "@quidproquo-webserver/config/EmailReceivingDomain";
11
+ QPQWebServerConfigSettingType["EmailReceiver"] = "@quidproquo-webserver/config/EmailReceiver";
10
12
  QPQWebServerConfigSettingType["Seo"] = "@quidproquo-webserver/config/Seo";
11
13
  QPQWebServerConfigSettingType["SubdomainRedirect"] = "@quidproquo-webserver/config/SubdomainRedirect";
12
14
  QPQWebServerConfigSettingType["WebEntry"] = "@quidproquo-webserver/config/WebEntry";
@@ -1 +1 @@
1
- {"version":3,"file":"QPQConfig.js","sourceRoot":"","sources":["../../../src/config/QPQConfig.ts"],"names":[],"mappings":";;;AAAA,IAAY,6BAiBX;AAjBD,WAAY,6BAA6B;IACvC,6EAA4C,CAAA;IAC5C,yGAAwE,CAAA;IACxE,yEAAwC,CAAA;IACxC,yFAAwD,CAAA;IACxD,yEAAwC,CAAA;IACxC,qGAAoE,CAAA;IACpE,mFAAkD,CAAA;IAClD,yEAAwC,CAAA;IACxC,+EAA8C,CAAA;IAC9C,iGAAgE,CAAA;IAChE,qFAAoD,CAAA;IACpD,6EAA4C,CAAA;IAC5C,yFAAwD,CAAA;IACxD,yFAAwD,CAAA;IACxD,mHAAkF,CAAA;IAClF,uGAAsE,CAAA;AACxE,CAAC,EAjBW,6BAA6B,6CAA7B,6BAA6B,QAiBxC","sourcesContent":["export enum QPQWebServerConfigSettingType {\n Route = '@quidproquo-webserver/config/Route',\n DefaultRouteOptions = '@quidproquo-webserver/config/DefaultRouteOptions',\n Dns = '@quidproquo-webserver/config/Dns',\n EmailSender = '@quidproquo-webserver/config/EmailSender',\n Seo = '@quidproquo-webserver/config/Seo',\n SubdomainRedirect = '@quidproquo-webserver/config/SubdomainRedirect',\n WebEntry = '@quidproquo-webserver/config/WebEntry',\n Api = '@quidproquo-webserver/config/Api',\n ApiKey = '@quidproquo-webserver/config/ApiKey',\n ServiceFunction = '@quidproquo-webserver/config/ServiceFunction',\n WebSocket = '@quidproquo-webserver/config/WebSocket',\n Cache = '@quidproquo-webserver/config/Cache',\n Certificate = '@quidproquo-webserver/config/Certificate',\n DomainProxy = '@quidproquo-webserver/config/DomainProxy',\n StorageDriveCorsSettings = '@quidproquo-webserver/config/StorageDriveCorsSettings',\n FileUploadSettings = '@quidproquo-webserver/config/FileUploadSettings',\n}\n\n// TODO: move this somewhere better\nexport interface CacheSettings {\n minTTLInSeconds: number;\n maxTTLInSeconds: number;\n defaultTTLInSeconds: number;\n mustRevalidate: boolean;\n}\n"]}
1
+ {"version":3,"file":"QPQConfig.js","sourceRoot":"","sources":["../../../src/config/QPQConfig.ts"],"names":[],"mappings":";;;AAAA,IAAY,6BAmBX;AAnBD,WAAY,6BAA6B;IACvC,6EAA4C,CAAA;IAC5C,yGAAwE,CAAA;IACxE,yEAAwC,CAAA;IACxC,yFAAwD,CAAA;IACxD,2GAA0E,CAAA;IAC1E,6FAA4D,CAAA;IAC5D,yEAAwC,CAAA;IACxC,qGAAoE,CAAA;IACpE,mFAAkD,CAAA;IAClD,yEAAwC,CAAA;IACxC,+EAA8C,CAAA;IAC9C,iGAAgE,CAAA;IAChE,qFAAoD,CAAA;IACpD,6EAA4C,CAAA;IAC5C,yFAAwD,CAAA;IACxD,yFAAwD,CAAA;IACxD,mHAAkF,CAAA;IAClF,uGAAsE,CAAA;AACxE,CAAC,EAnBW,6BAA6B,6CAA7B,6BAA6B,QAmBxC","sourcesContent":["export enum QPQWebServerConfigSettingType {\n Route = '@quidproquo-webserver/config/Route',\n DefaultRouteOptions = '@quidproquo-webserver/config/DefaultRouteOptions',\n Dns = '@quidproquo-webserver/config/Dns',\n EmailSender = '@quidproquo-webserver/config/EmailSender',\n EmailReceivingDomain = '@quidproquo-webserver/config/EmailReceivingDomain',\n EmailReceiver = '@quidproquo-webserver/config/EmailReceiver',\n Seo = '@quidproquo-webserver/config/Seo',\n SubdomainRedirect = '@quidproquo-webserver/config/SubdomainRedirect',\n WebEntry = '@quidproquo-webserver/config/WebEntry',\n Api = '@quidproquo-webserver/config/Api',\n ApiKey = '@quidproquo-webserver/config/ApiKey',\n ServiceFunction = '@quidproquo-webserver/config/ServiceFunction',\n WebSocket = '@quidproquo-webserver/config/WebSocket',\n Cache = '@quidproquo-webserver/config/Cache',\n Certificate = '@quidproquo-webserver/config/Certificate',\n DomainProxy = '@quidproquo-webserver/config/DomainProxy',\n StorageDriveCorsSettings = '@quidproquo-webserver/config/StorageDriveCorsSettings',\n FileUploadSettings = '@quidproquo-webserver/config/FileUploadSettings',\n}\n\n// TODO: move this somewhere better\nexport interface CacheSettings {\n minTTLInSeconds: number;\n maxTTLInSeconds: number;\n defaultTTLInSeconds: number;\n mustRevalidate: boolean;\n}\n"]}
@@ -0,0 +1,23 @@
1
+ import { QPQConfig, QPQConfigSetting, QpqFunctionRuntime } from 'quidproquo-core';
2
+ export interface EmailReceiverQPQWebServerConfigSetting extends QPQConfigSetting {
3
+ name: string;
4
+ storageDriveName: string;
5
+ onEmailFunctionName: string;
6
+ }
7
+ export type EmailReceiverOptions = {
8
+ onEmail: QpqFunctionRuntime;
9
+ };
10
+ /** The drive a receiver's raw messages land in. Framework-owned: the api never names it. */
11
+ export declare const emailReceiverStorageDriveName: (name: string) => string;
12
+ /** The inline function a receiver's onEmail is registered as. */
13
+ export declare const emailReceiverOnEmailFunctionName: (name: string) => string;
14
+ /**
15
+ * Receive mail sent to any address at the app's receiving domain (defineEmailReceivingDomain).
16
+ * Every message runs `onEmail` with an EmailReceivedEvent carrying the parsed message: who it
17
+ * is from, who it was delivered to, subject, bodies, attachments and the provider's SPF/DKIM
18
+ * verdicts. The transport (a drive the
19
+ * provider writes raw messages into, a create handler that parses them) is the receiver's own.
20
+ * A throwing handler loses that message after the platform's retries; catch inside it to do
21
+ * otherwise. Deployed platforms only; the dev server does not receive mail.
22
+ */
23
+ export declare const defineEmailReceiver: (name: string, options: EmailReceiverOptions) => QPQConfig;
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.defineEmailReceiver = exports.emailReceiverOnEmailFunctionName = exports.emailReceiverStorageDriveName = void 0;
4
+ const quidproquo_core_1 = require("quidproquo-core");
5
+ const emailReceivingGlobals_1 = require("../../services/emailReceiving/constants/emailReceivingGlobals");
6
+ const getServiceEntryQpqFunctionRuntime_1 = require("../../services/getServiceEntryQpqFunctionRuntime");
7
+ const QPQConfig_1 = require("../QPQConfig");
8
+ /** The drive a receiver's raw messages land in. Framework-owned: the api never names it. */
9
+ const emailReceiverStorageDriveName = (name) => `email-${name}`;
10
+ exports.emailReceiverStorageDriveName = emailReceiverStorageDriveName;
11
+ /** The inline function a receiver's onEmail is registered as. */
12
+ const emailReceiverOnEmailFunctionName = (name) => `qpq-email-receiver-${name}`;
13
+ exports.emailReceiverOnEmailFunctionName = emailReceiverOnEmailFunctionName;
14
+ // A handled message is deleted by the create handler seconds after it lands; the lifecycle
15
+ // rule only sweeps up the ones a failing handler left behind.
16
+ const UNHANDLED_RETENTION_DAYS = 1;
17
+ /**
18
+ * Receive mail sent to any address at the app's receiving domain (defineEmailReceivingDomain).
19
+ * Every message runs `onEmail` with an EmailReceivedEvent carrying the parsed message: who it
20
+ * is from, who it was delivered to, subject, bodies, attachments and the provider's SPF/DKIM
21
+ * verdicts. The transport (a drive the
22
+ * provider writes raw messages into, a create handler that parses them) is the receiver's own.
23
+ * A throwing handler loses that message after the platform's retries; catch inside it to do
24
+ * otherwise. Deployed platforms only; the dev server does not receive mail.
25
+ */
26
+ const defineEmailReceiver = (name, options) => {
27
+ const storageDriveName = (0, exports.emailReceiverStorageDriveName)(name);
28
+ const onEmailFunctionName = (0, exports.emailReceiverOnEmailFunctionName)(name);
29
+ const receiver = {
30
+ configSettingType: QPQConfig_1.QPQWebServerConfigSettingType.EmailReceiver,
31
+ uniqueKey: `emailReceiver-${name}`,
32
+ name,
33
+ storageDriveName,
34
+ onEmailFunctionName,
35
+ };
36
+ return [
37
+ receiver,
38
+ (0, quidproquo_core_1.defineInlineFunction)(options.onEmail, { functionName: onEmailFunctionName }),
39
+ (0, quidproquo_core_1.defineStorageDrive)(storageDriveName, {
40
+ lifecycleRules: [{ deleteAfterDays: UNHANDLED_RETENTION_DAYS }],
41
+ onEvent: {
42
+ create: Object.assign(Object.assign({}, (0, getServiceEntryQpqFunctionRuntime_1.getServiceEntryQpqFunctionRuntime)('emailReceiving', 'storageDrive', 'onCreate::onCreate')), { globals: { [emailReceivingGlobals_1.EMAIL_RECEIVER_ON_EMAIL_GLOBAL]: onEmailFunctionName } }),
43
+ },
44
+ }),
45
+ ];
46
+ };
47
+ exports.defineEmailReceiver = defineEmailReceiver;
48
+ //# sourceMappingURL=emailReceiver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emailReceiver.js","sourceRoot":"","sources":["../../../../src/config/settings/emailReceiver.ts"],"names":[],"mappings":";;;AAAA,qDAA4H;AAE5H,yGAA+G;AAC/G,wGAAqG;AACrG,4CAA6D;AAc7D,4FAA4F;AACrF,MAAM,6BAA6B,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC;AAA1E,QAAA,6BAA6B,iCAA6C;AAEvF,iEAAiE;AAC1D,MAAM,gCAAgC,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,sBAAsB,IAAI,EAAE,CAAC;AAA1F,QAAA,gCAAgC,oCAA0D;AAEvG,2FAA2F;AAC3F,8DAA8D;AAC9D,MAAM,wBAAwB,GAAG,CAAC,CAAC;AAEnC;;;;;;;;GAQG;AACI,MAAM,mBAAmB,GAAG,CAAC,IAAY,EAAE,OAA6B,EAAa,EAAE;IAC5F,MAAM,gBAAgB,GAAG,IAAA,qCAA6B,EAAC,IAAI,CAAC,CAAC;IAC7D,MAAM,mBAAmB,GAAG,IAAA,wCAAgC,EAAC,IAAI,CAAC,CAAC;IAEnE,MAAM,QAAQ,GAA2C;QACvD,iBAAiB,EAAE,yCAA6B,CAAC,aAAa;QAC9D,SAAS,EAAE,iBAAiB,IAAI,EAAE;QAElC,IAAI;QACJ,gBAAgB;QAChB,mBAAmB;KACpB,CAAC;IAEF,OAAO;QACL,QAAQ;QAER,IAAA,sCAAoB,EAAC,OAAO,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,mBAAmB,EAAE,CAAC;QAE5E,IAAA,oCAAkB,EAAC,gBAAgB,EAAE;YACnC,cAAc,EAAE,CAAC,EAAE,eAAe,EAAE,wBAAwB,EAAE,CAAC;YAC/D,OAAO,EAAE;gBACP,MAAM,kCACD,IAAA,qEAAiC,EAAC,gBAAgB,EAAE,cAAc,EAAE,oBAAoB,CAAC,KAC5F,OAAO,EAAE,EAAE,CAAC,sDAA8B,CAAC,EAAE,mBAAmB,EAAE,GACnE;aACF;SACF,CAAC;KACH,CAAC;AACJ,CAAC,CAAC;AA5BW,QAAA,mBAAmB,uBA4B9B","sourcesContent":["import { defineInlineFunction, defineStorageDrive, QPQConfig, QPQConfigSetting, QpqFunctionRuntime } from 'quidproquo-core';\n\nimport { EMAIL_RECEIVER_ON_EMAIL_GLOBAL } from '../../services/emailReceiving/constants/emailReceivingGlobals';\nimport { getServiceEntryQpqFunctionRuntime } from '../../services/getServiceEntryQpqFunctionRuntime';\nimport { QPQWebServerConfigSettingType } from '../QPQConfig';\n\nexport interface EmailReceiverQPQWebServerConfigSetting extends QPQConfigSetting {\n name: string;\n // The drive raw messages land in, owned by the receiver; apps never name it.\n storageDriveName: string;\n onEmailFunctionName: string;\n}\n\nexport type EmailReceiverOptions = {\n // Runs once per received message with an EmailReceivedEvent.\n onEmail: QpqFunctionRuntime;\n};\n\n/** The drive a receiver's raw messages land in. Framework-owned: the api never names it. */\nexport const emailReceiverStorageDriveName = (name: string): string => `email-${name}`;\n\n/** The inline function a receiver's onEmail is registered as. */\nexport const emailReceiverOnEmailFunctionName = (name: string): string => `qpq-email-receiver-${name}`;\n\n// A handled message is deleted by the create handler seconds after it lands; the lifecycle\n// rule only sweeps up the ones a failing handler left behind.\nconst UNHANDLED_RETENTION_DAYS = 1;\n\n/**\n * Receive mail sent to any address at the app's receiving domain (defineEmailReceivingDomain).\n * Every message runs `onEmail` with an EmailReceivedEvent carrying the parsed message: who it\n * is from, who it was delivered to, subject, bodies, attachments and the provider's SPF/DKIM\n * verdicts. The transport (a drive the\n * provider writes raw messages into, a create handler that parses them) is the receiver's own.\n * A throwing handler loses that message after the platform's retries; catch inside it to do\n * otherwise. Deployed platforms only; the dev server does not receive mail.\n */\nexport const defineEmailReceiver = (name: string, options: EmailReceiverOptions): QPQConfig => {\n const storageDriveName = emailReceiverStorageDriveName(name);\n const onEmailFunctionName = emailReceiverOnEmailFunctionName(name);\n\n const receiver: EmailReceiverQPQWebServerConfigSetting = {\n configSettingType: QPQWebServerConfigSettingType.EmailReceiver,\n uniqueKey: `emailReceiver-${name}`,\n\n name,\n storageDriveName,\n onEmailFunctionName,\n };\n\n return [\n receiver,\n\n defineInlineFunction(options.onEmail, { functionName: onEmailFunctionName }),\n\n defineStorageDrive(storageDriveName, {\n lifecycleRules: [{ deleteAfterDays: UNHANDLED_RETENTION_DAYS }],\n onEvent: {\n create: {\n ...getServiceEntryQpqFunctionRuntime('emailReceiving', 'storageDrive', 'onCreate::onCreate'),\n globals: { [EMAIL_RECEIVER_ON_EMAIL_GLOBAL]: onEmailFunctionName },\n },\n },\n }),\n ];\n};\n"]}
@@ -0,0 +1,11 @@
1
+ import { QPQConfigSetting } from 'quidproquo-core';
2
+ export interface EmailReceivingDomainQPQWebServerConfigSetting extends QPQConfigSetting {
3
+ subdomain: string;
4
+ }
5
+ /**
6
+ * The app's receiving domain, one per root: `<subdomain>.<env>.<root>` resolved like every other
7
+ * host. Declared in the bootstrap config, whose stack verifies the domain with the mail provider
8
+ * and points its MX record at it, and again by every service that declares a defineEmailReceiver,
9
+ * which resolves its recipients from it (the same way defineDns is declared in both).
10
+ */
11
+ export declare const defineEmailReceivingDomain: (subdomain?: string) => EmailReceivingDomainQPQWebServerConfigSetting;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.defineEmailReceivingDomain = void 0;
4
+ const QPQConfig_1 = require("../QPQConfig");
5
+ /**
6
+ * The app's receiving domain, one per root: `<subdomain>.<env>.<root>` resolved like every other
7
+ * host. Declared in the bootstrap config, whose stack verifies the domain with the mail provider
8
+ * and points its MX record at it, and again by every service that declares a defineEmailReceiver,
9
+ * which resolves its recipients from it (the same way defineDns is declared in both).
10
+ */
11
+ const defineEmailReceivingDomain = (subdomain = 'inbox') => ({
12
+ configSettingType: QPQConfig_1.QPQWebServerConfigSettingType.EmailReceivingDomain,
13
+ uniqueKey: 'emailReceivingDomain',
14
+ subdomain,
15
+ });
16
+ exports.defineEmailReceivingDomain = defineEmailReceivingDomain;
17
+ //# sourceMappingURL=emailReceivingDomain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emailReceivingDomain.js","sourceRoot":"","sources":["../../../../src/config/settings/emailReceivingDomain.ts"],"names":[],"mappings":";;;AAEA,4CAA6D;AAM7D;;;;;GAKG;AACI,MAAM,0BAA0B,GAAG,CAAC,YAAoB,OAAO,EAAiD,EAAE,CAAC,CAAC;IACzH,iBAAiB,EAAE,yCAA6B,CAAC,oBAAoB;IACrE,SAAS,EAAE,sBAAsB;IAEjC,SAAS;CACV,CAAC,CAAC;AALU,QAAA,0BAA0B,8BAKpC","sourcesContent":["import { QPQConfigSetting } from 'quidproquo-core';\n\nimport { QPQWebServerConfigSettingType } from '../QPQConfig';\n\nexport interface EmailReceivingDomainQPQWebServerConfigSetting extends QPQConfigSetting {\n subdomain: string;\n}\n\n/**\n * The app's receiving domain, one per root: `<subdomain>.<env>.<root>` resolved like every other\n * host. Declared in the bootstrap config, whose stack verifies the domain with the mail provider\n * and points its MX record at it, and again by every service that declares a defineEmailReceiver,\n * which resolves its recipients from it (the same way defineDns is declared in both).\n */\nexport const defineEmailReceivingDomain = (subdomain: string = 'inbox'): EmailReceivingDomainQPQWebServerConfigSetting => ({\n configSettingType: QPQWebServerConfigSettingType.EmailReceivingDomain,\n uniqueKey: 'emailReceivingDomain',\n\n subdomain,\n});\n"]}
@@ -6,6 +6,8 @@ export * from './defaultRouteOptions';
6
6
  export * from './defineAuthSystem';
7
7
  export * from './dns';
8
8
  export * from './domainProxy';
9
+ export * from './emailReceiver';
10
+ export * from './emailReceivingDomain';
9
11
  export * from './emailSender';
10
12
  export * from './fileUploadSettings';
11
13
  export * from './migration';
@@ -22,6 +22,8 @@ __exportStar(require("./defaultRouteOptions"), exports);
22
22
  __exportStar(require("./defineAuthSystem"), exports);
23
23
  __exportStar(require("./dns"), exports);
24
24
  __exportStar(require("./domainProxy"), exports);
25
+ __exportStar(require("./emailReceiver"), exports);
26
+ __exportStar(require("./emailReceivingDomain"), exports);
25
27
  __exportStar(require("./emailSender"), exports);
26
28
  __exportStar(require("./fileUploadSettings"), exports);
27
29
  __exportStar(require("./migration"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/config/settings/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wCAAsB;AACtB,2CAAyB;AACzB,0CAAwB;AACxB,gDAA8B;AAC9B,wDAAsC;AACtC,qDAAmC;AACnC,wCAAsB;AACtB,gDAA8B;AAC9B,gDAA8B;AAC9B,uDAAqC;AACrC,8CAA4B;AAC5B,0CAAwB;AACxB,yCAAuB;AACvB,wCAAsB;AACtB,oDAAkC;AAClC,6DAA2C;AAC3C,sDAAoC;AACpC,6CAA2B;AAC3B,8CAA4B","sourcesContent":["export * from './api';\nexport * from './apiKey';\nexport * from './cache';\nexport * from './certificate';\nexport * from './defaultRouteOptions';\nexport * from './defineAuthSystem';\nexport * from './dns';\nexport * from './domainProxy';\nexport * from './emailSender';\nexport * from './fileUploadSettings';\nexport * from './migration';\nexport * from './route';\nexport * from './seed';\nexport * from './seo';\nexport * from './serviceFunction';\nexport * from './storageDriveCorsSettings';\nexport * from './subdomainRedirect';\nexport * from './webEntry';\nexport * from './websocket';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/config/settings/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wCAAsB;AACtB,2CAAyB;AACzB,0CAAwB;AACxB,gDAA8B;AAC9B,wDAAsC;AACtC,qDAAmC;AACnC,wCAAsB;AACtB,gDAA8B;AAC9B,kDAAgC;AAChC,yDAAuC;AACvC,gDAA8B;AAC9B,uDAAqC;AACrC,8CAA4B;AAC5B,0CAAwB;AACxB,yCAAuB;AACvB,wCAAsB;AACtB,oDAAkC;AAClC,6DAA2C;AAC3C,sDAAoC;AACpC,6CAA2B;AAC3B,8CAA4B","sourcesContent":["export * from './api';\nexport * from './apiKey';\nexport * from './cache';\nexport * from './certificate';\nexport * from './defaultRouteOptions';\nexport * from './defineAuthSystem';\nexport * from './dns';\nexport * from './domainProxy';\nexport * from './emailReceiver';\nexport * from './emailReceivingDomain';\nexport * from './emailSender';\nexport * from './fileUploadSettings';\nexport * from './migration';\nexport * from './route';\nexport * from './seed';\nexport * from './seo';\nexport * from './serviceFunction';\nexport * from './storageDriveCorsSettings';\nexport * from './subdomainRedirect';\nexport * from './webEntry';\nexport * from './websocket';\n"]}
@@ -0,0 +1 @@
1
+ export declare const EMAIL_RECEIVER_ON_EMAIL_GLOBAL = "qpq-email-receiver-on-email";
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EMAIL_RECEIVER_ON_EMAIL_GLOBAL = void 0;
4
+ // The runtime global the receiver's create handler reads: the inline function each
5
+ // parsed message is handed to.
6
+ exports.EMAIL_RECEIVER_ON_EMAIL_GLOBAL = 'qpq-email-receiver-on-email';
7
+ //# sourceMappingURL=emailReceivingGlobals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emailReceivingGlobals.js","sourceRoot":"","sources":["../../../../../src/services/emailReceiving/constants/emailReceivingGlobals.ts"],"names":[],"mappings":";;;AAAA,mFAAmF;AACnF,+BAA+B;AAClB,QAAA,8BAA8B,GAAG,6BAA6B,CAAC","sourcesContent":["// The runtime global the receiver's create handler reads: the inline function each\n// parsed message is handed to.\nexport const EMAIL_RECEIVER_ON_EMAIL_GLOBAL = 'qpq-email-receiver-on-email';\n"]}
@@ -0,0 +1 @@
1
+ export * from './emailReceivingGlobals';
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./emailReceivingGlobals"), exports);
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/services/emailReceiving/constants/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0DAAwC","sourcesContent":["export * from './emailReceivingGlobals';\n"]}
@@ -0,0 +1,3 @@
1
+ import { AskResponse } from 'quidproquo-core';
2
+ import { StorageDriveEvent, StorageDriveEventResponse } from '../../../../types/StorageDriveEvent';
3
+ export declare function onCreate(event: StorageDriveEvent): AskResponse<StorageDriveEventResponse>;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.onCreate = onCreate;
4
+ const quidproquo_core_1 = require("quidproquo-core");
5
+ const askEmailParse_1 = require("../../../../actions/email/askEmailParse");
6
+ const emailReceivingGlobals_1 = require("../../constants/emailReceivingGlobals");
7
+ // The receiver drive's create handler: each object the mail provider wrote is one message.
8
+ // It is parsed here and handed to the receiver's onEmail, then deleted; a message whose
9
+ // handler throws stays until the drive's lifecycle rule sweeps it.
10
+ function* onCreate(event) {
11
+ const onEmailFunctionName = yield* (0, quidproquo_core_1.askConfigGetGlobal)(emailReceivingGlobals_1.EMAIL_RECEIVER_ON_EMAIL_GLOBAL);
12
+ for (const filepath of event.filePaths) {
13
+ const raw = yield* (0, quidproquo_core_1.askFileReadBinaryContents)(event.driveName, filepath);
14
+ const message = yield* (0, askEmailParse_1.askEmailParse)(raw.base64Data);
15
+ yield* (0, quidproquo_core_1.askInlineFunctionExecute)(onEmailFunctionName, { message });
16
+ yield* (0, quidproquo_core_1.askFileDelete)(event.driveName, [filepath]);
17
+ }
18
+ }
19
+ //# sourceMappingURL=onCreate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onCreate.js","sourceRoot":"","sources":["../../../../../../src/services/emailReceiving/entry/storageDrive/onCreate.ts"],"names":[],"mappings":";;AAUA,4BAWC;AArBD,qDAAsI;AAEtI,2EAAwE;AAGxE,iFAAuF;AAEvF,2FAA2F;AAC3F,wFAAwF;AACxF,mEAAmE;AACnE,QAAe,CAAC,CAAC,QAAQ,CAAC,KAAwB;IAChD,MAAM,mBAAmB,GAAG,KAAK,CAAC,CAAC,IAAA,oCAAkB,EAAS,sDAA8B,CAAC,CAAC;IAE9F,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACvC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,IAAA,2CAAyB,EAAC,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QACxE,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,IAAA,6BAAa,EAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAErD,KAAK,CAAC,CAAC,IAAA,0CAAwB,EAAiD,mBAAmB,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QAElH,KAAK,CAAC,CAAC,IAAA,+BAAa,EAAC,KAAK,CAAC,SAAS,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpD,CAAC;AACH,CAAC","sourcesContent":["import { askConfigGetGlobal, askFileDelete, askFileReadBinaryContents, askInlineFunctionExecute, AskResponse } from 'quidproquo-core';\n\nimport { askEmailParse } from '../../../../actions/email/askEmailParse';\nimport { EmailReceivedEvent, EmailReceivedEventResponse } from '../../../../types/EmailReceivedEvent';\nimport { StorageDriveEvent, StorageDriveEventResponse } from '../../../../types/StorageDriveEvent';\nimport { EMAIL_RECEIVER_ON_EMAIL_GLOBAL } from '../../constants/emailReceivingGlobals';\n\n// The receiver drive's create handler: each object the mail provider wrote is one message.\n// It is parsed here and handed to the receiver's onEmail, then deleted; a message whose\n// handler throws stays until the drive's lifecycle rule sweeps it.\nexport function* onCreate(event: StorageDriveEvent): AskResponse<StorageDriveEventResponse> {\n const onEmailFunctionName = yield* askConfigGetGlobal<string>(EMAIL_RECEIVER_ON_EMAIL_GLOBAL);\n\n for (const filepath of event.filePaths) {\n const raw = yield* askFileReadBinaryContents(event.driveName, filepath);\n const message = yield* askEmailParse(raw.base64Data);\n\n yield* askInlineFunctionExecute<EmailReceivedEventResponse, EmailReceivedEvent>(onEmailFunctionName, { message });\n\n yield* askFileDelete(event.driveName, [filepath]);\n }\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export * from './constants';
2
+ export * from './entry/storageDrive/onCreate';
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./constants"), exports);
18
+ __exportStar(require("./entry/storageDrive/onCreate"), exports);
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/services/emailReceiving/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,gEAA8C","sourcesContent":["export * from './constants';\nexport * from './entry/storageDrive/onCreate';\n"]}
@@ -1,4 +1,5 @@
1
1
  export * from './auth';
2
+ export * from './emailReceiving';
2
3
  export * from './getServiceEntryQpqFunctionRuntime';
3
4
  export * from './migration';
4
5
  export * from './serviceImporter';
@@ -15,6 +15,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./auth"), exports);
18
+ __exportStar(require("./emailReceiving"), exports);
18
19
  __exportStar(require("./getServiceEntryQpqFunctionRuntime"), exports);
19
20
  __exportStar(require("./migration"), exports);
20
21
  __exportStar(require("./serviceImporter"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yCAAuB;AACvB,sEAAoD;AACpD,8CAA4B;AAC5B,oDAAkC","sourcesContent":["export * from './auth';\nexport * from './getServiceEntryQpqFunctionRuntime';\nexport * from './migration';\nexport * from './serviceImporter';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yCAAuB;AACvB,mDAAiC;AACjC,sEAAoD;AACpD,8CAA4B;AAC5B,oDAAkC","sourcesContent":["export * from './auth';\nexport * from './emailReceiving';\nexport * from './getServiceEntryQpqFunctionRuntime';\nexport * from './migration';\nexport * from './serviceImporter';\n"]}
@@ -0,0 +1,6 @@
1
+ import { EmailMessage } from '../actions/email/EmailMessage';
2
+ /** What a defineEmailReceiver's onEmail receives, once per delivered message. */
3
+ export type EmailReceivedEvent = {
4
+ message: EmailMessage;
5
+ };
6
+ export type EmailReceivedEventResponse = void;
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=EmailReceivedEvent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EmailReceivedEvent.js","sourceRoot":"","sources":["../../../src/types/EmailReceivedEvent.ts"],"names":[],"mappings":"","sourcesContent":["import { EmailMessage } from '../actions/email/EmailMessage';\n\n/** What a defineEmailReceiver's onEmail receives, once per delivered message. */\nexport type EmailReceivedEvent = {\n message: EmailMessage;\n};\n\nexport type EmailReceivedEventResponse = void;\n"]}
@@ -5,6 +5,7 @@ export declare enum StorageDriveEventType {
5
5
  export type StorageDriveEvent = {
6
6
  eventType: StorageDriveEventType;
7
7
  driveName: string;
8
+ scope?: string;
8
9
  filePaths: string[];
9
10
  };
10
11
  export type StorageDriveEventResponse = void;
@@ -1 +1 @@
1
- {"version":3,"file":"StorageDriveEvent.js","sourceRoot":"","sources":["../../../src/types/StorageDriveEvent.ts"],"names":[],"mappings":";;;AAAA,IAAY,qBAGX;AAHD,WAAY,qBAAqB;IAC/B,0CAAiB,CAAA;IACjB,0CAAiB,CAAA;AACnB,CAAC,EAHW,qBAAqB,qCAArB,qBAAqB,QAGhC","sourcesContent":["export enum StorageDriveEventType {\n Create = 'Create',\n Delete = 'Delete',\n}\n\nexport type StorageDriveEvent = {\n eventType: StorageDriveEventType;\n driveName: string;\n\n filePaths: string[];\n};\n\nexport type StorageDriveEventResponse = void;\n"]}
1
+ {"version":3,"file":"StorageDriveEvent.js","sourceRoot":"","sources":["../../../src/types/StorageDriveEvent.ts"],"names":[],"mappings":";;;AAAA,IAAY,qBAGX;AAHD,WAAY,qBAAqB;IAC/B,0CAAiB,CAAA;IACjB,0CAAiB,CAAA;AACnB,CAAC,EAHW,qBAAqB,qCAArB,qBAAqB,QAGhC","sourcesContent":["export enum StorageDriveEventType {\n Create = 'Create',\n Delete = 'Delete',\n}\n\nexport type StorageDriveEvent = {\n eventType: StorageDriveEventType;\n driveName: string;\n\n // Set when the drive is scoped: the scope the object lives under, with\n // filePaths made scope-relative. The handler runs with it as the ambient\n // storage scope, so file and kvs calls inside it inherit the partition.\n scope?: string;\n\n filePaths: string[];\n};\n\nexport type StorageDriveEventResponse = void;\n"]}
@@ -1,5 +1,6 @@
1
1
  export * from './CloudflareDnsDeployEvent';
2
2
  export * from './constants';
3
+ export * from './EmailReceivedEvent';
3
4
  export * from './EmailSendEvent';
4
5
  export * from './ExecuteServiceFunctionEvent';
5
6
  export * from './HTTPEvent';
@@ -16,6 +16,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./CloudflareDnsDeployEvent"), exports);
18
18
  __exportStar(require("./constants"), exports);
19
+ __exportStar(require("./EmailReceivedEvent"), exports);
19
20
  __exportStar(require("./EmailSendEvent"), exports);
20
21
  __exportStar(require("./ExecuteServiceFunctionEvent"), exports);
21
22
  __exportStar(require("./HTTPEvent"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6DAA2C;AAC3C,8CAA4B;AAC5B,mDAAiC;AACjC,gEAA8C;AAC9C,8CAA4B;AAC5B,oDAAkC;AAClC,6CAA2B;AAC3B,sDAAoC;AACpC,mDAAiC","sourcesContent":["export * from './CloudflareDnsDeployEvent';\nexport * from './constants';\nexport * from './EmailSendEvent';\nexport * from './ExecuteServiceFunctionEvent';\nexport * from './HTTPEvent';\nexport * from './OpenApiDocument';\nexport * from './SEOEvent';\nexport * from './StorageDriveEvent';\nexport * from './WebsocketEvent';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6DAA2C;AAC3C,8CAA4B;AAC5B,uDAAqC;AACrC,mDAAiC;AACjC,gEAA8C;AAC9C,8CAA4B;AAC5B,oDAAkC;AAClC,6CAA2B;AAC3B,sDAAoC;AACpC,mDAAiC","sourcesContent":["export * from './CloudflareDnsDeployEvent';\nexport * from './constants';\nexport * from './EmailReceivedEvent';\nexport * from './EmailSendEvent';\nexport * from './ExecuteServiceFunctionEvent';\nexport * from './HTTPEvent';\nexport * from './OpenApiDocument';\nexport * from './SEOEvent';\nexport * from './StorageDriveEvent';\nexport * from './WebsocketEvent';\n"]}
@@ -1,5 +1,5 @@
1
1
  import { QPQConfig, QpqFunctionRuntime } from 'quidproquo-core';
2
- import { ApiKeyQPQWebServerConfigSetting, CacheQPQWebServerConfigSetting, CertificateQPQWebServerConfigSetting, DefaultRouteOptionsQPQWebServerConfigSetting, DomainProxyQPQWebServerConfigSetting, EmailSenderQPQWebServerConfigSetting, FileUploadSettings, RouteQPQWebServerConfigSetting, SeoQPQWebServerConfigSetting, ServiceFunctionQPQWebServerConfigSetting, SubdomainRedirectQPQWebServerConfigSetting, WebSocketQPQWebServerConfigSetting } from '../config';
2
+ import { ApiKeyQPQWebServerConfigSetting, CacheQPQWebServerConfigSetting, CertificateQPQWebServerConfigSetting, DefaultRouteOptionsQPQWebServerConfigSetting, DomainProxyQPQWebServerConfigSetting, EmailReceiverQPQWebServerConfigSetting, EmailReceivingDomainQPQWebServerConfigSetting, EmailSenderQPQWebServerConfigSetting, FileUploadSettings, RouteQPQWebServerConfigSetting, SeoQPQWebServerConfigSetting, ServiceFunctionQPQWebServerConfigSetting, SubdomainRedirectQPQWebServerConfigSetting, WebSocketQPQWebServerConfigSetting } from '../config';
3
3
  import { ApiQPQWebServerConfigSetting, WebEntryQPQWebServerConfigSetting } from '../config';
4
4
  export declare const getAllRoutes: (qpqConfig: QPQConfig) => RouteQPQWebServerConfigSetting[];
5
5
  export declare const getAllRoutesForApi: (apiName: string, qpqConfig: QPQConfig) => RouteQPQWebServerConfigSetting[];
@@ -23,5 +23,10 @@ export declare const defaultFileUploadSettings: FileUploadSettings;
23
23
  export declare const getFileUploadSettings: (qpqConfig: QPQConfig) => FileUploadSettings;
24
24
  export declare const getDefaultRouteSettings: (qpqConfig: QPQConfig) => DefaultRouteOptionsQPQWebServerConfigSetting[];
25
25
  export declare const getEmailSenderSettings: (qpqConfig: QPQConfig) => EmailSenderQPQWebServerConfigSetting[];
26
+ export declare const getEmailReceivingDomainConfig: (qpqConfig: QPQConfig) => EmailReceivingDomainQPQWebServerConfigSetting | undefined;
27
+ export declare const getEmailReceiverConfigs: (qpqConfig: QPQConfig) => EmailReceiverQPQWebServerConfigSetting[];
28
+ export declare const getEmailReceiverByName: (qpqConfig: QPQConfig, name: string) => EmailReceiverQPQWebServerConfigSetting | undefined;
29
+ /** The receivers that write into a drive, which the mail provider must be allowed to write into. */
30
+ export declare const getEmailReceiversForStorageDrive: (qpqConfig: QPQConfig, storageDriveName: string) => EmailReceiverQPQWebServerConfigSetting[];
26
31
  export declare const getWebsocketSettings: (qpqConfig: QPQConfig) => WebSocketQPQWebServerConfigSetting[];
27
32
  export declare const getOwnedWebsocketSettings: (qpqConfig: QPQConfig) => WebSocketQPQWebServerConfigSetting[];
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getOwnedWebsocketSettings = exports.getWebsocketSettings = exports.getEmailSenderSettings = exports.getDefaultRouteSettings = exports.getFileUploadSettings = exports.defaultFileUploadSettings = exports.isStorageDriveWebEntryOrigin = exports.getCacheConfigByName = exports.getAllOwnedCertifcateConfigs = exports.getAllOwnedCacheConfigs = exports.getDomainProxyConfigs = exports.getWebEntryConfigs = exports.getApiConfigs = exports.getSubdomainRedirects = exports.getWebsocketEntryByApiName = exports.getWebEntry = exports.getAllSrcEntries = exports.getAllWebsocketSrcEntries = exports.getOwnedServiceFunctions = exports.getAllServiceFunctions = exports.getAllSeo = exports.getAllApiKeyConfigs = exports.getAllRoutesForApi = exports.getAllRoutes = void 0;
3
+ exports.getOwnedWebsocketSettings = exports.getWebsocketSettings = exports.getEmailReceiversForStorageDrive = exports.getEmailReceiverByName = exports.getEmailReceiverConfigs = exports.getEmailReceivingDomainConfig = exports.getEmailSenderSettings = exports.getDefaultRouteSettings = exports.getFileUploadSettings = exports.defaultFileUploadSettings = exports.isStorageDriveWebEntryOrigin = exports.getCacheConfigByName = exports.getAllOwnedCertifcateConfigs = exports.getAllOwnedCacheConfigs = exports.getDomainProxyConfigs = exports.getWebEntryConfigs = exports.getApiConfigs = exports.getSubdomainRedirects = exports.getWebsocketEntryByApiName = exports.getWebEntry = exports.getAllSrcEntries = exports.getAllWebsocketSrcEntries = exports.getOwnedServiceFunctions = exports.getAllServiceFunctions = exports.getAllSeo = exports.getAllApiKeyConfigs = exports.getAllRoutesForApi = exports.getAllRoutes = void 0;
4
4
  const quidproquo_core_1 = require("quidproquo-core");
5
5
  const config_1 = require("../config");
6
6
  const getAllRoutes = (qpqConfig) => {
@@ -135,6 +135,15 @@ const getEmailSenderSettings = (qpqConfig) => {
135
135
  return quidproquo_core_1.qpqCoreUtils.getConfigSettings(qpqConfig, config_1.QPQWebServerConfigSettingType.EmailSender) || [];
136
136
  };
137
137
  exports.getEmailSenderSettings = getEmailSenderSettings;
138
+ const getEmailReceivingDomainConfig = (qpqConfig) => quidproquo_core_1.qpqCoreUtils.getConfigSetting(qpqConfig, config_1.QPQWebServerConfigSettingType.EmailReceivingDomain);
139
+ exports.getEmailReceivingDomainConfig = getEmailReceivingDomainConfig;
140
+ const getEmailReceiverConfigs = (qpqConfig) => quidproquo_core_1.qpqCoreUtils.getConfigSettings(qpqConfig, config_1.QPQWebServerConfigSettingType.EmailReceiver) || [];
141
+ exports.getEmailReceiverConfigs = getEmailReceiverConfigs;
142
+ const getEmailReceiverByName = (qpqConfig, name) => (0, exports.getEmailReceiverConfigs)(qpqConfig).find((receiver) => receiver.name === name);
143
+ exports.getEmailReceiverByName = getEmailReceiverByName;
144
+ /** The receivers that write into a drive, which the mail provider must be allowed to write into. */
145
+ const getEmailReceiversForStorageDrive = (qpqConfig, storageDriveName) => (0, exports.getEmailReceiverConfigs)(qpqConfig).filter((receiver) => receiver.storageDriveName === storageDriveName);
146
+ exports.getEmailReceiversForStorageDrive = getEmailReceiversForStorageDrive;
138
147
  const getWebsocketSettings = (qpqConfig) => {
139
148
  const websocketSettings = quidproquo_core_1.qpqCoreUtils.getConfigSettings(qpqConfig, config_1.QPQWebServerConfigSettingType.WebSocket) || [];
140
149
  return websocketSettings;