quidproquo-webserver 0.1.9 → 0.1.11

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 (127) hide show
  1. package/lib/commonjs/actions/api/ApiActionType.d.ts +3 -0
  2. package/lib/commonjs/actions/api/ApiActionType.js +8 -0
  3. package/lib/commonjs/actions/api/ApiActionType.js.map +1 -0
  4. package/lib/commonjs/actions/api/ApiRequestActionRequester.d.ts +3 -0
  5. package/lib/commonjs/actions/api/ApiRequestActionRequester.js +19 -0
  6. package/lib/commonjs/actions/api/ApiRequestActionRequester.js.map +1 -0
  7. package/lib/commonjs/actions/api/ApiRequestActionRequesterTypes.d.ts +18 -0
  8. package/lib/commonjs/actions/api/ApiRequestActionRequesterTypes.js +3 -0
  9. package/lib/commonjs/actions/api/ApiRequestActionRequesterTypes.js.map +1 -0
  10. package/lib/commonjs/actions/api/index.d.ts +3 -0
  11. package/lib/commonjs/actions/api/index.js +20 -0
  12. package/lib/commonjs/actions/api/index.js.map +1 -0
  13. package/lib/commonjs/actions/email/EmailActionType.d.ts +4 -0
  14. package/lib/commonjs/actions/email/EmailActionType.js +9 -0
  15. package/lib/commonjs/actions/email/EmailActionType.js.map +1 -0
  16. package/lib/commonjs/actions/email/EmailDeliveryStatus.d.ts +9 -0
  17. package/lib/commonjs/actions/email/EmailDeliveryStatus.js +23 -0
  18. package/lib/commonjs/actions/email/EmailDeliveryStatus.js.map +1 -0
  19. package/lib/commonjs/actions/email/EmailSendEmailActionRequester.d.ts +11 -0
  20. package/lib/commonjs/actions/email/EmailSendEmailActionRequester.js +22 -0
  21. package/lib/commonjs/actions/email/EmailSendEmailActionRequester.js.map +1 -0
  22. package/lib/commonjs/actions/email/EmailSendEmailActionTypes.d.ts +24 -0
  23. package/lib/commonjs/actions/email/EmailSendEmailActionTypes.js +3 -0
  24. package/lib/commonjs/actions/email/EmailSendEmailActionTypes.js.map +1 -0
  25. package/lib/commonjs/actions/email/EmailSetDeliveryStatusActionRequester.d.ts +3 -0
  26. package/lib/commonjs/actions/email/EmailSetDeliveryStatusActionRequester.js +18 -0
  27. package/lib/commonjs/actions/email/EmailSetDeliveryStatusActionRequester.js.map +1 -0
  28. package/lib/commonjs/actions/email/EmailSetDeliveryStatusActionTypes.d.ts +14 -0
  29. package/lib/commonjs/actions/email/EmailSetDeliveryStatusActionTypes.js +3 -0
  30. package/lib/commonjs/actions/email/EmailSetDeliveryStatusActionTypes.js.map +1 -0
  31. package/lib/commonjs/actions/email/index.d.ts +6 -0
  32. package/lib/commonjs/actions/email/index.js +23 -0
  33. package/lib/commonjs/actions/email/index.js.map +1 -0
  34. package/lib/commonjs/actions/index.d.ts +2 -0
  35. package/lib/commonjs/actions/index.js +2 -0
  36. package/lib/commonjs/actions/index.js.map +1 -1
  37. package/lib/commonjs/config/QPQConfig.d.ts +1 -0
  38. package/lib/commonjs/config/QPQConfig.js +1 -0
  39. package/lib/commonjs/config/QPQConfig.js.map +1 -1
  40. package/lib/commonjs/config/settings/defineAuthSystem/defineAuthSystem.d.ts +1 -0
  41. package/lib/commonjs/config/settings/defineAuthSystem/defineAuthSystem.js +7 -0
  42. package/lib/commonjs/config/settings/defineAuthSystem/defineAuthSystem.js.map +1 -1
  43. package/lib/commonjs/config/settings/emailSender.d.ts +5 -0
  44. package/lib/commonjs/config/settings/emailSender.js +13 -0
  45. package/lib/commonjs/config/settings/emailSender.js.map +1 -0
  46. package/lib/commonjs/config/settings/index.d.ts +1 -0
  47. package/lib/commonjs/config/settings/index.js +1 -0
  48. package/lib/commonjs/config/settings/index.js.map +1 -1
  49. package/lib/commonjs/services/auth/entry/controller/authController.d.ts +2 -0
  50. package/lib/commonjs/services/auth/entry/controller/authController.js +23 -0
  51. package/lib/commonjs/services/auth/entry/controller/authController.js.map +1 -1
  52. package/lib/commonjs/services/auth/logic/auth/askRevokeSession.d.ts +2 -0
  53. package/lib/commonjs/services/auth/logic/auth/askRevokeSession.js +13 -0
  54. package/lib/commonjs/services/auth/logic/auth/askRevokeSession.js.map +1 -0
  55. package/lib/commonjs/services/auth/logic/auth/askSignOut.d.ts +2 -0
  56. package/lib/commonjs/services/auth/logic/auth/askSignOut.js +11 -0
  57. package/lib/commonjs/services/auth/logic/auth/askSignOut.js.map +1 -0
  58. package/lib/commonjs/services/auth/logic/auth/index.d.ts +2 -0
  59. package/lib/commonjs/services/auth/logic/auth/index.js +2 -0
  60. package/lib/commonjs/services/auth/logic/auth/index.js.map +1 -1
  61. package/lib/commonjs/utils/qpqConfigAccessorsUtils.d.ts +2 -1
  62. package/lib/commonjs/utils/qpqConfigAccessorsUtils.js +6 -1
  63. package/lib/commonjs/utils/qpqConfigAccessorsUtils.js.map +1 -1
  64. package/lib/esm/actions/api/ApiActionType.d.ts +3 -0
  65. package/lib/esm/actions/api/ApiActionType.js +5 -0
  66. package/lib/esm/actions/api/ApiActionType.js.map +1 -0
  67. package/lib/esm/actions/api/ApiRequestActionRequester.d.ts +3 -0
  68. package/lib/esm/actions/api/ApiRequestActionRequester.js +16 -0
  69. package/lib/esm/actions/api/ApiRequestActionRequester.js.map +1 -0
  70. package/lib/esm/actions/api/ApiRequestActionRequesterTypes.d.ts +18 -0
  71. package/lib/esm/actions/api/ApiRequestActionRequesterTypes.js +2 -0
  72. package/lib/esm/actions/api/ApiRequestActionRequesterTypes.js.map +1 -0
  73. package/lib/esm/actions/api/index.d.ts +3 -0
  74. package/lib/esm/actions/api/index.js +4 -0
  75. package/lib/esm/actions/api/index.js.map +1 -0
  76. package/lib/esm/actions/email/EmailActionType.d.ts +4 -0
  77. package/lib/esm/actions/email/EmailActionType.js +6 -0
  78. package/lib/esm/actions/email/EmailActionType.js.map +1 -0
  79. package/lib/esm/actions/email/EmailDeliveryStatus.d.ts +9 -0
  80. package/lib/esm/actions/email/EmailDeliveryStatus.js +20 -0
  81. package/lib/esm/actions/email/EmailDeliveryStatus.js.map +1 -0
  82. package/lib/esm/actions/email/EmailSendEmailActionRequester.d.ts +11 -0
  83. package/lib/esm/actions/email/EmailSendEmailActionRequester.js +18 -0
  84. package/lib/esm/actions/email/EmailSendEmailActionRequester.js.map +1 -0
  85. package/lib/esm/actions/email/EmailSendEmailActionTypes.d.ts +24 -0
  86. package/lib/esm/actions/email/EmailSendEmailActionTypes.js +2 -0
  87. package/lib/esm/actions/email/EmailSendEmailActionTypes.js.map +1 -0
  88. package/lib/esm/actions/email/EmailSetDeliveryStatusActionRequester.d.ts +3 -0
  89. package/lib/esm/actions/email/EmailSetDeliveryStatusActionRequester.js +15 -0
  90. package/lib/esm/actions/email/EmailSetDeliveryStatusActionRequester.js.map +1 -0
  91. package/lib/esm/actions/email/EmailSetDeliveryStatusActionTypes.d.ts +14 -0
  92. package/lib/esm/actions/email/EmailSetDeliveryStatusActionTypes.js +2 -0
  93. package/lib/esm/actions/email/EmailSetDeliveryStatusActionTypes.js.map +1 -0
  94. package/lib/esm/actions/email/index.d.ts +6 -0
  95. package/lib/esm/actions/email/index.js +7 -0
  96. package/lib/esm/actions/email/index.js.map +1 -0
  97. package/lib/esm/actions/index.d.ts +2 -0
  98. package/lib/esm/actions/index.js +2 -0
  99. package/lib/esm/actions/index.js.map +1 -1
  100. package/lib/esm/config/QPQConfig.d.ts +1 -0
  101. package/lib/esm/config/QPQConfig.js +1 -0
  102. package/lib/esm/config/QPQConfig.js.map +1 -1
  103. package/lib/esm/config/settings/defineAuthSystem/defineAuthSystem.d.ts +1 -0
  104. package/lib/esm/config/settings/defineAuthSystem/defineAuthSystem.js +7 -0
  105. package/lib/esm/config/settings/defineAuthSystem/defineAuthSystem.js.map +1 -1
  106. package/lib/esm/config/settings/emailSender.d.ts +5 -0
  107. package/lib/esm/config/settings/emailSender.js +9 -0
  108. package/lib/esm/config/settings/emailSender.js.map +1 -0
  109. package/lib/esm/config/settings/index.d.ts +1 -0
  110. package/lib/esm/config/settings/index.js +1 -0
  111. package/lib/esm/config/settings/index.js.map +1 -1
  112. package/lib/esm/services/auth/entry/controller/authController.d.ts +2 -0
  113. package/lib/esm/services/auth/entry/controller/authController.js +22 -1
  114. package/lib/esm/services/auth/entry/controller/authController.js.map +1 -1
  115. package/lib/esm/services/auth/logic/auth/askRevokeSession.d.ts +2 -0
  116. package/lib/esm/services/auth/logic/auth/askRevokeSession.js +10 -0
  117. package/lib/esm/services/auth/logic/auth/askRevokeSession.js.map +1 -0
  118. package/lib/esm/services/auth/logic/auth/askSignOut.d.ts +2 -0
  119. package/lib/esm/services/auth/logic/auth/askSignOut.js +8 -0
  120. package/lib/esm/services/auth/logic/auth/askSignOut.js.map +1 -0
  121. package/lib/esm/services/auth/logic/auth/index.d.ts +2 -0
  122. package/lib/esm/services/auth/logic/auth/index.js +2 -0
  123. package/lib/esm/services/auth/logic/auth/index.js.map +1 -1
  124. package/lib/esm/utils/qpqConfigAccessorsUtils.d.ts +2 -1
  125. package/lib/esm/utils/qpqConfigAccessorsUtils.js +4 -0
  126. package/lib/esm/utils/qpqConfigAccessorsUtils.js.map +1 -1
  127. package/package.json +3 -3
