@payloadcms/plugin-stripe 0.0.15 → 0.0.16-beta.1

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 (52) hide show
  1. package/README.md +36 -36
  2. package/dist/admin.js +33 -32
  3. package/dist/extendWebpackConfig.js +28 -26
  4. package/dist/fields/getFields.js +36 -42
  5. package/dist/hooks/createNewInStripe.js +82 -124
  6. package/dist/hooks/deleteFromStripe.js +44 -87
  7. package/dist/hooks/syncExistingWithStripe.js +55 -93
  8. package/dist/index.js +109 -135
  9. package/dist/routes/rest.js +35 -76
  10. package/dist/routes/webhooks.js +59 -94
  11. package/dist/types.js +5 -2
  12. package/dist/ui/LinkToDoc.js +43 -31
  13. package/dist/utilities/deepen.js +20 -17
  14. package/dist/utilities/stripeProxy.js +52 -88
  15. package/dist/webhooks/handleCreatedOrUpdated.js +125 -196
  16. package/dist/webhooks/handleDeleted.js +53 -102
  17. package/dist/webhooks/index.js +55 -89
  18. package/package.json +12 -27
  19. package/types.d.ts +1 -1
  20. package/types.js +1 -1
  21. package/dist/admin.d.ts +0 -3
  22. package/dist/admin.js.map +0 -1
  23. package/dist/extendWebpackConfig.d.ts +0 -3
  24. package/dist/extendWebpackConfig.js.map +0 -1
  25. package/dist/fields/getFields.d.ts +0 -11
  26. package/dist/fields/getFields.js.map +0 -1
  27. package/dist/hooks/createNewInStripe.d.ts +0 -7
  28. package/dist/hooks/createNewInStripe.js.map +0 -1
  29. package/dist/hooks/deleteFromStripe.d.ts +0 -7
  30. package/dist/hooks/deleteFromStripe.js.map +0 -1
  31. package/dist/hooks/syncExistingWithStripe.d.ts +0 -7
  32. package/dist/hooks/syncExistingWithStripe.js.map +0 -1
  33. package/dist/index.d.ts +0 -3
  34. package/dist/index.js.map +0 -1
  35. package/dist/routes/rest.d.ts +0 -9
  36. package/dist/routes/rest.js.map +0 -1
  37. package/dist/routes/webhooks.d.ts +0 -11
  38. package/dist/routes/webhooks.js.map +0 -1
  39. package/dist/types.d.ts +0 -44
  40. package/dist/types.js.map +0 -1
  41. package/dist/ui/LinkToDoc.d.ts +0 -7
  42. package/dist/ui/LinkToDoc.js.map +0 -1
  43. package/dist/utilities/deepen.d.ts +0 -1
  44. package/dist/utilities/deepen.js.map +0 -1
  45. package/dist/utilities/stripeProxy.d.ts +0 -2
  46. package/dist/utilities/stripeProxy.js.map +0 -1
  47. package/dist/webhooks/handleCreatedOrUpdated.d.ts +0 -7
  48. package/dist/webhooks/handleCreatedOrUpdated.js.map +0 -1
  49. package/dist/webhooks/handleDeleted.d.ts +0 -7
  50. package/dist/webhooks/handleDeleted.js.map +0 -1
  51. package/dist/webhooks/index.d.ts +0 -2
  52. package/dist/webhooks/index.js.map +0 -1