@@ -0,0 +1,3 @@
1
+ export declare enum ApiActionType {
2
+ Request = "@quidproquo-webserver/Api/Request"
3
+ }
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ApiActionType = void 0;
4
+ var ApiActionType;
5
+ (function (ApiActionType) {
6
+ ApiActionType["Request"] = "@quidproquo-webserver/Api/Request";
7
+ })(ApiActionType || (exports.ApiActionType = ApiActionType = {}));
8
+ //# sourceMappingURL=ApiActionType.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApiActionType.js","sourceRoot":"","sources":["../../../../src/actions/api/ApiActionType.ts"],"names":[],"mappings":";;;AAAA,IAAY,aAEX;AAFD,WAAY,aAAa;IACvB,8DAA6C,CAAA;AAC/C,CAAC,EAFW,aAAa,6BAAb,aAAa,QAExB","sourcesContent":["export enum ApiActionType {\n Request = '@quidproquo-webserver/Api/Request',\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import { HTTPMethod } from 'quidproquo-core';
2
+ import { ApiRequestActionRequester, ApiRequestOptions } from './ApiRequestActionRequesterTypes';
3
+ export declare function askApiRequest<T, R>(service: string, method: HTTPMethod, endpoint: string, options?: ApiRequestOptions<T>): ApiRequestActionRequester<T, R>;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.askApiRequest = askApiRequest;
4
+ const ApiActionType_1 = require("./ApiActionType");
5
+ function* askApiRequest(service, method, endpoint, options) {
6
+ return yield {
7
+ type: ApiActionType_1.ApiActionType.Request,
8
+ payload: {
9
+ service,
10
+ endpoint,
11
+ method,
12
+ body: options === null || options === void 0 ? void 0 : options.body,
13
+ headers: options === null || options === void 0 ? void 0 : options.headers,
14
+ params: options === null || options === void 0 ? void 0 : options.params,
15
+ responseType: (options === null || options === void 0 ? void 0 : options.responseType) || 'json',
16
+ },
17
+ };
18
+ }
19
+ //# sourceMappingURL=ApiRequestActionRequester.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApiRequestActionRequester.js","sourceRoot":"","sources":["../../../../src/actions/api/ApiRequestActionRequester.ts"],"names":[],"mappings":";;AAKA,sCAkBC;AArBD,mDAAgD;AAGhD,QAAe,CAAC,CAAC,aAAa,CAC5B,OAAe,EACf,MAAkB,EAClB,QAAgB,EAChB,OAA8B;IAE9B,OAAO,MAAM;QACX,IAAI,EAAE,6BAAa,CAAC,OAAO;QAC3B,OAAO,EAAE;YACP,OAAO;YACP,QAAQ;YACR,MAAM;YACN,IAAI,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI;YACnB,OAAO,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO;YACzB,MAAM,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM;YACvB,YAAY,EAAE,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,YAAY,KAAI,MAAM;SAC9C;KACF,CAAC;AACJ,CAAC","sourcesContent":["import { HTTPMethod } from 'quidproquo-core';\n\nimport { ApiActionType } from './ApiActionType';\nimport { ApiRequestActionRequester, ApiRequestOptions } from './ApiRequestActionRequesterTypes';\n\nexport function* askApiRequest<T, R>(\n service: string,\n method: HTTPMethod,\n endpoint: string,\n options?: ApiRequestOptions<T>,\n): ApiRequestActionRequester<T, R> {\n return yield {\n type: ApiActionType.Request,\n payload: {\n service,\n endpoint,\n method,\n body: options?.body,\n headers: options?.headers,\n params: options?.params,\n responseType: options?.responseType || 'json',\n },\n };\n}\n"]}
@@ -0,0 +1,18 @@
1
+ import { Action, ActionProcessor, ActionRequester, HTTPMethod, HTTPNetworkResponse, HTTPRequestOptions, ResponseType } from 'quidproquo-core';
2
+ import { ApiActionType } from './ApiActionType';
3
+ export type ApiRequestOptions<T> = Omit<HTTPRequestOptions<T>, 'basePath'>;
4
+ export interface ApiRequestActionPayload<T> {
5
+ service: string;
6
+ endpoint: string;
7
+ method: HTTPMethod;
8
+ body?: T;
9
+ params?: Record<string, string>;
10
+ headers?: Record<string, string>;
11
+ responseType: ResponseType;
12
+ }
13
+ export interface ApiRequestAction<T> extends Action<ApiRequestActionPayload<T>> {
14
+ type: ApiActionType.Request;
15
+ payload: ApiRequestActionPayload<T>;
16
+ }
17
+ export type ApiRequestActionProcessor<T, R> = ActionProcessor<ApiRequestAction<T>, HTTPNetworkResponse<R>>;
18
+ export type ApiRequestActionRequester<T, R> = ActionRequester<ApiRequestAction<T>, HTTPNetworkResponse<R>>;
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=ApiRequestActionRequesterTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApiRequestActionRequesterTypes.js","sourceRoot":"","sources":["../../../../src/actions/api/ApiRequestActionRequesterTypes.ts"],"names":[],"mappings":"","sourcesContent":["import { Action, ActionProcessor, ActionRequester, HTTPMethod, HTTPNetworkResponse, HTTPRequestOptions, ResponseType } from 'quidproquo-core';\n\nimport { ApiActionType } from './ApiActionType';\n\n// basePath is resolved by the processor, so it is omitted from the caller options\nexport type ApiRequestOptions<T> = Omit<HTTPRequestOptions<T>, 'basePath'>;\n\n// Payload\nexport interface ApiRequestActionPayload<T> {\n service: string;\n endpoint: string;\n method: HTTPMethod;\n body?: T;\n params?: Record<string, string>;\n headers?: Record<string, string>;\n responseType: ResponseType;\n}\n\n// Action\nexport interface ApiRequestAction<T> extends Action<ApiRequestActionPayload<T>> {\n type: ApiActionType.Request;\n payload: ApiRequestActionPayload<T>;\n}\n\n// Function Types\nexport type ApiRequestActionProcessor<T, R> = ActionProcessor<ApiRequestAction<T>, HTTPNetworkResponse<R>>;\nexport type ApiRequestActionRequester<T, R> = ActionRequester<ApiRequestAction<T>, HTTPNetworkResponse<R>>;\n"]}
@@ -0,0 +1,3 @@
1
+ export * from './ApiActionType';
2
+ export * from './ApiRequestActionRequester';
3
+ export * from './ApiRequestActionRequesterTypes';
@@ -0,0 +1,20 @@
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("./ApiActionType"), exports);
18
+ __exportStar(require("./ApiRequestActionRequester"), exports);
19
+ __exportStar(require("./ApiRequestActionRequesterTypes"), exports);
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/actions/api/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAAgC;AAChC,8DAA4C;AAC5C,mEAAiD","sourcesContent":["export * from './ApiActionType';\nexport * from './ApiRequestActionRequester';\nexport * from './ApiRequestActionRequesterTypes';\n"]}
@@ -0,0 +1,4 @@
1
+ export declare enum EmailActionType {
2
+ SendEmail = "@quidproquo-webserver/Email/SendEmail",
3
+ SetDeliveryStatus = "@quidproquo-webserver/Email/SetDeliveryStatus"
4
+ }
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EmailActionType = void 0;
4
+ var EmailActionType;
5
+ (function (EmailActionType) {
6
+ EmailActionType["SendEmail"] = "@quidproquo-webserver/Email/SendEmail";
7
+ EmailActionType["SetDeliveryStatus"] = "@quidproquo-webserver/Email/SetDeliveryStatus";
8
+ })(EmailActionType || (exports.EmailActionType = EmailActionType = {}));
9
+ //# sourceMappingURL=EmailActionType.js.map
@@ -0,0 +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"]}
@@ -0,0 +1,9 @@
1
+ export declare enum EmailDeliveryStatus {
2
+ sent = "sent",
3
+ processed = "processed",
4
+ deferred = "deferred",
5
+ delivered = "delivered",
6
+ dropped = "dropped",
7
+ bounce = "bounce",
8
+ block = "block"
9
+ }
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EmailDeliveryStatus = void 0;
4
+ // SendGrid's delivery event statuses, plus `sent`: the default state a send
5
+ // starts in before any delivery events arrive.
6
+ var EmailDeliveryStatus;
7
+ (function (EmailDeliveryStatus) {
8
+ // The send action succeeded; no delivery events yet
9
+ EmailDeliveryStatus["sent"] = "sent";
10
+ // Provider received the message and is preparing to send it
11
+ EmailDeliveryStatus["processed"] = "processed";
12
+ // Receiving server temporarily rejected it; the provider will retry (reason = SMTP response)
13
+ EmailDeliveryStatus["deferred"] = "deferred";
14
+ // Accepted by the receiving server
15
+ EmailDeliveryStatus["delivered"] = "delivered";
16
+ // Provider did not attempt delivery: suppression list, invalid, prior bounce (reason attached)
17
+ EmailDeliveryStatus["dropped"] = "dropped";
18
+ // Permanent rejection
19
+ EmailDeliveryStatus["bounce"] = "bounce";
20
+ // Blocked by the receiving server
21
+ EmailDeliveryStatus["block"] = "block";
22
+ })(EmailDeliveryStatus || (exports.EmailDeliveryStatus = EmailDeliveryStatus = {}));
23
+ //# sourceMappingURL=EmailDeliveryStatus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EmailDeliveryStatus.js","sourceRoot":"","sources":["../../../../src/actions/email/EmailDeliveryStatus.ts"],"names":[],"mappings":";;;AAAA,4EAA4E;AAC5E,+CAA+C;AAC/C,IAAY,mBAqBX;AArBD,WAAY,mBAAmB;IAC7B,oDAAoD;IACpD,oCAAa,CAAA;IAEb,4DAA4D;IAC5D,8CAAuB,CAAA;IAEvB,6FAA6F;IAC7F,4CAAqB,CAAA;IAErB,mCAAmC;IACnC,8CAAuB,CAAA;IAEvB,+FAA+F;IAC/F,0CAAmB,CAAA;IAEnB,sBAAsB;IACtB,wCAAiB,CAAA;IAEjB,kCAAkC;IAClC,sCAAe,CAAA;AACjB,CAAC,EArBW,mBAAmB,mCAAnB,mBAAmB,QAqB9B","sourcesContent":["// SendGrid's delivery event statuses, plus `sent`: the default state a send\n// starts in before any delivery events arrive.\nexport enum EmailDeliveryStatus {\n // The send action succeeded; no delivery events yet\n sent = 'sent',\n\n // Provider received the message and is preparing to send it\n processed = 'processed',\n\n // Receiving server temporarily rejected it; the provider will retry (reason = SMTP response)\n deferred = 'deferred',\n\n // Accepted by the receiving server\n delivered = 'delivered',\n\n // Provider did not attempt delivery: suppression list, invalid, prior bounce (reason attached)\n dropped = 'dropped',\n\n // Permanent rejection\n bounce = 'bounce',\n\n // Blocked by the receiving server\n block = 'block',\n}\n"]}
@@ -0,0 +1,11 @@
1
+ import { EmailSendEmailActionPayload, EmailSendEmailActionRequester } from './EmailSendEmailActionTypes';
2
+ export declare const EmailSendEmailErrorTypeEnum: {
3
+ MessageRejected: string;
4
+ SenderNotVerified: string;
5
+ AccountSuspended: string;
6
+ SendingPaused: string;
7
+ Throttled: string;
8
+ LimitExceeded: string;
9
+ BadRequest: string;
10
+ };
11
+ export declare function askEmailSendEmail(payload: EmailSendEmailActionPayload): EmailSendEmailActionRequester;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EmailSendEmailErrorTypeEnum = void 0;
4
+ exports.askEmailSendEmail = askEmailSendEmail;
5
+ const quidproquo_core_1 = require("quidproquo-core");
6
+ const EmailActionType_1 = require("./EmailActionType");
7
+ exports.EmailSendEmailErrorTypeEnum = (0, quidproquo_core_1.createErrorEnumForAction)(EmailActionType_1.EmailActionType.SendEmail, [
8
+ 'MessageRejected',
9
+ 'SenderNotVerified',
10
+ 'AccountSuspended',
11
+ 'SendingPaused',
12
+ 'Throttled',
13
+ 'LimitExceeded',
14
+ 'BadRequest',
15
+ ]);
16
+ function* askEmailSendEmail(payload) {
17
+ return yield {
18
+ type: EmailActionType_1.EmailActionType.SendEmail,
19
+ payload,
20
+ };
21
+ }
22
+ //# sourceMappingURL=EmailSendEmailActionRequester.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EmailSendEmailActionRequester.js","sourceRoot":"","sources":["../../../../src/actions/email/EmailSendEmailActionRequester.ts"],"names":[],"mappings":";;;AAeA,8CAKC;AApBD,qDAA2D;AAE3D,uDAAoD;AAGvC,QAAA,2BAA2B,GAAG,IAAA,0CAAwB,EAAC,iCAAe,CAAC,SAAS,EAAE;IAC7F,iBAAiB;IACjB,mBAAmB;IACnB,kBAAkB;IAClB,eAAe;IACf,WAAW;IACX,eAAe;IACf,YAAY;CACb,CAAC,CAAC;AAEH,QAAe,CAAC,CAAC,iBAAiB,CAAC,OAAoC;IACrE,OAAO,MAAM;QACX,IAAI,EAAE,iCAAe,CAAC,SAAS;QAC/B,OAAO;KACR,CAAC;AACJ,CAAC","sourcesContent":["import { createErrorEnumForAction } from 'quidproquo-core';\n\nimport { EmailActionType } from './EmailActionType';\nimport { EmailSendEmailActionPayload, EmailSendEmailActionRequester } from './EmailSendEmailActionTypes';\n\nexport const EmailSendEmailErrorTypeEnum = createErrorEnumForAction(EmailActionType.SendEmail, [\n 'MessageRejected',\n 'SenderNotVerified',\n 'AccountSuspended',\n 'SendingPaused',\n 'Throttled',\n 'LimitExceeded',\n 'BadRequest',\n]);\n\nexport function* askEmailSendEmail(payload: EmailSendEmailActionPayload): EmailSendEmailActionRequester {\n return yield {\n type: EmailActionType.SendEmail,\n payload,\n };\n}\n"]}
@@ -0,0 +1,24 @@
1
+ import { Action, ActionProcessor, ActionRequester, QPQBinaryData } from 'quidproquo-core';
2
+ import { EmailActionType } from './EmailActionType';
3
+ export type EmailSendEmailBody = {
4
+ bodyText: string;
5
+ bodyHtml?: string;
6
+ } | {
7
+ bodyText?: string;
8
+ bodyHtml: string;
9
+ };
10
+ export type EmailSendEmailActionPayload = {
11
+ from: string;
12
+ to: string[];
13
+ cc?: string[];
14
+ bcc?: string[];
15
+ replyTo?: string[];
16
+ subject: string;
17
+ attachments?: QPQBinaryData[];
18
+ } & EmailSendEmailBody;
19
+ export interface EmailSendEmailAction extends Action<EmailSendEmailActionPayload> {
20
+ type: EmailActionType.SendEmail;
21
+ payload: EmailSendEmailActionPayload;
22
+ }
23
+ export type EmailSendEmailActionProcessor = ActionProcessor<EmailSendEmailAction, string>;
24
+ export type EmailSendEmailActionRequester = ActionRequester<EmailSendEmailAction, string>;
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=EmailSendEmailActionTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EmailSendEmailActionTypes.js","sourceRoot":"","sources":["../../../../src/actions/email/EmailSendEmailActionTypes.ts"],"names":[],"mappings":"","sourcesContent":["import { Action, ActionProcessor, ActionRequester, QPQBinaryData } from 'quidproquo-core';\n\nimport { EmailActionType } from './EmailActionType';\n\n// At least one of bodyText / bodyHtml must be provided\nexport type EmailSendEmailBody = { bodyText: string; bodyHtml?: string } | { bodyText?: string; bodyHtml: string };\n\n// Payload\nexport type EmailSendEmailActionPayload = {\n from: string;\n to: string[];\n cc?: string[];\n bcc?: string[];\n replyTo?: string[];\n subject: string;\n attachments?: QPQBinaryData[];\n} & EmailSendEmailBody;\n\n// Action\nexport interface EmailSendEmailAction extends Action<EmailSendEmailActionPayload> {\n type: EmailActionType.SendEmail;\n payload: EmailSendEmailActionPayload;\n}\n\n// Function Types\nexport type EmailSendEmailActionProcessor = ActionProcessor<EmailSendEmailAction, string>;\nexport type EmailSendEmailActionRequester = ActionRequester<EmailSendEmailAction, string>;\n"]}
@@ -0,0 +1,3 @@
1
+ import { EmailDeliveryStatus } from './EmailDeliveryStatus';
2
+ import { EmailSetDeliveryStatusActionRequester } from './EmailSetDeliveryStatusActionTypes';
3
+ export declare function askEmailSetDeliveryStatus(messageId: string, deliveryStatus: EmailDeliveryStatus, reason?: string): EmailSetDeliveryStatusActionRequester;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.askEmailSetDeliveryStatus = askEmailSetDeliveryStatus;
4
+ const EmailActionType_1 = require("./EmailActionType");
5
+ // Records a delivery status change for a previously sent email. The action itself
6
+ // does nothing at runtime: its meaning is the log entry, which the admin action
7
+ // search folds into the email's entity via the messageId link key.
8
+ function* askEmailSetDeliveryStatus(messageId, deliveryStatus, reason) {
9
+ return yield {
10
+ type: EmailActionType_1.EmailActionType.SetDeliveryStatus,
11
+ payload: {
12
+ messageId,
13
+ deliveryStatus,
14
+ reason,
15
+ },
16
+ };
17
+ }
18
+ //# sourceMappingURL=EmailSetDeliveryStatusActionRequester.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EmailSetDeliveryStatusActionRequester.js","sourceRoot":"","sources":["../../../../src/actions/email/EmailSetDeliveryStatusActionRequester.ts"],"names":[],"mappings":";;AAOA,8DAaC;AApBD,uDAAoD;AAIpD,kFAAkF;AAClF,gFAAgF;AAChF,mEAAmE;AACnE,QAAe,CAAC,CAAC,yBAAyB,CACxC,SAAiB,EACjB,cAAmC,EACnC,MAAe;IAEf,OAAO,MAAM;QACX,IAAI,EAAE,iCAAe,CAAC,iBAAiB;QACvC,OAAO,EAAE;YACP,SAAS;YACT,cAAc;YACd,MAAM;SACP;KACF,CAAC;AACJ,CAAC","sourcesContent":["import { EmailActionType } from './EmailActionType';\nimport { EmailDeliveryStatus } from './EmailDeliveryStatus';\nimport { EmailSetDeliveryStatusActionRequester } from './EmailSetDeliveryStatusActionTypes';\n\n// Records a delivery status change for a previously sent email. The action itself\n// does nothing at runtime: its meaning is the log entry, which the admin action\n// search folds into the email's entity via the messageId link key.\nexport function* askEmailSetDeliveryStatus(\n messageId: string,\n deliveryStatus: EmailDeliveryStatus,\n reason?: string,\n): EmailSetDeliveryStatusActionRequester {\n return yield {\n type: EmailActionType.SetDeliveryStatus,\n payload: {\n messageId,\n deliveryStatus,\n reason,\n },\n };\n}\n"]}
@@ -0,0 +1,14 @@
1
+ import { Action, ActionProcessor, ActionRequester } from 'quidproquo-core';
2
+ import { EmailActionType } from './EmailActionType';
3
+ import { EmailDeliveryStatus } from './EmailDeliveryStatus';
4
+ export type EmailSetDeliveryStatusActionPayload = {
5
+ messageId: string;
6
+ deliveryStatus: EmailDeliveryStatus;
7
+ reason?: string;
8
+ };
9
+ export interface EmailSetDeliveryStatusAction extends Action<EmailSetDeliveryStatusActionPayload> {
10
+ type: EmailActionType.SetDeliveryStatus;
11
+ payload: EmailSetDeliveryStatusActionPayload;
12
+ }
13
+ export type EmailSetDeliveryStatusActionProcessor = ActionProcessor<EmailSetDeliveryStatusAction, void>;
14
+ export type EmailSetDeliveryStatusActionRequester = ActionRequester<EmailSetDeliveryStatusAction, void>;
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=EmailSetDeliveryStatusActionTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EmailSetDeliveryStatusActionTypes.js","sourceRoot":"","sources":["../../../../src/actions/email/EmailSetDeliveryStatusActionTypes.ts"],"names":[],"mappings":"","sourcesContent":["import { Action, ActionProcessor, ActionRequester } from 'quidproquo-core';\n\nimport { EmailActionType } from './EmailActionType';\nimport { EmailDeliveryStatus } from './EmailDeliveryStatus';\n\n// Payload\nexport type EmailSetDeliveryStatusActionPayload = {\n messageId: string;\n deliveryStatus: EmailDeliveryStatus;\n\n // Provider detail: drop reason, SMTP response for deferrals, bounce text\n reason?: string;\n};\n\n// Action\nexport interface EmailSetDeliveryStatusAction extends Action<EmailSetDeliveryStatusActionPayload> {\n type: EmailActionType.SetDeliveryStatus;\n payload: EmailSetDeliveryStatusActionPayload;\n}\n\n// Function Types\nexport type EmailSetDeliveryStatusActionProcessor = ActionProcessor<EmailSetDeliveryStatusAction, void>;\nexport type EmailSetDeliveryStatusActionRequester = ActionRequester<EmailSetDeliveryStatusAction, void>;\n"]}
@@ -0,0 +1,6 @@
1
+ export * from './EmailActionType';
2
+ export * from './EmailDeliveryStatus';
3
+ export * from './EmailSendEmailActionRequester';
4
+ export * from './EmailSendEmailActionTypes';
5
+ export * from './EmailSetDeliveryStatusActionRequester';
6
+ export * from './EmailSetDeliveryStatusActionTypes';
@@ -0,0 +1,23 @@
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("./EmailActionType"), exports);
18
+ __exportStar(require("./EmailDeliveryStatus"), exports);
19
+ __exportStar(require("./EmailSendEmailActionRequester"), exports);
20
+ __exportStar(require("./EmailSendEmailActionTypes"), exports);
21
+ __exportStar(require("./EmailSetDeliveryStatusActionRequester"), exports);
22
+ __exportStar(require("./EmailSetDeliveryStatusActionTypes"), exports);
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/actions/email/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oDAAkC;AAClC,wDAAsC;AACtC,kEAAgD;AAChD,8DAA4C;AAC5C,0EAAwD;AACxD,sEAAoD","sourcesContent":["export * from './EmailActionType';\nexport * from './EmailDeliveryStatus';\nexport * from './EmailSendEmailActionRequester';\nexport * from './EmailSendEmailActionTypes';\nexport * from './EmailSetDeliveryStatusActionRequester';\nexport * from './EmailSetDeliveryStatusActionTypes';\n"]}
@@ -1,6 +1,8 @@
1
1
  export * from './admin';
2
+ export * from './api';
2
3
  export * from './apiKeyValidation';
3
4
  export * from './dns';
5
+ export * from './email';
4
6
  export * from './genericDataResource';
5
7
  export * from './openApiSpec';
6
8
  export * from './routeAuthValidation';
@@ -15,8 +15,10 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./admin"), exports);
18
+ __exportStar(require("./api"), exports);
18
19
  __exportStar(require("./apiKeyValidation"), exports);
19
20
  __exportStar(require("./dns"), exports);
21
+ __exportStar(require("./email"), exports);
20
22
  __exportStar(require("./genericDataResource"), exports);
21
23
  __exportStar(require("./openApiSpec"), exports);
22
24
  __exportStar(require("./routeAuthValidation"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/actions/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,qDAAmC;AACnC,wCAAsB;AACtB,wDAAsC;AACtC,gDAA8B;AAC9B,wDAAsC;AACtC,oDAAkC;AAClC,6CAA2B;AAC3B,8CAA4B","sourcesContent":["export * from './admin';\nexport * from './apiKeyValidation';\nexport * from './dns';\nexport * from './genericDataResource';\nexport * from './openApiSpec';\nexport * from './routeAuthValidation';\nexport * from './serviceFunction';\nexport * from './webEntry';\nexport * from './websocket';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/actions/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,wCAAsB;AACtB,qDAAmC;AACnC,wCAAsB;AACtB,0CAAwB;AACxB,wDAAsC;AACtC,gDAA8B;AAC9B,wDAAsC;AACtC,oDAAkC;AAClC,6CAA2B;AAC3B,8CAA4B","sourcesContent":["export * from './admin';\nexport * from './api';\nexport * from './apiKeyValidation';\nexport * from './dns';\nexport * from './email';\nexport * from './genericDataResource';\nexport * from './openApiSpec';\nexport * from './routeAuthValidation';\nexport * from './serviceFunction';\nexport * from './webEntry';\nexport * from './websocket';\n"]}
@@ -2,6 +2,7 @@ export declare enum QPQWebServerConfigSettingType {
2
2
  Route = "@quidproquo-webserver/config/Route",
3
3
  DefaultRouteOptions = "@quidproquo-webserver/config/DefaultRouteOptions",
4
4
  Dns = "@quidproquo-webserver/config/Dns",
5
+ EmailSender = "@quidproquo-webserver/config/EmailSender",
5
6
  OpenApi = "@quidproquo-webserver/config/OpenApi",
6
7
  Seo = "@quidproquo-webserver/config/Seo",
7
8
  SubdomainRedirect = "@quidproquo-webserver/config/SubdomainRedirect",
@@ -6,6 +6,7 @@ var QPQWebServerConfigSettingType;
6
6
  QPQWebServerConfigSettingType["Route"] = "@quidproquo-webserver/config/Route";
7
7
  QPQWebServerConfigSettingType["DefaultRouteOptions"] = "@quidproquo-webserver/config/DefaultRouteOptions";
8
8
  QPQWebServerConfigSettingType["Dns"] = "@quidproquo-webserver/config/Dns";
9
+ QPQWebServerConfigSettingType["EmailSender"] = "@quidproquo-webserver/config/EmailSender";
9
10
  QPQWebServerConfigSettingType["OpenApi"] = "@quidproquo-webserver/config/OpenApi";
10
11
  QPQWebServerConfigSettingType["Seo"] = "@quidproquo-webserver/config/Seo";
11
12
  QPQWebServerConfigSettingType["SubdomainRedirect"] = "@quidproquo-webserver/config/SubdomainRedirect";
@@ -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,iFAAgD,CAAA;IAChD,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 OpenApi = '@quidproquo-webserver/config/OpenApi',\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,6BAkBX;AAlBD,WAAY,6BAA6B;IACvC,6EAA4C,CAAA;IAC5C,yGAAwE,CAAA;IACxE,yEAAwC,CAAA;IACxC,yFAAwD,CAAA;IACxD,iFAAgD,CAAA;IAChD,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,EAlBW,6BAA6B,6CAA7B,6BAA6B,QAkBxC","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 OpenApi = '@quidproquo-webserver/config/OpenApi',\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"]}
@@ -6,5 +6,6 @@ export interface AuthSystemOptions {
6
6
  mfa?: UserDirectoryMfaSettings;
7
7
  basePath?: string;
8
8
  allowedOrigins?: string[];
9
+ accessTokenValidityMinutes?: number;
9
10
  }
10
11
  export declare const defineAuthSystem: (service: string, directoryName: string, options?: AuthSystemOptions) => QPQConfig;
@@ -23,6 +23,7 @@ const defineAuthSystem = (service, directoryName, options) => {
23
23
  selfSignUpEnabled: options === null || options === void 0 ? void 0 : options.selfSignUpEnabled,
24
24
  emailTemplates: options === null || options === void 0 ? void 0 : options.emailTemplates,
25
25
  mfa: options === null || options === void 0 ? void 0 : options.mfa,
26
+ accessTokenValidityMinutes: options === null || options === void 0 ? void 0 : options.accessTokenValidityMinutes,
26
27
  owner: { module: service },
27
28
  }),
28
29
  // The login endpoints and their handlers only deploy with the owning service.
@@ -31,6 +32,12 @@ const defineAuthSystem = (service, directoryName, options) => {
31
32
  (0, quidproquo_core_1.defineGlobal)(config_1.AUTH_USER_DIRECTORY_GLOBAL_KEY, directoryName),
32
33
  (0, defineAuthServiceRoute_1.defineAuthServiceRoute)('POST', `${basePath}/login`, 'login', routeOptions),
33
34
  (0, defineAuthServiceRoute_1.defineAuthServiceRoute)('POST', `${basePath}/refreshToken`, 'refreshToken', routeOptions),
35
+ // Public + best-effort (logout must never fail for the client, so it isn't
36
+ // edge-gated). /logout revokes just the caller's own refresh token (this device);
37
+ // /logoutEverywhere revokes all of the user's sessions (settings "sign out of all
38
+ // devices"). Each is self-authorizing: the refresh token / access token it carries.
39
+ (0, defineAuthServiceRoute_1.defineAuthServiceRoute)('POST', `${basePath}/logout`, 'logout', routeOptions),
40
+ (0, defineAuthServiceRoute_1.defineAuthServiceRoute)('POST', `${basePath}/logoutEverywhere`, 'logoutEverywhere', routeOptions),
34
41
  (0, defineAuthServiceRoute_1.defineAuthServiceRoute)('POST', `${basePath}/challenge`, 'respondToAuthChallenge', routeOptions),
35
42
  (0, defineAuthServiceRoute_1.defineAuthServiceRoute)('POST', `${basePath}/associateSoftwareToken`, 'associateSoftwareToken', routeOptions),
36
43
  (0, defineAuthServiceRoute_1.defineAuthServiceRoute)('POST', `${basePath}/forgotPassword`, 'forgotPassword', routeOptions),
@@ -1 +1 @@
1
- {"version":3,"file":"defineAuthSystem.js","sourceRoot":"","sources":["../../../../../src/config/settings/defineAuthSystem/defineAuthSystem.ts"],"names":[],"mappings":";;;AAAA,qDAAgJ;AAEhJ,0DAA+E;AAC/E,iGAA8F;AAiB9F,6EAA6E;AAC7E,+EAA+E;AAC/E,6EAA6E;AAC7E,8EAA8E;AAC9E,iCAAiC;AAC1B,MAAM,gBAAgB,GAAG,CAAC,OAAe,EAAE,aAAqB,EAAE,OAA2B,EAAa,EAAE;;IACjH,MAAM,QAAQ,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ,mCAAI,EAAE,CAAC;IAEzC,MAAM,YAAY,GAAG;QACnB,cAAc,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,cAAc;KACxC,CAAC;IAEF,OAAO;QACL,qEAAqE;QACrE,0EAA0E;QAC1E,IAAA,qCAAmB,EAAC,aAAa,EAAE;YACjC,aAAa,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,aAAa;YACrC,iBAAiB,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,iBAAiB;YAC7C,cAAc,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,cAAc;YACvC,GAAG,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,GAAG;YACjB,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE;SAC3B,CAAC;QAEF,8EAA8E;QAC9E,IAAA,uCAAqB,EAAC;YACpB,CAAC,OAAO,CAAC,EAAE;gBACT,IAAA,8BAAY,EAAC,uCAA8B,EAAE,aAAa,CAAC;gBAE3D,IAAA,+CAAsB,EAAC,MAAM,EAAE,GAAG,QAAQ,QAAQ,EAAE,OAAO,EAAE,YAAY,CAAC;gBAC1E,IAAA,+CAAsB,EAAC,MAAM,EAAE,GAAG,QAAQ,eAAe,EAAE,cAAc,EAAE,YAAY,CAAC;gBACxF,IAAA,+CAAsB,EAAC,MAAM,EAAE,GAAG,QAAQ,YAAY,EAAE,wBAAwB,EAAE,YAAY,CAAC;gBAC/F,IAAA,+CAAsB,EAAC,MAAM,EAAE,GAAG,QAAQ,yBAAyB,EAAE,wBAAwB,EAAE,YAAY,CAAC;gBAC5G,IAAA,+CAAsB,EAAC,MAAM,EAAE,GAAG,QAAQ,iBAAiB,EAAE,gBAAgB,EAAE,YAAY,CAAC;gBAC5F,IAAA,+CAAsB,EAAC,MAAM,EAAE,GAAG,QAAQ,yBAAyB,EAAE,uBAAuB,EAAE,YAAY,CAAC;gBAE3G,+DAA+D;gBAC/D,IAAA,+CAAsB,EAAC,MAAM,EAAE,GAAG,QAAQ,iBAAiB,EAAE,gBAAgB,kCACxE,YAAY,KACf,iBAAiB,EAAE;wBACjB,iBAAiB,EAAE,aAAa;qBACjC,IACD;aACH;SACF,CAAC;KACH,CAAC;AACJ,CAAC,CAAC;AAxCW,QAAA,gBAAgB,oBAwC3B","sourcesContent":["import { defineGlobal, defineServiceSettings, defineUserDirectory, EmailTemplates, QPQConfig, UserDirectoryMfaSettings } from 'quidproquo-core';\n\nimport { AUTH_USER_DIRECTORY_GLOBAL_KEY } from '../../../services/auth/config';\nimport { defineAuthServiceRoute } from '../../../services/auth/config/defineAuthServiceRoute';\n\nexport interface AuthSystemOptions {\n phoneRequired?: boolean;\n\n selfSignUpEnabled?: boolean;\n\n emailTemplates?: EmailTemplates;\n\n mfa?: UserDirectoryMfaSettings;\n\n // Path prefix applied to every auth route, e.g. '/auth' => '/auth/login'.\n basePath?: string;\n\n allowedOrigins?: string[];\n}\n\n// Bundles a complete username/password login flow: a user directory plus the\n// endpoints needed to log in, refresh tokens, respond to challenges, recover a\n// forgotten password, and change a password. The handler stories ship inside\n// quidproquo-webserver (services/auth) and resolve `directoryName` at runtime\n// from the global emitted below.\nexport const defineAuthSystem = (service: string, directoryName: string, options?: AuthSystemOptions): QPQConfig => {\n const basePath = options?.basePath ?? '';\n\n const routeOptions = {\n allowedOrigins: options?.allowedOrigins,\n };\n\n return [\n // The user directory is declared at the top level (ungated) so other\n // services in the application can reference it to validate access tokens.\n defineUserDirectory(directoryName, {\n phoneRequired: options?.phoneRequired,\n selfSignUpEnabled: options?.selfSignUpEnabled,\n emailTemplates: options?.emailTemplates,\n mfa: options?.mfa,\n owner: { module: service },\n }),\n\n // The login endpoints and their handlers only deploy with the owning service.\n defineServiceSettings({\n [service]: [\n defineGlobal(AUTH_USER_DIRECTORY_GLOBAL_KEY, directoryName),\n\n defineAuthServiceRoute('POST', `${basePath}/login`, 'login', routeOptions),\n defineAuthServiceRoute('POST', `${basePath}/refreshToken`, 'refreshToken', routeOptions),\n defineAuthServiceRoute('POST', `${basePath}/challenge`, 'respondToAuthChallenge', routeOptions),\n defineAuthServiceRoute('POST', `${basePath}/associateSoftwareToken`, 'associateSoftwareToken', routeOptions),\n defineAuthServiceRoute('POST', `${basePath}/forgotPassword`, 'forgotPassword', routeOptions),\n defineAuthServiceRoute('POST', `${basePath}/forgotPassword/confirm`, 'confirmForgotPassword', routeOptions),\n\n // Authenticated: the caller must present a valid access token.\n defineAuthServiceRoute('POST', `${basePath}/changePassword`, 'changePassword', {\n ...routeOptions,\n routeAuthSettings: {\n userDirectoryName: directoryName,\n },\n }),\n ],\n }),\n ];\n};\n"]}
1
+ {"version":3,"file":"defineAuthSystem.js","sourceRoot":"","sources":["../../../../../src/config/settings/defineAuthSystem/defineAuthSystem.ts"],"names":[],"mappings":";;;AAAA,qDAAgJ;AAEhJ,0DAA+E;AAC/E,iGAA8F;AAsB9F,6EAA6E;AAC7E,+EAA+E;AAC/E,6EAA6E;AAC7E,8EAA8E;AAC9E,iCAAiC;AAC1B,MAAM,gBAAgB,GAAG,CAAC,OAAe,EAAE,aAAqB,EAAE,OAA2B,EAAa,EAAE;;IACjH,MAAM,QAAQ,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ,mCAAI,EAAE,CAAC;IAEzC,MAAM,YAAY,GAAG;QACnB,cAAc,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,cAAc;KACxC,CAAC;IAEF,OAAO;QACL,qEAAqE;QACrE,0EAA0E;QAC1E,IAAA,qCAAmB,EAAC,aAAa,EAAE;YACjC,aAAa,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,aAAa;YACrC,iBAAiB,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,iBAAiB;YAC7C,cAAc,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,cAAc;YACvC,GAAG,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,GAAG;YACjB,0BAA0B,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,0BAA0B;YAC/D,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE;SAC3B,CAAC;QAEF,8EAA8E;QAC9E,IAAA,uCAAqB,EAAC;YACpB,CAAC,OAAO,CAAC,EAAE;gBACT,IAAA,8BAAY,EAAC,uCAA8B,EAAE,aAAa,CAAC;gBAE3D,IAAA,+CAAsB,EAAC,MAAM,EAAE,GAAG,QAAQ,QAAQ,EAAE,OAAO,EAAE,YAAY,CAAC;gBAC1E,IAAA,+CAAsB,EAAC,MAAM,EAAE,GAAG,QAAQ,eAAe,EAAE,cAAc,EAAE,YAAY,CAAC;gBACxF,2EAA2E;gBAC3E,kFAAkF;gBAClF,kFAAkF;gBAClF,oFAAoF;gBACpF,IAAA,+CAAsB,EAAC,MAAM,EAAE,GAAG,QAAQ,SAAS,EAAE,QAAQ,EAAE,YAAY,CAAC;gBAC5E,IAAA,+CAAsB,EAAC,MAAM,EAAE,GAAG,QAAQ,mBAAmB,EAAE,kBAAkB,EAAE,YAAY,CAAC;gBAChG,IAAA,+CAAsB,EAAC,MAAM,EAAE,GAAG,QAAQ,YAAY,EAAE,wBAAwB,EAAE,YAAY,CAAC;gBAC/F,IAAA,+CAAsB,EAAC,MAAM,EAAE,GAAG,QAAQ,yBAAyB,EAAE,wBAAwB,EAAE,YAAY,CAAC;gBAC5G,IAAA,+CAAsB,EAAC,MAAM,EAAE,GAAG,QAAQ,iBAAiB,EAAE,gBAAgB,EAAE,YAAY,CAAC;gBAC5F,IAAA,+CAAsB,EAAC,MAAM,EAAE,GAAG,QAAQ,yBAAyB,EAAE,uBAAuB,EAAE,YAAY,CAAC;gBAE3G,+DAA+D;gBAC/D,IAAA,+CAAsB,EAAC,MAAM,EAAE,GAAG,QAAQ,iBAAiB,EAAE,gBAAgB,kCACxE,YAAY,KACf,iBAAiB,EAAE;wBACjB,iBAAiB,EAAE,aAAa;qBACjC,IACD;aACH;SACF,CAAC;KACH,CAAC;AACJ,CAAC,CAAC;AA/CW,QAAA,gBAAgB,oBA+C3B","sourcesContent":["import { defineGlobal, defineServiceSettings, defineUserDirectory, EmailTemplates, QPQConfig, UserDirectoryMfaSettings } from 'quidproquo-core';\n\nimport { AUTH_USER_DIRECTORY_GLOBAL_KEY } from '../../../services/auth/config';\nimport { defineAuthServiceRoute } from '../../../services/auth/config/defineAuthServiceRoute';\n\nexport interface AuthSystemOptions {\n phoneRequired?: boolean;\n\n selfSignUpEnabled?: boolean;\n\n emailTemplates?: EmailTemplates;\n\n mfa?: UserDirectoryMfaSettings;\n\n // Path prefix applied to every auth route, e.g. '/auth' => '/auth/login'.\n basePath?: string;\n\n allowedOrigins?: string[];\n\n // Access/ID token (JWT) lifetime in minutes (Cognito 5–1440; omitted → default 60).\n // Shorter shrinks the post-revocation window in which a stateless access token still\n // works. Keep comfortably above 10 (the web client refreshes ~10 min before expiry).\n accessTokenValidityMinutes?: number;\n}\n\n// Bundles a complete username/password login flow: a user directory plus the\n// endpoints needed to log in, refresh tokens, respond to challenges, recover a\n// forgotten password, and change a password. The handler stories ship inside\n// quidproquo-webserver (services/auth) and resolve `directoryName` at runtime\n// from the global emitted below.\nexport const defineAuthSystem = (service: string, directoryName: string, options?: AuthSystemOptions): QPQConfig => {\n const basePath = options?.basePath ?? '';\n\n const routeOptions = {\n allowedOrigins: options?.allowedOrigins,\n };\n\n return [\n // The user directory is declared at the top level (ungated) so other\n // services in the application can reference it to validate access tokens.\n defineUserDirectory(directoryName, {\n phoneRequired: options?.phoneRequired,\n selfSignUpEnabled: options?.selfSignUpEnabled,\n emailTemplates: options?.emailTemplates,\n mfa: options?.mfa,\n accessTokenValidityMinutes: options?.accessTokenValidityMinutes,\n owner: { module: service },\n }),\n\n // The login endpoints and their handlers only deploy with the owning service.\n defineServiceSettings({\n [service]: [\n defineGlobal(AUTH_USER_DIRECTORY_GLOBAL_KEY, directoryName),\n\n defineAuthServiceRoute('POST', `${basePath}/login`, 'login', routeOptions),\n defineAuthServiceRoute('POST', `${basePath}/refreshToken`, 'refreshToken', routeOptions),\n // Public + best-effort (logout must never fail for the client, so it isn't\n // edge-gated). /logout revokes just the caller's own refresh token (this device);\n // /logoutEverywhere revokes all of the user's sessions (settings \"sign out of all\n // devices\"). Each is self-authorizing: the refresh token / access token it carries.\n defineAuthServiceRoute('POST', `${basePath}/logout`, 'logout', routeOptions),\n defineAuthServiceRoute('POST', `${basePath}/logoutEverywhere`, 'logoutEverywhere', routeOptions),\n defineAuthServiceRoute('POST', `${basePath}/challenge`, 'respondToAuthChallenge', routeOptions),\n defineAuthServiceRoute('POST', `${basePath}/associateSoftwareToken`, 'associateSoftwareToken', routeOptions),\n defineAuthServiceRoute('POST', `${basePath}/forgotPassword`, 'forgotPassword', routeOptions),\n defineAuthServiceRoute('POST', `${basePath}/forgotPassword/confirm`, 'confirmForgotPassword', routeOptions),\n\n // Authenticated: the caller must present a valid access token.\n defineAuthServiceRoute('POST', `${basePath}/changePassword`, 'changePassword', {\n ...routeOptions,\n routeAuthSettings: {\n userDirectoryName: directoryName,\n },\n }),\n ],\n }),\n ];\n};\n"]}
@@ -0,0 +1,5 @@
1
+ import { QPQConfigSetting } from 'quidproquo-core';
2
+ export interface EmailSenderQPQWebServerConfigSetting extends QPQConfigSetting {
3
+ rootDomain: string;
4
+ }
5
+ export declare const defineEmailSender: (rootDomain: string) => EmailSenderQPQWebServerConfigSetting;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.defineEmailSender = void 0;
4
+ const QPQConfig_1 = require("../QPQConfig");
5
+ const defineEmailSender = (rootDomain) => {
6
+ return {
7
+ configSettingType: QPQConfig_1.QPQWebServerConfigSettingType.EmailSender,
8
+ uniqueKey: rootDomain,
9
+ rootDomain,
10
+ };
11
+ };
12
+ exports.defineEmailSender = defineEmailSender;
13
+ //# sourceMappingURL=emailSender.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emailSender.js","sourceRoot":"","sources":["../../../../src/config/settings/emailSender.ts"],"names":[],"mappings":";;;AAEA,4CAA6D;AAMtD,MAAM,iBAAiB,GAAG,CAAC,UAAkB,EAAwC,EAAE;IAC5F,OAAO;QACL,iBAAiB,EAAE,yCAA6B,CAAC,WAAW;QAC5D,SAAS,EAAE,UAAU;QAErB,UAAU;KACX,CAAC;AACJ,CAAC,CAAC;AAPW,QAAA,iBAAiB,qBAO5B","sourcesContent":["import { QPQConfigSetting } from 'quidproquo-core';\n\nimport { QPQWebServerConfigSettingType } from '../QPQConfig';\n\nexport interface EmailSenderQPQWebServerConfigSetting extends QPQConfigSetting {\n rootDomain: string;\n}\n\nexport const defineEmailSender = (rootDomain: string): EmailSenderQPQWebServerConfigSetting => {\n return {\n configSettingType: QPQWebServerConfigSettingType.EmailSender,\n uniqueKey: rootDomain,\n\n rootDomain,\n };\n};\n"]}
@@ -6,6 +6,7 @@ export * from './defaultRouteOptions';
6
6
  export * from './defineAuthSystem';
7
7
  export * from './dns';
8
8
  export * from './domainProxy';
9
+ export * from './emailSender';
9
10
  export * from './fileUploadSettings';
10
11
  export * from './migration';
11
12
  export * from './openApi';
@@ -22,6 +22,7 @@ __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("./emailSender"), exports);
25
26
  __exportStar(require("./fileUploadSettings"), exports);
26
27
  __exportStar(require("./migration"), exports);
27
28
  __exportStar(require("./openApi"), 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,uDAAqC;AACrC,8CAA4B;AAC5B,4CAA0B;AAC1B,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 './fileUploadSettings';\nexport * from './migration';\nexport * from './openApi';\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,gDAA8B;AAC9B,uDAAqC;AACrC,8CAA4B;AAC5B,4CAA0B;AAC1B,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 './openApi';\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"]}
@@ -2,6 +2,8 @@ import { AskResponse } from 'quidproquo-core';
2
2
  import { HTTPEvent, HTTPEventResponse } from '../../../../types';
3
3
  export declare function login(event: HTTPEvent): AskResponse<HTTPEventResponse>;
4
4
  export declare function refreshToken(event: HTTPEvent): AskResponse<HTTPEventResponse>;
5
+ export declare function logout(event: HTTPEvent): AskResponse<HTTPEventResponse>;
6
+ export declare function logoutEverywhere(event: HTTPEvent): AskResponse<HTTPEventResponse>;
5
7
  export declare function respondToAuthChallenge(event: HTTPEvent): AskResponse<HTTPEventResponse>;
6
8
  export declare function associateSoftwareToken(event: HTTPEvent): AskResponse<HTTPEventResponse>;
7
9
  export declare function forgotPassword(event: HTTPEvent): AskResponse<HTTPEventResponse>;
@@ -2,6 +2,8 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.login = login;
4
4
  exports.refreshToken = refreshToken;
5
+ exports.logout = logout;
6
+ exports.logoutEverywhere = logoutEverywhere;
5
7
  exports.respondToAuthChallenge = respondToAuthChallenge;
6
8
  exports.associateSoftwareToken = associateSoftwareToken;
7
9
  exports.forgotPassword = forgotPassword;
@@ -65,6 +67,27 @@ function* refreshToken(event) {
65
67
  const refreshResponse = yield* logic_1.authLogic.askRefreshToken(refreshToken);
66
68
  return index_1.qpqWebServerUtils.toJsonEventResponse(refreshResponse);
67
69
  }
70
+ function* logout(event) {
71
+ // "Log out this device": revoke ONLY the caller's own refresh token (Cognito RevokeToken),
72
+ // leaving the user's other sessions signed in. The client sends its refresh token in the
73
+ // body. Best-effort — logout must always succeed for the client (it clears local state
74
+ // regardless), so an already-revoked/invalid token is swallowed rather than 4xx'd. Public
75
+ // route: possessing the refresh token is the authorization (you can only revoke your own).
76
+ const { refreshToken } = yield* index_1.qpqWebServerUtils.askFromValidJsonEventRequest(event, requireStringFields('refreshToken'));
77
+ yield* (0, quidproquo_core_1.askCatch)(logic_1.authLogic.askRevokeSession(refreshToken));
78
+ return index_1.qpqWebServerUtils.toJsonEventResponse({ success: true });
79
+ }
80
+ function* logoutEverywhere(event) {
81
+ // "Log out everywhere": revoke EVERY refresh token for the user (Cognito GlobalSignOut),
82
+ // for a user-settings "sign out of all devices" action. Authorized by the access token in
83
+ // the header (GlobalSignOut validates it at Cognito). Best-effort / always 200, same as
84
+ // above — swallow an invalid/expired token rather than failing the client's logout.
85
+ const accessToken = index_1.qpqWebServerUtils.getAccessTokenFromHeaders(event.headers);
86
+ if (accessToken) {
87
+ yield* (0, quidproquo_core_1.askCatch)(logic_1.authLogic.askSignOut(accessToken));
88
+ }
89
+ return index_1.qpqWebServerUtils.toJsonEventResponse({ success: true });
90
+ }
68
91
  function* respondToAuthChallenge(event) {
69
92
  const payload = yield* index_1.qpqWebServerUtils.askFromValidJsonEventRequest(event, requireStringFields('email', 'session', 'challenge'));
70
93
  const authChallenge = yield* askChallengePayloadToAuthChallenge(payload);