@@ -1,130 +1,88 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __generator = (this && this.__generator) || function (thisArg, body) {
12
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
- function verb(n) { return function (v) { return step([n, v]); }; }
15
- function step(op) {
16
- if (f) throw new TypeError("Generator is already executing.");
17
- while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
- if (y = 0, t) op = [op[0] & 2, t.value];
20
- switch (op[0]) {
21
- case 0: case 1: t = op; break;
22
- case 4: _.label++; return { value: op[1], done: false };
23
- case 5: _.label++; y = op[1]; op = [0]; continue;
24
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
- default:
26
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
- if (t[2]) _.ops.pop();
31
- _.trys.pop(); continue;
32
- }
33
- op = body.call(thisArg, _);
34
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "createNewInStripe", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return createNewInStripe;
36
9
  }
37
- };
38
- var __importDefault = (this && this.__importDefault) || function (mod) {
39
- return (mod && mod.__esModule) ? mod : { "default": mod };
40
- };
41
- Object.defineProperty(exports, "__esModule", { value: true });
42
- exports.createNewInStripe = void 0;
43
- var errors_1 = require("payload/errors");
44
- var stripe_1 = __importDefault(require("stripe"));
45
- var deepen_1 = require("../utilities/deepen");
46
- var stripeSecretKey = process.env.STRIPE_SECRET_KEY;
47
- var stripe = new stripe_1.default(stripeSecretKey || '', { apiVersion: '2022-08-01' });
48
- var createNewInStripe = function (args) { return __awaiter(void 0, void 0, void 0, function () {
49
- var req, operation, data, collection, stripeConfig, _a, sync, logs, payload, dataRef, collectionSlug_1, syncConfig, syncedFields, stripeResource, error_1, msg, stripeResource, error_2, msg;
50
- var _b, _c;
51
- return __generator(this, function (_d) {
52
- switch (_d.label) {
53
- case 0:
54
- req = args.req, operation = args.operation, data = args.data, collection = args.collection, stripeConfig = args.stripeConfig;
55
- _a = stripeConfig || {}, sync = _a.sync, logs = _a.logs;
56
- payload = req === null || req === void 0 ? void 0 : req.payload;
57
- dataRef = data || {};
58
- if (process.env.NODE_ENV === 'test') {
59
- dataRef.stripeID = 'test';
60
- return [2 /*return*/, dataRef];
61
- }
62
- if (!payload) return [3 /*break*/, 9];
63
- if (!(data === null || data === void 0 ? void 0 : data.skipSync)) return [3 /*break*/, 1];
64
- if (logs)
65
- payload.logger.info("Bypassing collection-level hooks.");
66
- return [3 /*break*/, 9];
67
- case 1:
68
- // initialize as 'false' so that all Payload admin events sync to Stripe
69
- // then conditionally set to 'true' to for events that originate from webhooks
70
- // this will prevent webhook events from triggering an unnecessary sync / infinite loop
71
- dataRef.skipSync = false;
72
- collectionSlug_1 = (collection || {}).slug;
73
- syncConfig = sync === null || sync === void 0 ? void 0 : sync.find(function (conf) { return conf.collection === collectionSlug_1; });
74
- if (!syncConfig) return [3 /*break*/, 9];
75
- syncedFields = syncConfig.fields.reduce(function (acc, field) {
76
- var fieldPath = field.fieldPath, stripeProperty = field.stripeProperty;
10
+ });
11
+ const _errors = require("payload/errors");
12
+ const _stripe = /*#__PURE__*/ _interop_require_default(require("stripe"));
13
+ const _deepen = require("../utilities/deepen");
14
+ function _interop_require_default(obj) {
15
+ return obj && obj.__esModule ? obj : {
16
+ default: obj
17
+ };
18
+ }
19
+ const stripeSecretKey = process.env.STRIPE_SECRET_KEY;
20
+ const stripe = new _stripe.default(stripeSecretKey || '', {
21
+ apiVersion: '2022-08-01'
22
+ });
23
+ const createNewInStripe = async (args)=>{
24
+ const { collection, data, operation, req, stripeConfig } = args;
25
+ const { logs, sync } = stripeConfig || {};
26
+ const payload = req?.payload;
27
+ const dataRef = data || {};
28
+ if (process.env.NODE_ENV === 'test') {
29
+ dataRef.stripeID = 'test';
30
+ return dataRef;
31
+ }
32
+ if (payload) {
33
+ if (data?.skipSync) {
34
+ if (logs) payload.logger.info(`Bypassing collection-level hooks.`);
35
+ } else {
36
+ // initialize as 'false' so that all Payload admin events sync to Stripe
37
+ // then conditionally set to 'true' to for events that originate from webhooks
38
+ // this will prevent webhook events from triggering an unnecessary sync / infinite loop
39
+ dataRef.skipSync = false;
40
+ const { slug: collectionSlug } = collection || {};
41
+ const syncConfig = sync?.find((conf)=>conf.collection === collectionSlug);
42
+ if (syncConfig) {
43
+ // combine all fields of this object and match their respective values within the document
44
+ let syncedFields = syncConfig.fields.reduce((acc, field)=>{
45
+ const { fieldPath, stripeProperty } = field;
77
46
  acc[stripeProperty] = dataRef[fieldPath];
78
47
  return acc;
79
48
  }, {});
80
- syncedFields = (0, deepen_1.deepen)(syncedFields);
81
- if (!(operation === 'update')) return [3 /*break*/, 5];
82
- if (logs)
83
- payload.logger.info("A '".concat(collectionSlug_1, "' document has changed in Payload with ID: '").concat(data === null || data === void 0 ? void 0 : data.id, "', syncing with Stripe..."));
84
- if (!!dataRef.stripeID) return [3 /*break*/, 5];
85
- _d.label = 2;
86
- case 2:
87
- _d.trys.push([2, 4, , 5]);
88
- return [4 /*yield*/, ((_b = stripe === null || stripe === void 0 ? void 0 : stripe[syncConfig.stripeResourceType]) === null || _b === void 0 ? void 0 : _b.create(syncedFields))];
89
- case 3:
90
- stripeResource = _d.sent();
91
- if (logs)
92
- payload.logger.info("\u2705 Successfully created new '".concat(syncConfig.stripeResourceType, "' resource in Stripe with ID: '").concat(stripeResource.id, "'."));
93
- dataRef.stripeID = stripeResource.id;
94
- // NOTE: this is to prevent sync in the "afterChange" hook
95
- dataRef.skipSync = true;
96
- return [3 /*break*/, 5];
97
- case 4:
98
- error_1 = _d.sent();
99
- msg = error_1 instanceof Error ? error_1.message : error_1;
100
- if (logs)
101
- payload.logger.error("- Error creating Stripe document: ".concat(msg));
102
- return [3 /*break*/, 5];
103
- case 5:
104
- if (!(operation === 'create')) return [3 /*break*/, 9];
105
- if (logs)
106
- payload.logger.info("A new '".concat(collectionSlug_1, "' document was created in Payload with ID: '").concat(data === null || data === void 0 ? void 0 : data.id, "', syncing with Stripe..."));
107
- _d.label = 6;
108
- case 6:
109
- _d.trys.push([6, 8, , 9]);
110
- if (logs)
111
- payload.logger.info("- Creating new '".concat(syncConfig.stripeResourceType, "' resource in Stripe..."));
112
- return [4 /*yield*/, ((_c = stripe === null || stripe === void 0 ? void 0 : stripe[syncConfig.stripeResourceType]) === null || _c === void 0 ? void 0 : _c.create(syncedFields))];
113
- case 7:
114
- stripeResource = _d.sent();
115
- if (logs)
116
- payload.logger.info("\u2705 Successfully created new '".concat(syncConfig.stripeResourceType, "' resource in Stripe with ID: '").concat(stripeResource.id, "'."));
117
- dataRef.stripeID = stripeResource.id;
118
- // IMPORTANT: this is to prevent sync in the "afterChange" hook
119
- dataRef.skipSync = true;
120
- return [3 /*break*/, 9];
121
- case 8:
122
- error_2 = _d.sent();
123
- msg = error_2 instanceof Error ? error_2.message : error_2;
124
- throw new errors_1.APIError("Failed to create new '".concat(syncConfig.stripeResourceType, "' resource in Stripe: ").concat(msg));
125
- case 9: return [2 /*return*/, dataRef];
49
+ syncedFields = (0, _deepen.deepen)(syncedFields);
50
+ if (operation === 'update') {
51
+ if (logs) payload.logger.info(`A '${collectionSlug}' document has changed in Payload with ID: '${data?.id}', syncing with Stripe...`);
52
+ // NOTE: the Stripe document will be created in the "afterChange" hook, so create a new stripe document here if no stripeID exists
53
+ if (!dataRef.stripeID) {
54
+ try {
55
+ // NOTE: Typed as "any" because the "create" method is not standard across all Stripe resources
56
+ const stripeResource = await stripe?.[syncConfig.stripeResourceType]?.create(syncedFields);
57
+ if (logs) payload.logger.info(`✅ Successfully created new '${syncConfig.stripeResourceType}' resource in Stripe with ID: '${stripeResource.id}'.`);
58
+ dataRef.stripeID = stripeResource.id;
59
+ // NOTE: this is to prevent sync in the "afterChange" hook
60
+ dataRef.skipSync = true;
61
+ } catch (error) {
62
+ const msg = error instanceof Error ? error.message : error;
63
+ if (logs) payload.logger.error(`- Error creating Stripe document: ${msg}`);
64
+ }
65
+ }
66
+ }
67
+ if (operation === 'create') {
68
+ if (logs) payload.logger.info(`A new '${collectionSlug}' document was created in Payload with ID: '${data?.id}', syncing with Stripe...`);
69
+ try {
70
+ if (logs) payload.logger.info(`- Creating new '${syncConfig.stripeResourceType}' resource in Stripe...`);
71
+ // NOTE: Typed as "any" because the "create" method is not standard across all Stripe resources
72
+ const stripeResource = await stripe?.[syncConfig.stripeResourceType]?.create(syncedFields);
73
+ if (logs) payload.logger.info(`✅ Successfully created new '${syncConfig.stripeResourceType}' resource in Stripe with ID: '${stripeResource.id}'.`);
74
+ dataRef.stripeID = stripeResource.id;
75
+ // IMPORTANT: this is to prevent sync in the "afterChange" hook
76
+ dataRef.skipSync = true;
77
+ } catch (error) {
78
+ const msg = error instanceof Error ? error.message : error;
79
+ throw new _errors.APIError(`Failed to create new '${syncConfig.stripeResourceType}' resource in Stripe: ${msg}`);
80
+ }
81
+ }
82
+ }
126
83
  }
127
- });
128
- }); };
129
- exports.createNewInStripe = createNewInStripe;
130
- //# sourceMappingURL=createNewInStripe.js.map
84
+ }
85
+ return dataRef;
86
+ };
87
+
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy9jcmVhdGVOZXdJblN0cmlwZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENvbGxlY3Rpb25CZWZvcmVWYWxpZGF0ZUhvb2ssIENvbGxlY3Rpb25Db25maWcgfSBmcm9tICdwYXlsb2FkL3R5cGVzJ1xuXG5pbXBvcnQgeyBBUElFcnJvciB9IGZyb20gJ3BheWxvYWQvZXJyb3JzJ1xuaW1wb3J0IFN0cmlwZSBmcm9tICdzdHJpcGUnXG5cbmltcG9ydCB0eXBlIHsgU3RyaXBlQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnXG5cbmltcG9ydCB7IGRlZXBlbiB9IGZyb20gJy4uL3V0aWxpdGllcy9kZWVwZW4nXG5cbmNvbnN0IHN0cmlwZVNlY3JldEtleSA9IHByb2Nlc3MuZW52LlNUUklQRV9TRUNSRVRfS0VZXG5jb25zdCBzdHJpcGUgPSBuZXcgU3RyaXBlKHN0cmlwZVNlY3JldEtleSB8fCAnJywgeyBhcGlWZXJzaW9uOiAnMjAyMi0wOC0wMScgfSlcblxuZXhwb3J0IHR5cGUgQ29sbGVjdGlvbkJlZm9yZVZhbGlkYXRlSG9va1dpdGhBcmdzID0gKFxuICBhcmdzOiBQYXJhbWV0ZXJzPENvbGxlY3Rpb25CZWZvcmVWYWxpZGF0ZUhvb2s+WzBdICYge1xuICAgIGNvbGxlY3Rpb24/OiBDb2xsZWN0aW9uQ29uZmlnXG4gICAgc3RyaXBlQ29uZmlnPzogU3RyaXBlQ29uZmlnXG4gIH0sXG4pID0+IHZvaWRcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZU5ld0luU3RyaXBlOiBDb2xsZWN0aW9uQmVmb3JlVmFsaWRhdGVIb29rV2l0aEFyZ3MgPSBhc3luYyAoYXJncykgPT4ge1xuICBjb25zdCB7IGNvbGxlY3Rpb24sIGRhdGEsIG9wZXJhdGlvbiwgcmVxLCBzdHJpcGVDb25maWcgfSA9IGFyZ3NcblxuICBjb25zdCB7IGxvZ3MsIHN5bmMgfSA9IHN0cmlwZUNvbmZpZyB8fCB7fVxuXG4gIGNvbnN0IHBheWxvYWQgPSByZXE/LnBheWxvYWRcblxuICBjb25zdCBkYXRhUmVmID0gZGF0YSB8fCB7fVxuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Rlc3QnKSB7XG4gICAgZGF0YVJlZi5zdHJpcGVJRCA9ICd0ZXN0J1xuICAgIHJldHVybiBkYXRhUmVmXG4gIH1cblxuICBpZiAocGF5bG9hZCkge1xuICAgIGlmIChkYXRhPy5za2lwU3luYykge1xuICAgICAgaWYgKGxvZ3MpIHBheWxvYWQubG9nZ2VyLmluZm8oYEJ5cGFzc2luZyBjb2xsZWN0aW9uLWxldmVsIGhvb2tzLmApXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGluaXRpYWxpemUgYXMgJ2ZhbHNlJyBzbyB0aGF0IGFsbCBQYXlsb2FkIGFkbWluIGV2ZW50cyBzeW5jIHRvIFN0cmlwZVxuICAgICAgLy8gdGhlbiBjb25kaXRpb25hbGx5IHNldCB0byAndHJ1ZScgdG8gZm9yIGV2ZW50cyB0aGF0IG9yaWdpbmF0ZSBmcm9tIHdlYmhvb2tzXG4gICAgICAvLyB0aGlzIHdpbGwgcHJldmVudCB3ZWJob29rIGV2ZW50cyBmcm9tIHRyaWdnZXJpbmcgYW4gdW5uZWNlc3Nhcnkgc3luYyAvIGluZmluaXRlIGxvb3BcbiAgICAgIGRhdGFSZWYuc2tpcFN5bmMgPSBmYWxzZVxuXG4gICAgICBjb25zdCB7IHNsdWc6IGNvbGxlY3Rpb25TbHVnIH0gPSBjb2xsZWN0aW9uIHx8IHt9XG4gICAgICBjb25zdCBzeW5jQ29uZmlnID0gc3luYz8uZmluZCgoY29uZikgPT4gY29uZi5jb2xsZWN0aW9uID09PSBjb2xsZWN0aW9uU2x1ZylcblxuICAgICAgaWYgKHN5bmNDb25maWcpIHtcbiAgICAgICAgLy8gY29tYmluZSBhbGwgZmllbGRzIG9mIHRoaXMgb2JqZWN0IGFuZCBtYXRjaCB0aGVpciByZXNwZWN0aXZlIHZhbHVlcyB3aXRoaW4gdGhlIGRvY3VtZW50XG4gICAgICAgIGxldCBzeW5jZWRGaWVsZHMgPSBzeW5jQ29uZmlnLmZpZWxkcy5yZWR1Y2UoXG4gICAgICAgICAgKGFjYywgZmllbGQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgZmllbGRQYXRoLCBzdHJpcGVQcm9wZXJ0eSB9ID0gZmllbGRcblxuICAgICAgICAgICAgYWNjW3N0cmlwZVByb3BlcnR5XSA9IGRhdGFSZWZbZmllbGRQYXRoXVxuICAgICAgICAgICAgcmV0dXJuIGFjY1xuICAgICAgICAgIH0sXG4gICAgICAgICAge30gYXMgUmVjb3JkPHN0cmluZywgYW55PixcbiAgICAgICAgKVxuXG4gICAgICAgIHN5bmNlZEZpZWxkcyA9IGRlZXBlbihzeW5jZWRGaWVsZHMpXG5cbiAgICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gJ3VwZGF0ZScpIHtcbiAgICAgICAgICBpZiAobG9ncylcbiAgICAgICAgICAgIHBheWxvYWQubG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAgIGBBICcke2NvbGxlY3Rpb25TbHVnfScgZG9jdW1lbnQgaGFzIGNoYW5nZWQgaW4gUGF5bG9hZCB3aXRoIElEOiAnJHtkYXRhPy5pZH0nLCBzeW5jaW5nIHdpdGggU3RyaXBlLi4uYCxcbiAgICAgICAgICAgIClcblxuICAgICAgICAgIC8vIE5PVEU6IHRoZSBTdHJpcGUgZG9jdW1lbnQgd2lsbCBiZSBjcmVhdGVkIGluIHRoZSBcImFmdGVyQ2hhbmdlXCIgaG9vaywgc28gY3JlYXRlIGEgbmV3IHN0cmlwZSBkb2N1bWVudCBoZXJlIGlmIG5vIHN0cmlwZUlEIGV4aXN0c1xuICAgICAgICAgIGlmICghZGF0YVJlZi5zdHJpcGVJRCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgLy8gTk9URTogVHlwZWQgYXMgXCJhbnlcIiBiZWNhdXNlIHRoZSBcImNyZWF0ZVwiIG1ldGhvZCBpcyBub3Qgc3RhbmRhcmQgYWNyb3NzIGFsbCBTdHJpcGUgcmVzb3VyY2VzXG4gICAgICAgICAgICAgIGNvbnN0IHN0cmlwZVJlc291cmNlID0gYXdhaXQgc3RyaXBlPy5bc3luY0NvbmZpZy5zdHJpcGVSZXNvdXJjZVR5cGVdPy5jcmVhdGUoXG4gICAgICAgICAgICAgICAgc3luY2VkRmllbGRzIGFzIGFueSxcbiAgICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICAgIGlmIChsb2dzKVxuICAgICAgICAgICAgICAgIHBheWxvYWQubG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAgICAgICBg4pyFIFN1Y2Nlc3NmdWxseSBjcmVhdGVkIG5ldyAnJHtzeW5jQ29uZmlnLnN0cmlwZVJlc291cmNlVHlwZX0nIHJlc291cmNlIGluIFN0cmlwZSB3aXRoIElEOiAnJHtzdHJpcGVSZXNvdXJjZS5pZH0nLmAsXG4gICAgICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICAgIGRhdGFSZWYuc3RyaXBlSUQgPSBzdHJpcGVSZXNvdXJjZS5pZFxuXG4gICAgICAgICAgICAgIC8vIE5PVEU6IHRoaXMgaXMgdG8gcHJldmVudCBzeW5jIGluIHRoZSBcImFmdGVyQ2hhbmdlXCIgaG9va1xuICAgICAgICAgICAgICBkYXRhUmVmLnNraXBTeW5jID0gdHJ1ZVxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgICAgICAgY29uc3QgbXNnID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBlcnJvclxuICAgICAgICAgICAgICBpZiAobG9ncykgcGF5bG9hZC5sb2dnZXIuZXJyb3IoYC0gRXJyb3IgY3JlYXRpbmcgU3RyaXBlIGRvY3VtZW50OiAke21zZ31gKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcGVyYXRpb24gPT09ICdjcmVhdGUnKSB7XG4gICAgICAgICAgaWYgKGxvZ3MpXG4gICAgICAgICAgICBwYXlsb2FkLmxvZ2dlci5pbmZvKFxuICAgICAgICAgICAgICBgQSBuZXcgJyR7Y29sbGVjdGlvblNsdWd9JyBkb2N1bWVudCB3YXMgY3JlYXRlZCBpbiBQYXlsb2FkIHdpdGggSUQ6ICcke2RhdGE/LmlkfScsIHN5bmNpbmcgd2l0aCBTdHJpcGUuLi5gLFxuICAgICAgICAgICAgKVxuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChsb2dzKVxuICAgICAgICAgICAgICBwYXlsb2FkLmxvZ2dlci5pbmZvKFxuICAgICAgICAgICAgICAgIGAtIENyZWF0aW5nIG5ldyAnJHtzeW5jQ29uZmlnLnN0cmlwZVJlc291cmNlVHlwZX0nIHJlc291cmNlIGluIFN0cmlwZS4uLmAsXG4gICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgLy8gTk9URTogVHlwZWQgYXMgXCJhbnlcIiBiZWNhdXNlIHRoZSBcImNyZWF0ZVwiIG1ldGhvZCBpcyBub3Qgc3RhbmRhcmQgYWNyb3NzIGFsbCBTdHJpcGUgcmVzb3VyY2VzXG4gICAgICAgICAgICBjb25zdCBzdHJpcGVSZXNvdXJjZSA9IGF3YWl0IHN0cmlwZT8uW3N5bmNDb25maWcuc3RyaXBlUmVzb3VyY2VUeXBlXT8uY3JlYXRlKFxuICAgICAgICAgICAgICBzeW5jZWRGaWVsZHMgYXMgYW55LFxuICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICBpZiAobG9ncylcbiAgICAgICAgICAgICAgcGF5bG9hZC5sb2dnZXIuaW5mbyhcbiAgICAgICAgICAgICAgICBg4pyFIFN1Y2Nlc3NmdWxseSBjcmVhdGVkIG5ldyAnJHtzeW5jQ29uZmlnLnN0cmlwZVJlc291cmNlVHlwZX0nIHJlc291cmNlIGluIFN0cmlwZSB3aXRoIElEOiAnJHtzdHJpcGVSZXNvdXJjZS5pZH0nLmAsXG4gICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgZGF0YVJlZi5zdHJpcGVJRCA9IHN0cmlwZVJlc291cmNlLmlkXG5cbiAgICAgICAgICAgIC8vIElNUE9SVEFOVDogdGhpcyBpcyB0byBwcmV2ZW50IHN5bmMgaW4gdGhlIFwiYWZ0ZXJDaGFuZ2VcIiBob29rXG4gICAgICAgICAgICBkYXRhUmVmLnNraXBTeW5jID0gdHJ1ZVxuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICAgICAgICBjb25zdCBtc2cgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IGVycm9yXG4gICAgICAgICAgICB0aHJvdyBuZXcgQVBJRXJyb3IoXG4gICAgICAgICAgICAgIGBGYWlsZWQgdG8gY3JlYXRlIG5ldyAnJHtzeW5jQ29uZmlnLnN0cmlwZVJlc291cmNlVHlwZX0nIHJlc291cmNlIGluIFN0cmlwZTogJHttc2d9YCxcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGF0YVJlZlxufVxuIl0sIm5hbWVzIjpbImNyZWF0ZU5ld0luU3RyaXBlIiwic3RyaXBlU2VjcmV0S2V5IiwicHJvY2VzcyIsImVudiIsIlNUUklQRV9TRUNSRVRfS0VZIiwic3RyaXBlIiwiU3RyaXBlIiwiYXBpVmVyc2lvbiIsImFyZ3MiLCJjb2xsZWN0aW9uIiwiZGF0YSIsIm9wZXJhdGlvbiIsInJlcSIsInN0cmlwZUNvbmZpZyIsImxvZ3MiLCJzeW5jIiwicGF5bG9hZCIsImRhdGFSZWYiLCJOT0RFX0VOViIsInN0cmlwZUlEIiwic2tpcFN5bmMiLCJsb2dnZXIiLCJpbmZvIiwic2x1ZyIsImNvbGxlY3Rpb25TbHVnIiwic3luY0NvbmZpZyIsImZpbmQiLCJjb25mIiwic3luY2VkRmllbGRzIiwiZmllbGRzIiwicmVkdWNlIiwiYWNjIiwiZmllbGQiLCJmaWVsZFBhdGgiLCJzdHJpcGVQcm9wZXJ0eSIsImRlZXBlbiIsImlkIiwic3RyaXBlUmVzb3VyY2UiLCJzdHJpcGVSZXNvdXJjZVR5cGUiLCJjcmVhdGUiLCJlcnJvciIsIm1zZyIsIkVycm9yIiwibWVzc2FnZSIsIkFQSUVycm9yIl0sIm1hcHBpbmdzIjoiOzs7OytCQW1CYUE7OztlQUFBQTs7O3dCQWpCWTsrREFDTjt3QkFJSTs7Ozs7O0FBRXZCLE1BQU1DLGtCQUFrQkMsUUFBUUMsR0FBRyxDQUFDQyxpQkFBaUI7QUFDckQsTUFBTUMsU0FB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
@@ -1,91 +1,48 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __generator = (this && this.__generator) || function (thisArg, body) {
12
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
- function verb(n) { return function (v) { return step([n, v]); }; }
15
- function step(op) {
16
- if (f) throw new TypeError("Generator is already executing.");
17
- while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
- if (y = 0, t) op = [op[0] & 2, t.value];
20
- switch (op[0]) {
21
- case 0: case 1: t = op; break;
22
- case 4: _.label++; return { value: op[1], done: false };
23
- case 5: _.label++; y = op[1]; op = [0]; continue;
24
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
- default:
26
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
- if (t[2]) _.ops.pop();
31
- _.trys.pop(); continue;
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "deleteFromStripe", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return deleteFromStripe;
9
+ }
10
+ });
11
+ const _errors = require("payload/errors");
12
+ const _stripe = /*#__PURE__*/ _interop_require_default(require("stripe"));
13
+ function _interop_require_default(obj) {
14
+ return obj && obj.__esModule ? obj : {
15
+ default: obj
16
+ };
17
+ }
18
+ const stripeSecretKey = process.env.STRIPE_SECRET_KEY;
19
+ const stripe = new _stripe.default(stripeSecretKey || '', {
20
+ apiVersion: '2022-08-01'
21
+ });
22
+ const deleteFromStripe = async (args)=>{
23
+ const { collection, doc, req, stripeConfig } = args;
24
+ const { logs, sync } = stripeConfig || {};
25
+ const { payload } = req;
26
+ const { slug: collectionSlug } = collection || {};
27
+ if (logs) payload.logger.info(`Document with ID: '${doc?.id}' in collection: '${collectionSlug}' has been deleted, deleting from Stripe...`);
28
+ if (process.env.NODE_ENV !== 'test') {
29
+ if (logs) payload.logger.info(`- Deleting Stripe document with ID: '${doc.stripeID}'...`);
30
+ const syncConfig = sync?.find((conf)=>conf.collection === collectionSlug);
31
+ if (syncConfig) {
32
+ try {
33
+ const found = await stripe?.[syncConfig.stripeResourceType]?.retrieve(doc.stripeID);
34
+ if (found) {
35
+ await stripe?.[syncConfig.stripeResourceType]?.del(doc.stripeID);
36
+ if (logs) payload.logger.info(`✅ Successfully deleted Stripe document with ID: '${doc.stripeID}'.`);
37
+ } else {
38
+ if (logs) payload.logger.info(`- Stripe document with ID: '${doc.stripeID}' not found, skipping...`);
39
+ }
40
+ } catch (error) {
41
+ const msg = error instanceof Error ? error.message : error;
42
+ throw new _errors.APIError(`Failed to delete Stripe document with ID: '${doc.stripeID}': ${msg}`);
32
43
  }
33
- op = body.call(thisArg, _);
34
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
44
+ }
36
45
  }
37
46
  };
38
- var __importDefault = (this && this.__importDefault) || function (mod) {
39
- return (mod && mod.__esModule) ? mod : { "default": mod };
40
- };
41
- Object.defineProperty(exports, "__esModule", { value: true });
42
- exports.deleteFromStripe = void 0;
43
- var errors_1 = require("payload/errors");
44
- var stripe_1 = __importDefault(require("stripe"));
45
- var stripeSecretKey = process.env.STRIPE_SECRET_KEY;
46
- var stripe = new stripe_1.default(stripeSecretKey || '', { apiVersion: '2022-08-01' });
47
- var deleteFromStripe = function (args) { return __awaiter(void 0, void 0, void 0, function () {
48
- var req, doc, stripeConfig, collection, _a, logs, sync, payload, collectionSlug, syncConfig, found, error_1, msg;
49
- var _b, _c;
50
- return __generator(this, function (_d) {
51
- switch (_d.label) {
52
- case 0:
53
- req = args.req, doc = args.doc, stripeConfig = args.stripeConfig, collection = args.collection;
54
- _a = stripeConfig || {}, logs = _a.logs, sync = _a.sync;
55
- payload = req.payload;
56
- collectionSlug = (collection || {}).slug;
57
- if (logs)
58
- payload.logger.info("Document with ID: '".concat(doc === null || doc === void 0 ? void 0 : doc.id, "' in collection: '").concat(collectionSlug, "' has been deleted, deleting from Stripe..."));
59
- if (!(process.env.NODE_ENV !== 'test')) return [3 /*break*/, 7];
60
- if (logs)
61
- payload.logger.info("- Deleting Stripe document with ID: '".concat(doc.stripeID, "'..."));
62
- syncConfig = sync === null || sync === void 0 ? void 0 : sync.find(function (conf) { return conf.collection === collectionSlug; });
63
- if (!syncConfig) return [3 /*break*/, 7];
64
- _d.label = 1;
65
- case 1:
66
- _d.trys.push([1, 6, , 7]);
67
- return [4 /*yield*/, ((_b = stripe === null || stripe === void 0 ? void 0 : stripe[syncConfig.stripeResourceType]) === null || _b === void 0 ? void 0 : _b.retrieve(doc.stripeID))];
68
- case 2:
69
- found = _d.sent();
70
- if (!found) return [3 /*break*/, 4];
71
- return [4 /*yield*/, ((_c = stripe === null || stripe === void 0 ? void 0 : stripe[syncConfig.stripeResourceType]) === null || _c === void 0 ? void 0 : _c.del(doc.stripeID))];
72
- case 3:
73
- _d.sent();
74
- if (logs)
75
- payload.logger.info("\u2705 Successfully deleted Stripe document with ID: '".concat(doc.stripeID, "'."));
76
- return [3 /*break*/, 5];
77
- case 4:
78
- if (logs)
79
- payload.logger.info("- Stripe document with ID: '".concat(doc.stripeID, "' not found, skipping..."));
80
- _d.label = 5;
81
- case 5: return [3 /*break*/, 7];
82
- case 6:
83
- error_1 = _d.sent();
84
- msg = error_1 instanceof Error ? error_1.message : error_1;
85
- throw new errors_1.APIError("Failed to delete Stripe document with ID: '".concat(doc.stripeID, "': ").concat(msg));
86
- case 7: return [2 /*return*/];
87
- }
88
- });
89
- }); };
90
- exports.deleteFromStripe = deleteFromStripe;
91
- //# sourceMappingURL=deleteFromStripe.js.map
47
+
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy9kZWxldGVGcm9tU3RyaXBlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29sbGVjdGlvbkFmdGVyRGVsZXRlSG9vaywgQ29sbGVjdGlvbkNvbmZpZyB9IGZyb20gJ3BheWxvYWQvdHlwZXMnXG5cbmltcG9ydCB7IEFQSUVycm9yIH0gZnJvbSAncGF5bG9hZC9lcnJvcnMnXG5pbXBvcnQgU3RyaXBlIGZyb20gJ3N0cmlwZSdcblxuaW1wb3J0IHR5cGUgeyBTdHJpcGVDb25maWcgfSBmcm9tICcuLi90eXBlcydcblxuY29uc3Qgc3RyaXBlU2VjcmV0S2V5ID0gcHJvY2Vzcy5lbnYuU1RSSVBFX1NFQ1JFVF9LRVlcbmNvbnN0IHN0cmlwZSA9IG5ldyBTdHJpcGUoc3RyaXBlU2VjcmV0S2V5IHx8ICcnLCB7IGFwaVZlcnNpb246ICcyMDIyLTA4LTAxJyB9KVxuXG5leHBvcnQgdHlwZSBDb2xsZWN0aW9uQWZ0ZXJEZWxldGVIb29rV2l0aEFyZ3MgPSAoXG4gIGFyZ3M6IFBhcmFtZXRlcnM8Q29sbGVjdGlvbkFmdGVyRGVsZXRlSG9vaz5bMF0gJiB7XG4gICAgY29sbGVjdGlvbj86IENvbGxlY3Rpb25Db25maWdcbiAgICBzdHJpcGVDb25maWc/OiBTdHJpcGVDb25maWdcbiAgfSxcbikgPT4gdm9pZFxuXG5leHBvcnQgY29uc3QgZGVsZXRlRnJvbVN0cmlwZTogQ29sbGVjdGlvbkFmdGVyRGVsZXRlSG9va1dpdGhBcmdzID0gYXN5bmMgKGFyZ3MpID0+IHtcbiAgY29uc3QgeyBjb2xsZWN0aW9uLCBkb2MsIHJlcSwgc3RyaXBlQ29uZmlnIH0gPSBhcmdzXG5cbiAgY29uc3QgeyBsb2dzLCBzeW5jIH0gPSBzdHJpcGVDb25maWcgfHwge31cblxuICBjb25zdCB7IHBheWxvYWQgfSA9IHJlcVxuICBjb25zdCB7IHNsdWc6IGNvbGxlY3Rpb25TbHVnIH0gPSBjb2xsZWN0aW9uIHx8IHt9XG5cbiAgaWYgKGxvZ3MpXG4gICAgcGF5bG9hZC5sb2dnZXIuaW5mbyhcbiAgICAgIGBEb2N1bWVudCB3aXRoIElEOiAnJHtkb2M/LmlkfScgaW4gY29sbGVjdGlvbjogJyR7Y29sbGVjdGlvblNsdWd9JyBoYXMgYmVlbiBkZWxldGVkLCBkZWxldGluZyBmcm9tIFN0cmlwZS4uLmAsXG4gICAgKVxuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Rlc3QnKSB7XG4gICAgaWYgKGxvZ3MpIHBheWxvYWQubG9nZ2VyLmluZm8oYC0gRGVsZXRpbmcgU3RyaXBlIGRvY3VtZW50IHdpdGggSUQ6ICcke2RvYy5zdHJpcGVJRH0nLi4uYClcblxuICAgIGNvbnN0IHN5bmNDb25maWcgPSBzeW5jPy5maW5kKChjb25mKSA9PiBjb25mLmNvbGxlY3Rpb24gPT09IGNvbGxlY3Rpb25TbHVnKVxuXG4gICAgaWYgKHN5bmNDb25maWcpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGZvdW5kID0gYXdhaXQgc3RyaXBlPy5bc3luY0NvbmZpZy5zdHJpcGVSZXNvdXJjZVR5cGVdPy5yZXRyaWV2ZShkb2Muc3RyaXBlSUQpXG5cbiAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgYXdhaXQgc3RyaXBlPy5bc3luY0NvbmZpZy5zdHJpcGVSZXNvdXJjZVR5cGVdPy5kZWwoZG9jLnN0cmlwZUlEKVxuICAgICAgICAgIGlmIChsb2dzKVxuICAgICAgICAgICAgcGF5bG9hZC5sb2dnZXIuaW5mbyhcbiAgICAgICAgICAgICAgYOKchSBTdWNjZXNzZnVsbHkgZGVsZXRlZCBTdHJpcGUgZG9jdW1lbnQgd2l0aCBJRDogJyR7ZG9jLnN0cmlwZUlEfScuYCxcbiAgICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAobG9ncylcbiAgICAgICAgICAgIHBheWxvYWQubG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAgIGAtIFN0cmlwZSBkb2N1bWVudCB3aXRoIElEOiAnJHtkb2Muc3RyaXBlSUR9JyBub3QgZm91bmQsIHNraXBwaW5nLi4uYCxcbiAgICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgY29uc3QgbXNnID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBlcnJvclxuICAgICAgICB0aHJvdyBuZXcgQVBJRXJyb3IoYEZhaWxlZCB0byBkZWxldGUgU3RyaXBlIGRvY3VtZW50IHdpdGggSUQ6ICcke2RvYy5zdHJpcGVJRH0nOiAke21zZ31gKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl0sIm5hbWVzIjpbImRlbGV0ZUZyb21TdHJpcGUiLCJzdHJpcGVTZWNyZXRLZXkiLCJwcm9jZXNzIiwiZW52IiwiU1RSSVBFX1NFQ1JFVF9LRVkiLCJzdHJpcGUiLCJTdHJpcGUiLCJhcGlWZXJzaW9uIiwiYXJncyIsImNvbGxlY3Rpb24iLCJkb2MiLCJyZXEiLCJzdHJpcGVDb25maWciLCJsb2dzIiwic3luYyIsInBheWxvYWQiLCJzbHVnIiwiY29sbGVjdGlvblNsdWciLCJsb2dnZXIiLCJpbmZvIiwiaWQiLCJOT0RFX0VOViIsInN0cmlwZUlEIiwic3luY0NvbmZpZyIsImZpbmQiLCJjb25mIiwiZm91bmQiLCJzdHJpcGVSZXNvdXJjZVR5cGUiLCJyZXRyaWV2ZSIsImRlbCIsImVycm9yIiwibXNnIiwiRXJyb3IiLCJtZXNzYWdlIiwiQVBJRXJyb3IiXSwibWFwcGluZ3MiOiI7Ozs7K0JBaUJhQTs7O2VBQUFBOzs7d0JBZlk7K0RBQ047Ozs7OztBQUluQixNQUFNQyxrQkFBa0JDLFFBQVFDLEdBQUcsQ0FBQ0MsaUJBQWlCO0FBQ3JELE1BQU1DLFNBQVMsSUFBSUMsZUFBTSxDQUFDTCxtQkFBbUIsSUFBSTtJQUFFTSxZQUFZO0FBQWE7QUFTckUsTUFBTVAsbUJBQXNELE9BQU9RO0lBQ3hFLE1BQU0sRUFBRUMsVUFBVSxFQUFFQyxHQUFHLEVBQUVDLEdBQUcsRUFBRUMsWUFBWSxFQUFFLEdBQUdKO0lBRS9DLE1BQU0sRUFBRUssSUFBSSxFQUFFQyxJQUFJLEVBQUUsR0FBR0YsZ0JBQWdCLENBQUM7SUFFeEMsTUFBTSxFQUFFRyxPQUFPLEVBQUUsR0FBR0o7SUFDcEIsTUFBTSxFQUFFSyxNQUFNQyxjQUFjLEVBQUUsR0FBR1IsY0FBYyxDQUFDO0lBRWhELElBQUlJLE1BQ0ZFLFFBQVFHLE1BQU0sQ0FBQ0MsSUFBSSxDQUNqQixDQUFDLG1CQUFtQixFQUFFVCxLQUFLVSxHQUFHLGtCQUFrQixFQUFFSCxlQUFlLDJDQUEyQyxDQUFDO0lBR2pILElBQUlmLFFBQVFDLEdBQUcsQ0FBQ2tCLFFBQVEsS0FBSyxRQUFRO1FBQ25DLElBQUlSLE1BQU1FLFFBQVFHLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDLENBQUMscUNBQXFDLEVBQUVULElBQUlZLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFFeEYsTUFBTUMsYUFBYVQsTUFBTVUsS0FBSyxDQUFDQyxPQUFTQSxLQUFLaEIsVUFBVSxLQUFLUTtRQUU1RCxJQUFJTSxZQUFZO1lBQ2QsSUFBSTtnQkFDRixNQUFNRyxRQUFRLE1BQU1yQixRQUFRLENBQUNrQixXQUFXSSxrQkFBa0IsQ0FBQyxFQUFFQyxTQUFTbEIsSUFBSVksUUFBUTtnQkFFbEYsSUFBSUksT0FBTztvQkFDVCxNQUFNckIsUUFBUSxDQUFDa0IsV0FBV0ksa0JBQWtCLENBQUMsRUFBRUUsSUFBSW5CLElBQUlZLFFBQVE7b0JBQy9ELElBQUlULE1BQ0ZFLFFBQVFHLE1BQU0sQ0FBQ0MsSUFBSSxDQUNqQixDQUFDLGlEQUFpRCxFQUFFVCxJQUFJWSxRQUFRLENBQUMsRUFBRSxDQUFDO2dCQUUxRSxPQUFPO29CQUNMLElBQUlULE1BQ0ZFLFFBQVFHLE1BQU0sQ0FBQ0MsSUFBSSxDQUNqQixDQUFDLDRCQUE0QixFQUFFVCxJQUFJWSxRQUFRLENBQUMsd0JBQXdCLENBQUM7Z0JBRTNFO1lBQ0YsRUFBRSxPQUFPUSxPQUFnQjtnQkFDdkIsTUFBTUMsTUFBTUQsaUJBQWlCRSxRQUFRRixNQUFNRyxPQUFPLEdBQUdIO2dCQUNyRCxNQUFNLElBQUlJLGdCQUFRLENBQUMsQ0FBQywyQ0FBMkMsRUFBRXhCLElBQUlZLFFBQVEsQ0FBQyxHQUFHLEVBQUVTLElBQUksQ0FBQztZQUMxRjtRQUNGO0lBQ0Y7QUFDRiJ9
@@ -1,99 +1,61 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __generator = (this && this.__generator) || function (thisArg, body) {
12
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
- function verb(n) { return function (v) { return step([n, v]); }; }
15
- function step(op) {
16
- if (f) throw new TypeError("Generator is already executing.");
17
- while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
- if (y = 0, t) op = [op[0] & 2, t.value];
20
- switch (op[0]) {
21
- case 0: case 1: t = op; break;
22
- case 4: _.label++; return { value: op[1], done: false };
23
- case 5: _.label++; y = op[1]; op = [0]; continue;
24
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
- default:
26
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
- if (t[2]) _.ops.pop();
31
- _.trys.pop(); continue;
32
- }
33
- op = body.call(thisArg, _);
34
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "syncExistingWithStripe", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return syncExistingWithStripe;
36
9
  }
37
- };
38
- var __importDefault = (this && this.__importDefault) || function (mod) {
39
- return (mod && mod.__esModule) ? mod : { "default": mod };
40
- };
41
- Object.defineProperty(exports, "__esModule", { value: true });
42
- exports.syncExistingWithStripe = void 0;
43
- var errors_1 = require("payload/errors");
44
- var stripe_1 = __importDefault(require("stripe"));
45
- var deepen_1 = require("../utilities/deepen");
46
- var stripeSecretKey = process.env.STRIPE_SECRET_KEY;
47
- var stripe = new stripe_1.default(stripeSecretKey || '', { apiVersion: '2022-08-01' });
48
- var syncExistingWithStripe = function (args) { return __awaiter(void 0, void 0, void 0, function () {
49
- var req, operation, data, originalDoc, collection, stripeConfig, _a, logs, sync, payload, collectionSlug, syncConfig, syncedFields, stripeResource, error_1, msg;
50
- var _b;
51
- return __generator(this, function (_c) {
52
- switch (_c.label) {
53
- case 0:
54
- req = args.req, operation = args.operation, data = args.data, originalDoc = args.originalDoc, collection = args.collection, stripeConfig = args.stripeConfig;
55
- _a = stripeConfig || {}, logs = _a.logs, sync = _a.sync;
56
- payload = req.payload;
57
- collectionSlug = (collection || {}).slug;
58
- if (!(process.env.NODE_ENV !== 'test' && !data.skipSync)) return [3 /*break*/, 5];
59
- syncConfig = sync === null || sync === void 0 ? void 0 : sync.find(function (conf) { return conf.collection === collectionSlug; });
60
- if (!syncConfig) return [3 /*break*/, 5];
61
- if (!(operation === 'update')) return [3 /*break*/, 5];
62
- syncedFields = syncConfig.fields.reduce(function (acc, field) {
63
- var fieldPath = field.fieldPath, stripeProperty = field.stripeProperty;
10
+ });
11
+ const _errors = require("payload/errors");
12
+ const _stripe = /*#__PURE__*/ _interop_require_default(require("stripe"));
13
+ const _deepen = require("../utilities/deepen");
14
+ function _interop_require_default(obj) {
15
+ return obj && obj.__esModule ? obj : {
16
+ default: obj
17
+ };
18
+ }
19
+ const stripeSecretKey = process.env.STRIPE_SECRET_KEY;
20
+ const stripe = new _stripe.default(stripeSecretKey || '', {
21
+ apiVersion: '2022-08-01'
22
+ });
23
+ const syncExistingWithStripe = async (args)=>{
24
+ const { collection, data, operation, originalDoc, req, stripeConfig } = args;
25
+ const { logs, sync } = stripeConfig || {};
26
+ const { payload } = req;
27
+ const { slug: collectionSlug } = collection || {};
28
+ if (process.env.NODE_ENV !== 'test' && !data.skipSync) {
29
+ const syncConfig = sync?.find((conf)=>conf.collection === collectionSlug);
30
+ if (syncConfig) {
31
+ if (operation === 'update') {
32
+ // combine all fields of this object and match their respective values within the document
33
+ let syncedFields = syncConfig.fields.reduce((acc, field)=>{
34
+ const { fieldPath, stripeProperty } = field;
64
35
  acc[stripeProperty] = data[fieldPath];
65
36
  return acc;
66
37
  }, {});
67
- syncedFields = (0, deepen_1.deepen)(syncedFields);
68
- if (logs)
69
- payload.logger.info("A '".concat(collectionSlug, "' document has changed in Payload with ID: '").concat(originalDoc === null || originalDoc === void 0 ? void 0 : originalDoc._id, "', syncing with Stripe..."));
70
- if (!!data.stripeID) return [3 /*break*/, 1];
71
- // NOTE: the "beforeValidate" hook populates this
72
- if (logs)
73
- payload.logger.error("- There is no Stripe ID for this document, skipping.");
74
- return [3 /*break*/, 5];
75
- case 1:
76
- if (logs)
77
- payload.logger.info("- Syncing to Stripe resource with ID: '".concat(data.stripeID, "'..."));
78
- _c.label = 2;
79
- case 2:
80
- _c.trys.push([2, 4, , 5]);
81
- return [4 /*yield*/, ((_b = stripe === null || stripe === void 0 ? void 0 : stripe[syncConfig === null || syncConfig === void 0 ? void 0 : syncConfig.stripeResourceType]) === null || _b === void 0 ? void 0 : _b.update(data.stripeID, syncedFields))];
82
- case 3:
83
- stripeResource = _c.sent();
84
- if (logs)
85
- payload.logger.info("\u2705 Successfully synced Stripe resource with ID: '".concat(stripeResource.id, "'."));
86
- return [3 /*break*/, 5];
87
- case 4:
88
- error_1 = _c.sent();
89
- msg = error_1 instanceof Error ? error_1.message : error_1;
90
- throw new errors_1.APIError("Failed to sync document with ID: '".concat(data.id, "' to Stripe: ").concat(msg));
91
- case 5:
92
- // Set back to 'false' so that all changes continue to sync to Stripe, see note in './createNewInStripe.ts'
93
- data.skipSync = false;
94
- return [2 /*return*/, data];
38
+ syncedFields = (0, _deepen.deepen)(syncedFields);
39
+ if (logs) payload.logger.info(`A '${collectionSlug}' document has changed in Payload with ID: '${originalDoc?._id}', syncing with Stripe...`);
40
+ if (!data.stripeID) {
41
+ // NOTE: the "beforeValidate" hook populates this
42
+ if (logs) payload.logger.error(`- There is no Stripe ID for this document, skipping.`);
43
+ } else {
44
+ if (logs) payload.logger.info(`- Syncing to Stripe resource with ID: '${data.stripeID}'...`);
45
+ try {
46
+ const stripeResource = await stripe?.[syncConfig?.stripeResourceType]?.update(data.stripeID, syncedFields);
47
+ if (logs) payload.logger.info(`✅ Successfully synced Stripe resource with ID: '${stripeResource.id}'.`);
48
+ } catch (error) {
49
+ const msg = error instanceof Error ? error.message : error;
50
+ throw new _errors.APIError(`Failed to sync document with ID: '${data.id}' to Stripe: ${msg}`);
51
+ }
52
+ }
53
+ }
95
54
  }
96
- });
97
- }); };
98
- exports.syncExistingWithStripe = syncExistingWithStripe;
99
- //# sourceMappingURL=syncExistingWithStripe.js.map
55
+ }
56
+ // Set back to 'false' so that all changes continue to sync to Stripe, see note in './createNewInStripe.ts'
57
+ data.skipSync = false;
58
+ return data;
59
+ };
60
+
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy9zeW5jRXhpc3RpbmdXaXRoU3RyaXBlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29sbGVjdGlvbkJlZm9yZUNoYW5nZUhvb2ssIENvbGxlY3Rpb25Db25maWcgfSBmcm9tICdwYXlsb2FkL3R5cGVzJ1xuXG5pbXBvcnQgeyBBUElFcnJvciB9IGZyb20gJ3BheWxvYWQvZXJyb3JzJ1xuaW1wb3J0IFN0cmlwZSBmcm9tICdzdHJpcGUnXG5cbmltcG9ydCB0eXBlIHsgU3RyaXBlQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnXG5cbmltcG9ydCB7IGRlZXBlbiB9IGZyb20gJy4uL3V0aWxpdGllcy9kZWVwZW4nXG5cbmNvbnN0IHN0cmlwZVNlY3JldEtleSA9IHByb2Nlc3MuZW52LlNUUklQRV9TRUNSRVRfS0VZXG5jb25zdCBzdHJpcGUgPSBuZXcgU3RyaXBlKHN0cmlwZVNlY3JldEtleSB8fCAnJywgeyBhcGlWZXJzaW9uOiAnMjAyMi0wOC0wMScgfSlcblxuZXhwb3J0IHR5cGUgQ29sbGVjdGlvbkJlZm9yZUNoYW5nZUhvb2tXaXRoQXJncyA9IChcbiAgYXJnczogUGFyYW1ldGVyczxDb2xsZWN0aW9uQmVmb3JlQ2hhbmdlSG9vaz5bMF0gJiB7XG4gICAgY29sbGVjdGlvbj86IENvbGxlY3Rpb25Db25maWdcbiAgICBzdHJpcGVDb25maWc/OiBTdHJpcGVDb25maWdcbiAgfSxcbikgPT4gdm9pZFxuXG5leHBvcnQgY29uc3Qgc3luY0V4aXN0aW5nV2l0aFN0cmlwZTogQ29sbGVjdGlvbkJlZm9yZUNoYW5nZUhvb2tXaXRoQXJncyA9IGFzeW5jIChhcmdzKSA9PiB7XG4gIGNvbnN0IHsgY29sbGVjdGlvbiwgZGF0YSwgb3BlcmF0aW9uLCBvcmlnaW5hbERvYywgcmVxLCBzdHJpcGVDb25maWcgfSA9IGFyZ3NcblxuICBjb25zdCB7IGxvZ3MsIHN5bmMgfSA9IHN0cmlwZUNvbmZpZyB8fCB7fVxuXG4gIGNvbnN0IHsgcGF5bG9hZCB9ID0gcmVxXG5cbiAgY29uc3QgeyBzbHVnOiBjb2xsZWN0aW9uU2x1ZyB9ID0gY29sbGVjdGlvbiB8fCB7fVxuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Rlc3QnICYmICFkYXRhLnNraXBTeW5jKSB7XG4gICAgY29uc3Qgc3luY0NvbmZpZyA9IHN5bmM/LmZpbmQoKGNvbmYpID0+IGNvbmYuY29sbGVjdGlvbiA9PT0gY29sbGVjdGlvblNsdWcpXG5cbiAgICBpZiAoc3luY0NvbmZpZykge1xuICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gJ3VwZGF0ZScpIHtcbiAgICAgICAgLy8gY29tYmluZSBhbGwgZmllbGRzIG9mIHRoaXMgb2JqZWN0IGFuZCBtYXRjaCB0aGVpciByZXNwZWN0aXZlIHZhbHVlcyB3aXRoaW4gdGhlIGRvY3VtZW50XG4gICAgICAgIGxldCBzeW5jZWRGaWVsZHMgPSBzeW5jQ29uZmlnLmZpZWxkcy5yZWR1Y2UoXG4gICAgICAgICAgKGFjYywgZmllbGQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgZmllbGRQYXRoLCBzdHJpcGVQcm9wZXJ0eSB9ID0gZmllbGRcblxuICAgICAgICAgICAgYWNjW3N0cmlwZVByb3BlcnR5XSA9IGRhdGFbZmllbGRQYXRoXVxuICAgICAgICAgICAgcmV0dXJuIGFjY1xuICAgICAgICAgIH0sXG4gICAgICAgICAge30gYXMgUmVjb3JkPHN0cmluZywgYW55PixcbiAgICAgICAgKVxuXG4gICAgICAgIHN5bmNlZEZpZWxkcyA9IGRlZXBlbihzeW5jZWRGaWVsZHMpXG5cbiAgICAgICAgaWYgKGxvZ3MpXG4gICAgICAgICAgcGF5bG9hZC5sb2dnZXIuaW5mbyhcbiAgICAgICAgICAgIGBBICcke2NvbGxlY3Rpb25TbHVnfScgZG9jdW1lbnQgaGFzIGNoYW5nZWQgaW4gUGF5bG9hZCB3aXRoIElEOiAnJHtvcmlnaW5hbERvYz8uX2lkfScsIHN5bmNpbmcgd2l0aCBTdHJpcGUuLi5gLFxuICAgICAgICAgIClcblxuICAgICAgICBpZiAoIWRhdGEuc3RyaXBlSUQpIHtcbiAgICAgICAgICAvLyBOT1RFOiB0aGUgXCJiZWZvcmVWYWxpZGF0ZVwiIGhvb2sgcG9wdWxhdGVzIHRoaXNcbiAgICAgICAgICBpZiAobG9ncykgcGF5bG9hZC5sb2dnZXIuZXJyb3IoYC0gVGhlcmUgaXMgbm8gU3RyaXBlIElEIGZvciB0aGlzIGRvY3VtZW50LCBza2lwcGluZy5gKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChsb2dzKVxuICAgICAgICAgICAgcGF5bG9hZC5sb2dnZXIuaW5mbyhgLSBTeW5jaW5nIHRvIFN0cmlwZSByZXNvdXJjZSB3aXRoIElEOiAnJHtkYXRhLnN0cmlwZUlEfScuLi5gKVxuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHN0cmlwZVJlc291cmNlID0gYXdhaXQgc3RyaXBlPy5bc3luY0NvbmZpZz8uc3RyaXBlUmVzb3VyY2VUeXBlXT8udXBkYXRlKFxuICAgICAgICAgICAgICBkYXRhLnN0cmlwZUlELFxuICAgICAgICAgICAgICBzeW5jZWRGaWVsZHMsXG4gICAgICAgICAgICApXG5cbiAgICAgICAgICAgIGlmIChsb2dzKVxuICAgICAgICAgICAgICBwYXlsb2FkLmxvZ2dlci5pbmZvKFxuICAgICAgICAgICAgICAgIGDinIUgU3VjY2Vzc2Z1bGx5IHN5bmNlZCBTdHJpcGUgcmVzb3VyY2Ugd2l0aCBJRDogJyR7c3RyaXBlUmVzb3VyY2UuaWR9Jy5gLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgICAgIGNvbnN0IG1zZyA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogZXJyb3JcbiAgICAgICAgICAgIHRocm93IG5ldyBBUElFcnJvcihgRmFpbGVkIHRvIHN5bmMgZG9jdW1lbnQgd2l0aCBJRDogJyR7ZGF0YS5pZH0nIHRvIFN0cmlwZTogJHttc2d9YClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBTZXQgYmFjayB0byAnZmFsc2UnIHNvIHRoYXQgYWxsIGNoYW5nZXMgY29udGludWUgdG8gc3luYyB0byBTdHJpcGUsIHNlZSBub3RlIGluICcuL2NyZWF0ZU5ld0luU3RyaXBlLnRzJ1xuICBkYXRhLnNraXBTeW5jID0gZmFsc2VcblxuICByZXR1cm4gZGF0YVxufVxuIl0sIm5hbWVzIjpbInN5bmNFeGlzdGluZ1dpdGhTdHJpcGUiLCJzdHJpcGVTZWNyZXRLZXkiLCJwcm9jZXNzIiwiZW52IiwiU1RSSVBFX1NFQ1JFVF9LRVkiLCJzdHJpcGUiLCJTdHJpcGUiLCJhcGlWZXJzaW9uIiwiYXJncyIsImNvbGxlY3Rpb24iLCJkYXRhIiwib3BlcmF0aW9uIiwib3JpZ2luYWxEb2MiLCJyZXEiLCJzdHJpcGVDb25maWciLCJsb2dzIiwic3luYyIsInBheWxvYWQiLCJzbHVnIiwiY29sbGVjdGlvblNsdWciLCJOT0RFX0VOViIsInNraXBTeW5jIiwic3luY0NvbmZpZyIsImZpbmQiLCJjb25mIiwic3luY2VkRmllbGRzIiwiZmllbGRzIiwicmVkdWNlIiwiYWNjIiwiZmllbGQiLCJmaWVsZFBhdGgiLCJzdHJpcGVQcm9wZXJ0eSIsImRlZXBlbiIsImxvZ2dlciIsImluZm8iLCJfaWQiLCJzdHJpcGVJRCIsImVycm9yIiwic3RyaXBlUmVzb3VyY2UiLCJzdHJpcGVSZXNvdXJjZVR5cGUiLCJ1cGRhdGUiLCJpZCIsIm1zZyIsIkVycm9yIiwibWVzc2FnZSIsIkFQSUVycm9yIl0sIm1hcHBpbmdzIjoiOzs7OytCQW1CYUE7OztlQUFBQTs7O3dCQWpCWTsrREFDTjt3QkFJSTs7Ozs7O0FBRXZCLE1BQU1DLGtCQUFrQkMsUUFBUUMsR0FBRyxDQUFDQyxpQkFBaUI7QUFDckQsTUFBTUMsU0FBUyxJQUFJQyxlQUFNLENBQUNMLG1CQUFtQixJQUFJO0lBQUVNLFlBQVk7QUFBYTtBQVNyRSxNQUFNUCx5QkFBNkQsT0FBT1E7SUFDL0UsTUFBTSxFQUFFQyxVQUFVLEVBQUVDLElBQUksRUFBRUMsU0FBUyxFQUFFQyxXQUFXLEVBQUVDLEdBQUcsRUFBRUMsWUFBWSxFQUFFLEdBQUdOO0lBRXhFLE1BQU0sRUFBRU8sSUFBSSxFQUFFQyxJQUFJLEVBQUUsR0FBR0YsZ0JBQWdCLENBQUM7SUFFeEMsTUFBTSxFQUFFRyxPQUFPLEVBQUUsR0FBR0o7SUFFcEIsTUFBTSxFQUFFSyxNQUFNQyxjQUFjLEVBQUUsR0FBR1YsY0FBYyxDQUFDO0lBRWhELElBQUlQLFFBQVFDLEdBQUcsQ0FBQ2lCLFFBQVEsS0FBSyxVQUFVLENBQUNWLEtBQUtXLFFBQVEsRUFBRTtRQUNyRCxNQUFNQyxhQUFhTixNQUFNTyxLQUFLLENBQUNDLE9BQVNBLEtBQUtmLFVBQVUsS0FBS1U7UUFFNUQsSUFBSUcsWUFBWTtZQUNkLElBQUlYLGNBQWMsVUFBVTtnQkFDMUIsMEZBQTBGO2dCQUMxRixJQUFJYyxlQUFlSCxXQUFXSSxNQUFNLENBQUNDLE1BQU0sQ0FDekMsQ0FBQ0MsS0FBS0M7b0JBQ0osTUFBTSxFQUFFQyxTQUFTLEVBQUVDLGNBQWMsRUFBRSxHQUFHRjtvQkFFdENELEdBQUcsQ0FBQ0csZUFBZSxHQUFHckIsSUFBSSxDQUFDb0IsVUFBVTtvQkFDckMsT0FBT0Y7Z0JBQ1QsR0FDQSxDQUFDO2dCQUdISCxlQUFlTyxJQUFBQSxjQUFNLEVBQUNQO2dCQUV0QixJQUFJVixNQUNGRSxRQUFRZ0IsTUFBTSxDQUFDQyxJQUFJLENBQ2pCLENBQUMsR0FBRyxFQUFFZixlQUFlLDRDQUE0QyxFQUFFUCxhQUFhdUIsSUFBSSx5QkFBeUIsQ0FBQztnQkFHbEgsSUFBSSxDQUFDekIsS0FBSzBCLFFBQVEsRUFBRTtvQkFDbEIsaURBQWlEO29CQUNqRCxJQUFJckIsTUFBTUUsUUFBUWdCLE1BQU0sQ0FBQ0ksS0FBSyxDQUFDLENBQUMsb0RBQW9ELENBQUM7Z0JBQ3ZGLE9BQU87b0JBQ0wsSUFBSXRCLE1BQ0ZFLFFBQVFnQixNQUFNLENBQUNDLElBQUksQ0FBQyxDQUFDLHVDQUF1QyxFQUFFeEIsS0FBSzBCLFFBQVEsQ0FBQyxJQUFJLENBQUM7b0JBRW5GLElBQUk7d0JBQ0YsTUFBTUUsaUJBQWlCLE1BQU1qQyxRQUFRLENBQUNpQixZQUFZaUIsbUJBQW1CLEVBQUVDLE9BQ3JFOUIsS0FBSzBCLFFBQVEsRUFDYlg7d0JBR0YsSUFBSVYsTUFDRkUsUUFBUWdCLE1BQU0sQ0FBQ0MsSUFBSSxDQUNqQixDQUFDLGdEQUFnRCxFQUFFSSxlQUFlRyxFQUFFLENBQUMsRUFBRSxDQUFDO29CQUU5RSxFQUFFLE9BQU9KLE9BQWdCO3dCQUN2QixNQUFNSyxNQUFNTCxpQkFBaUJNLFFBQVFOLE1BQU1PLE9BQU8sR0FBR1A7d0JBQ3JELE1BQU0sSUFBSVEsZ0JBQVEsQ0FBQyxDQUFDLGtDQUFrQyxFQUFFbkMsS0FBSytCLEVBQUUsQ0FBQyxhQUFhLEVBQUVDLElBQUksQ0FBQztvQkFDdEY7Z0JBQ0Y7WUFDRjtRQUNGO0lBQ0Y7SUFFQSwyR0FBMkc7SUFDM0doQyxLQUFLVyxRQUFRLEdBQUc7SUFFaEIsT0FBT1g7QUFDVCJ9