@nlabs/reaktor 0.2.2 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/lib/data/conversations.d.ts +3 -1
  2. package/lib/data/dynamodb.d.ts +8 -8
  3. package/lib/data/email.d.ts +2 -2
  4. package/lib/data/images.d.ts +1 -1
  5. package/lib/data/index.d.ts +1 -0
  6. package/lib/data/ios.d.ts +5 -5
  7. package/lib/data/notifications.d.ts +1 -1
  8. package/lib/data/payments.d.ts +3 -4
  9. package/lib/data/reactions.d.ts +1 -1
  10. package/lib/data/s3.d.ts +6 -6
  11. package/lib/data/subscription.d.ts +1 -1
  12. package/lib/data/websockets.d.ts +6 -0
  13. package/lib/types/payments.d.ts +1 -0
  14. package/lib/types/posts.d.ts +2 -0
  15. package/lib/utils/arangodb.d.ts +2 -1
  16. package/package.json +26 -24
  17. package/lib/config.js +0 -145
  18. package/lib/data/conversations.js +0 -226
  19. package/lib/data/dynamodb.js +0 -174
  20. package/lib/data/email.js +0 -194
  21. package/lib/data/files.js +0 -465
  22. package/lib/data/groups.js +0 -401
  23. package/lib/data/images.js +0 -899
  24. package/lib/data/index.js +0 -234
  25. package/lib/data/ios.js +0 -329
  26. package/lib/data/locations.js +0 -148
  27. package/lib/data/messages.js +0 -283
  28. package/lib/data/notifications.js +0 -59
  29. package/lib/data/payments.js +0 -800
  30. package/lib/data/posts.js +0 -690
  31. package/lib/data/reactions.js +0 -487
  32. package/lib/data/s3.js +0 -147
  33. package/lib/data/search.js +0 -113
  34. package/lib/data/sms.js +0 -79
  35. package/lib/data/subscription.js +0 -311
  36. package/lib/data/tags.js +0 -345
  37. package/lib/data/users.js +0 -419
  38. package/lib/index.js +0 -42
  39. package/lib/types/apps.js +0 -2
  40. package/lib/types/arangodb.js +0 -2
  41. package/lib/types/auth.js +0 -2
  42. package/lib/types/conversations.js +0 -2
  43. package/lib/types/email.js +0 -2
  44. package/lib/types/files.js +0 -2
  45. package/lib/types/google.js +0 -2
  46. package/lib/types/groups.js +0 -2
  47. package/lib/types/images.js +0 -2
  48. package/lib/types/index.js +0 -210
  49. package/lib/types/locations.js +0 -2
  50. package/lib/types/messages.js +0 -2
  51. package/lib/types/notifications.js +0 -2
  52. package/lib/types/payments.js +0 -2
  53. package/lib/types/posts.js +0 -2
  54. package/lib/types/reactions.js +0 -2
  55. package/lib/types/tags.js +0 -2
  56. package/lib/types/users.js +0 -2
  57. package/lib/utils/analytics.js +0 -61
  58. package/lib/utils/arangodb.js +0 -122
  59. package/lib/utils/auth.js +0 -57
  60. package/lib/utils/graphql.js +0 -19
  61. package/lib/utils/index.js +0 -78
  62. package/lib/utils/objects.js +0 -54
  63. package/lib/utils/redis.js +0 -32
package/lib/data/index.js DELETED
@@ -1,234 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
-
7
- var _conversations = require("./conversations");
8
-
9
- Object.keys(_conversations).forEach(function (key) {
10
- if (key === "default" || key === "__esModule") return;
11
- Object.defineProperty(exports, key, {
12
- enumerable: true,
13
- get: function get() {
14
- return _conversations[key];
15
- }
16
- });
17
- });
18
-
19
- var _dynamodb = require("./dynamodb");
20
-
21
- Object.keys(_dynamodb).forEach(function (key) {
22
- if (key === "default" || key === "__esModule") return;
23
- Object.defineProperty(exports, key, {
24
- enumerable: true,
25
- get: function get() {
26
- return _dynamodb[key];
27
- }
28
- });
29
- });
30
-
31
- var _email = require("./email");
32
-
33
- Object.keys(_email).forEach(function (key) {
34
- if (key === "default" || key === "__esModule") return;
35
- Object.defineProperty(exports, key, {
36
- enumerable: true,
37
- get: function get() {
38
- return _email[key];
39
- }
40
- });
41
- });
42
-
43
- var _files = require("./files");
44
-
45
- Object.keys(_files).forEach(function (key) {
46
- if (key === "default" || key === "__esModule") return;
47
- Object.defineProperty(exports, key, {
48
- enumerable: true,
49
- get: function get() {
50
- return _files[key];
51
- }
52
- });
53
- });
54
-
55
- var _groups = require("./groups");
56
-
57
- Object.keys(_groups).forEach(function (key) {
58
- if (key === "default" || key === "__esModule") return;
59
- Object.defineProperty(exports, key, {
60
- enumerable: true,
61
- get: function get() {
62
- return _groups[key];
63
- }
64
- });
65
- });
66
-
67
- var _images = require("./images");
68
-
69
- Object.keys(_images).forEach(function (key) {
70
- if (key === "default" || key === "__esModule") return;
71
- Object.defineProperty(exports, key, {
72
- enumerable: true,
73
- get: function get() {
74
- return _images[key];
75
- }
76
- });
77
- });
78
-
79
- var _ios = require("./ios");
80
-
81
- Object.keys(_ios).forEach(function (key) {
82
- if (key === "default" || key === "__esModule") return;
83
- Object.defineProperty(exports, key, {
84
- enumerable: true,
85
- get: function get() {
86
- return _ios[key];
87
- }
88
- });
89
- });
90
-
91
- var _locations = require("./locations");
92
-
93
- Object.keys(_locations).forEach(function (key) {
94
- if (key === "default" || key === "__esModule") return;
95
- Object.defineProperty(exports, key, {
96
- enumerable: true,
97
- get: function get() {
98
- return _locations[key];
99
- }
100
- });
101
- });
102
-
103
- var _messages = require("./messages");
104
-
105
- Object.keys(_messages).forEach(function (key) {
106
- if (key === "default" || key === "__esModule") return;
107
- Object.defineProperty(exports, key, {
108
- enumerable: true,
109
- get: function get() {
110
- return _messages[key];
111
- }
112
- });
113
- });
114
-
115
- var _notifications = require("./notifications");
116
-
117
- Object.keys(_notifications).forEach(function (key) {
118
- if (key === "default" || key === "__esModule") return;
119
- Object.defineProperty(exports, key, {
120
- enumerable: true,
121
- get: function get() {
122
- return _notifications[key];
123
- }
124
- });
125
- });
126
-
127
- var _payments = require("./payments");
128
-
129
- Object.keys(_payments).forEach(function (key) {
130
- if (key === "default" || key === "__esModule") return;
131
- Object.defineProperty(exports, key, {
132
- enumerable: true,
133
- get: function get() {
134
- return _payments[key];
135
- }
136
- });
137
- });
138
-
139
- var _posts = require("./posts");
140
-
141
- Object.keys(_posts).forEach(function (key) {
142
- if (key === "default" || key === "__esModule") return;
143
- Object.defineProperty(exports, key, {
144
- enumerable: true,
145
- get: function get() {
146
- return _posts[key];
147
- }
148
- });
149
- });
150
-
151
- var _reactions = require("./reactions");
152
-
153
- Object.keys(_reactions).forEach(function (key) {
154
- if (key === "default" || key === "__esModule") return;
155
- Object.defineProperty(exports, key, {
156
- enumerable: true,
157
- get: function get() {
158
- return _reactions[key];
159
- }
160
- });
161
- });
162
-
163
- var _s = require("./s3");
164
-
165
- Object.keys(_s).forEach(function (key) {
166
- if (key === "default" || key === "__esModule") return;
167
- Object.defineProperty(exports, key, {
168
- enumerable: true,
169
- get: function get() {
170
- return _s[key];
171
- }
172
- });
173
- });
174
-
175
- var _search = require("./search");
176
-
177
- Object.keys(_search).forEach(function (key) {
178
- if (key === "default" || key === "__esModule") return;
179
- Object.defineProperty(exports, key, {
180
- enumerable: true,
181
- get: function get() {
182
- return _search[key];
183
- }
184
- });
185
- });
186
-
187
- var _sms = require("./sms");
188
-
189
- Object.keys(_sms).forEach(function (key) {
190
- if (key === "default" || key === "__esModule") return;
191
- Object.defineProperty(exports, key, {
192
- enumerable: true,
193
- get: function get() {
194
- return _sms[key];
195
- }
196
- });
197
- });
198
-
199
- var _subscription = require("./subscription");
200
-
201
- Object.keys(_subscription).forEach(function (key) {
202
- if (key === "default" || key === "__esModule") return;
203
- Object.defineProperty(exports, key, {
204
- enumerable: true,
205
- get: function get() {
206
- return _subscription[key];
207
- }
208
- });
209
- });
210
-
211
- var _tags = require("./tags");
212
-
213
- Object.keys(_tags).forEach(function (key) {
214
- if (key === "default" || key === "__esModule") return;
215
- Object.defineProperty(exports, key, {
216
- enumerable: true,
217
- get: function get() {
218
- return _tags[key];
219
- }
220
- });
221
- });
222
-
223
- var _users = require("./users");
224
-
225
- Object.keys(_users).forEach(function (key) {
226
- if (key === "default" || key === "__esModule") return;
227
- Object.defineProperty(exports, key, {
228
- enumerable: true,
229
- get: function get() {
230
- return _users[key];
231
- }
232
- });
233
- });
234
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUlBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5leHBvcnQgKiBmcm9tICcuL2NvbnZlcnNhdGlvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9keW5hbW9kYic7XG5leHBvcnQgKiBmcm9tICcuL2VtYWlsJztcbmV4cG9ydCAqIGZyb20gJy4vZmlsZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9ncm91cHMnO1xuZXhwb3J0ICogZnJvbSAnLi9pbWFnZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9pb3MnO1xuZXhwb3J0ICogZnJvbSAnLi9sb2NhdGlvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9tZXNzYWdlcyc7XG5leHBvcnQgKiBmcm9tICcuL25vdGlmaWNhdGlvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9wYXltZW50cyc7XG5leHBvcnQgKiBmcm9tICcuL3Bvc3RzJztcbmV4cG9ydCAqIGZyb20gJy4vcmVhY3Rpb25zJztcbmV4cG9ydCAqIGZyb20gJy4vczMnO1xuZXhwb3J0ICogZnJvbSAnLi9zZWFyY2gnO1xuZXhwb3J0ICogZnJvbSAnLi9zbXMnO1xuZXhwb3J0ICogZnJvbSAnLi9zdWJzY3JpcHRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi90YWdzJztcbmV4cG9ydCAqIGZyb20gJy4vdXNlcnMnO1xuIl19
package/lib/data/ios.js DELETED
@@ -1,329 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.getIOSInApp = exports.addIOSInApp = exports.getIOSSubscription = exports.iOSSubscriptionUpdate = exports.getIOSInAppError = void 0;
7
-
8
- var _utils = require("@nlabs/utils");
9
-
10
- var _arangojs = require("arangojs");
11
-
12
- var _utils2 = require("../utils");
13
-
14
- function _templateObject4() {
15
- var data = _taggedTemplateLiteral(["FOR s IN subscription\n FILTER s.userId == ", " && s.type == \"ios\"\n LIMIT 1\n RETURN s"]);
16
-
17
- _templateObject4 = function _templateObject4() {
18
- return data;
19
- };
20
-
21
- return data;
22
- }
23
-
24
- function _templateObject3() {
25
- var data = _taggedTemplateLiteral(["INSERT ", " IN subscriptions RETURN NEW"]);
26
-
27
- _templateObject3 = function _templateObject3() {
28
- return data;
29
- };
30
-
31
- return data;
32
- }
33
-
34
- function _templateObject2() {
35
- var data = _taggedTemplateLiteral(["FOR s IN subscriptions\n FILTER s.userId == ", " && s.type == \"ios_payment\"\n LIMIT 1\n RETURN s"]);
36
-
37
- _templateObject2 = function _templateObject2() {
38
- return data;
39
- };
40
-
41
- return data;
42
- }
43
-
44
- function _templateObject() {
45
- var data = _taggedTemplateLiteral(["UPSERT {transactionId: ", "}\n INSERT ", "\n UPDATE ", " IN subscriptions\n LIMIT 1"]);
46
-
47
- _templateObject = function _templateObject() {
48
- return data;
49
- };
50
-
51
- return data;
52
- }
53
-
54
- function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
55
-
56
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
57
-
58
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
59
-
60
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
61
-
62
- var eventCategory = 'ios';
63
-
64
- var getIOSInAppError = function getIOSInAppError(statusCode) {
65
- var _codes;
66
-
67
- var codes = (_codes = {}, _defineProperty(_codes, 0, {
68
- error: false,
69
- message: 'Active',
70
- valid: true
71
- }), _defineProperty(_codes, 21000, {
72
- error: true,
73
- id: 'payment_receipt_unreadable',
74
- message: 'App store could not read',
75
- valid: false
76
- }), _defineProperty(_codes, 21002, {
77
- error: true,
78
- id: 'payment_data_malformed',
79
- message: 'Data was malformed',
80
- valid: false
81
- }), _defineProperty(_codes, 21003, {
82
- error: true,
83
- id: 'payment_receipt_unauthorized',
84
- message: 'Receipt not authenticated',
85
- valid: false
86
- }), _defineProperty(_codes, 21004, {
87
- error: true,
88
- id: 'payment_invalid_secret',
89
- message: 'Shared secret does not match',
90
- valid: false
91
- }), _defineProperty(_codes, 21005, {
92
- error: true,
93
- id: 'payment_server_unavailable',
94
- message: 'Receipt server unavailable',
95
- valid: false
96
- }), _defineProperty(_codes, 21006, {
97
- error: false,
98
- id: 'payment_subscription_expired',
99
- message: 'Receipt valid but sub expired',
100
- valid: true
101
- }), _defineProperty(_codes, 21007, {
102
- error: true,
103
- id: 'payment_invalid_server',
104
- message: 'Sandbox receipt sent to Production environment',
105
- redirect: true,
106
- valid: false
107
- }), _defineProperty(_codes, 21008, {
108
- error: true,
109
- id: 'payment_invalid_server',
110
- message: 'Production receipt sent to Sandbox environment',
111
- valid: false
112
- }), _codes);
113
- return codes[statusCode] || {};
114
- };
115
-
116
- exports.getIOSInAppError = getIOSInAppError;
117
-
118
- var iOSSubscriptionUpdate = function iOSSubscriptionUpdate(database, subscriptionUpdate) {
119
- var action = 'iOSSubscriptionUpdate';
120
- var planId = subscriptionUpdate.auto_renew_adam_id,
121
- cancelDate = subscriptionUpdate.cancellation_date,
122
- status = subscriptionUpdate.notification_type,
123
- latestReceipt = subscriptionUpdate.latest_receipt,
124
- latestInfo = subscriptionUpdate.latest_receipt_info,
125
- expiredReceipt = subscriptionUpdate.latest_expired_receipt,
126
- expiredInfo = subscriptionUpdate.latest_expired_receipt_info,
127
- transactionId = subscriptionUpdate.original_transaction_id;
128
- var formatStatus = (status || '').toLowerCase();
129
- var now = Date.now();
130
- var receiptInfo = latestInfo || expiredInfo;
131
- var id = (0, _utils.createHash)("payment-".concat(transactionId));
132
- var update = {
133
- cancelDate: cancelDate,
134
- isValid: receiptInfo[0].expires_date_ms > now,
135
- modified: now,
136
- planId: planId,
137
- receipt: latestReceipt || expiredReceipt,
138
- status: formatStatus
139
- };
140
-
141
- var insert = _objectSpread({}, update, {
142
- _key: id,
143
- added: now,
144
- type: 'ios_payment'
145
- });
146
-
147
- var aqlQry = (0, _arangojs.aql)(_templateObject(), transactionId, insert, update);
148
- return (0, _utils2.useDb)(database).query(aqlQry).then(function () {
149
- return null;
150
- })["catch"](function (dbError) {
151
- return (0, _utils2.logError)({
152
- action: action,
153
- category: eventCategory,
154
- label: 'db_error'
155
- }, dbError, {}).then(function () {
156
- return null;
157
- });
158
- });
159
- }; // export const addIOSInApp = (
160
- // context: ApiContext,
161
- // app,
162
- // subscription: PaymentSubscription
163
- // ): Promise<PaymentSubscription> => {
164
- // const action: string = 'addIOSInApp';
165
- // const {isProduction, receipt} = subscription;
166
- // const {database, userId: sessionId} = context;
167
- // const productionHost: string = 'buy.itunes.apple.com';
168
- // const sandboxHost: string = 'sandbox.itunes.apple.com';
169
- // const endpoint: string = isProduction ? productionHost : sandboxHost;
170
- // const verifyUrl: string = `https://${endpoint}/verifyReceipt`;
171
- // const payload: object = {
172
- // password: app.iap,
173
- // 'receipt-data': decodeURIComponent(receipt)
174
- // };
175
- // const options: object = {
176
- // headers: {
177
- // 'Content-Type': 'application/x-www-form-urlencoded'
178
- // }
179
- // };
180
- // return post(verifyUrl, payload, options)
181
- // .then((results) => {
182
- // const json = JSON.parse(results);
183
- // const {
184
- // latest_receipt: latestReceipt,
185
- // latest_receipt_info: latestInfo,
186
- // status
187
- // } = json;
188
- // const {
189
- // is_trial_period: trialPeriod,
190
- // original_purchase_date_ms: added,
191
- // expires_date: expires,
192
- // product_id: planId,
193
- // transaction_id: transactionId
194
- // } = latestInfo;
195
- // if(status === 0 || status === 21006) {
196
- // const id: string = createHash(`payment-${transactionId}`);
197
- // const now: number = Date.now();
198
- // const update: PaymentSubscription = {
199
- // expires,
200
- // isTrial: trialPeriod === 'true',
201
- // isValid: expires > now,
202
- // modified: now,
203
- // planId,
204
- // receipt: latestReceipt,
205
- // transactionId,
206
- // userId: sessionId
207
- // };
208
- // const insert: PaymentSubscription = {
209
- // ...update,
210
- // _key: id,
211
- // added,
212
- // type: 'ios_payment'
213
- // };
214
- // const aqlQry: AqlQuery = aql`UPSERT {transactionId: ${transactionId}}
215
- // INSERT ${insert}
216
- // UPDATE ${update} IN subscriptions
217
- // RETURN NEW`;
218
- // return useDb(database).query(aqlQry)
219
- // .then((cursor: ArrayCursor) => cursor.next())
220
- // .then((updatedSubscription: PaymentSubscription = {}) => updatedSubscription)
221
- // .catch((dbError: Error) => logError({
222
- // action,
223
- // category: eventCategory,
224
- // label: 'db_error'
225
- // }, dbError, context).then(() => null));
226
- // }
227
- // // Errors
228
- // const error: PaymentIOSInAppError = getIOSInAppError(results.status);
229
- // return logException({
230
- // action,
231
- // category: eventCategory,
232
- // label: 'payment_error',
233
- // message: error.message,
234
- // value: error.id
235
- // }, context).then(() => null);
236
- // });
237
- // };
238
-
239
-
240
- exports.iOSSubscriptionUpdate = iOSSubscriptionUpdate;
241
-
242
- var getIOSSubscription = function getIOSSubscription(context) {
243
- var action = 'getIOSSubscription';
244
- var database = context.database,
245
- sessionId = context.userId;
246
- var aqlQry = (0, _arangojs.aql)(_templateObject2(), sessionId);
247
- return (0, _utils2.useDb)(database).query(aqlQry).then(function (cursor) {
248
- return cursor.next();
249
- }).then(function () {
250
- var subscription = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
251
- return subscription;
252
- })["catch"](function (error) {
253
- return (0, _utils2.logError)({
254
- action: action,
255
- category: eventCategory,
256
- label: 'db_error'
257
- }, error, context).then(function () {
258
- return null;
259
- });
260
- });
261
- };
262
-
263
- exports.getIOSSubscription = getIOSSubscription;
264
-
265
- var addIOSInApp = function addIOSInApp(context, subscription) {
266
- var action = 'addIOSInApp';
267
- var database = context.database,
268
- sessionId = context.userId;
269
- var now = Date.now();
270
- var _subscription$added = subscription.added,
271
- added = _subscription$added === void 0 ? now : _subscription$added,
272
- planId = subscription.planId,
273
- receipt = subscription.receipt,
274
- transactionId = subscription.transactionId,
275
- trialEnd = subscription.trialEnd;
276
- var subscriptionId = (0, _utils.createHash)("subscription-".concat(transactionId));
277
- var insert = {
278
- _key: subscriptionId,
279
- added: added,
280
- modified: now,
281
- planId: planId,
282
- receipt: receipt,
283
- transactionId: transactionId,
284
- trialEnd: trialEnd,
285
- type: 'ios_subscription',
286
- userId: sessionId
287
- };
288
- var aqlQry = (0, _arangojs.aql)(_templateObject3(), insert);
289
- return (0, _utils2.useDb)(database).query(aqlQry).then(function (cursor) {
290
- return cursor.next();
291
- }).then(function () {
292
- var updatedSubscription = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
293
- return updatedSubscription;
294
- })["catch"](function (error) {
295
- return (0, _utils2.logError)({
296
- action: action,
297
- category: eventCategory,
298
- label: 'db_error'
299
- }, error, context).then(function () {
300
- return null;
301
- });
302
- });
303
- };
304
-
305
- exports.addIOSInApp = addIOSInApp;
306
-
307
- var getIOSInApp = function getIOSInApp(context) {
308
- var action = 'getIOSInApp';
309
- var database = context.database,
310
- sessionId = context.userId;
311
- var aqlQry = (0, _arangojs.aql)(_templateObject4(), sessionId);
312
- return (0, _utils2.useDb)(database).query(aqlQry).then(function (cursor) {
313
- return cursor.next();
314
- }).then(function () {
315
- var subscription = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
316
- return subscription;
317
- })["catch"](function (error) {
318
- return (0, _utils2.logError)({
319
- action: action,
320
- category: eventCategory,
321
- label: 'db_error'
322
- }, error, context).then(function () {
323
- return null;
324
- });
325
- });
326
- };
327
-
328
- exports.getIOSInApp = getIOSInApp;
329
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhL2lvcy50cyJdLCJuYW1lcyI6WyJldmVudENhdGVnb3J5IiwiZ2V0SU9TSW5BcHBFcnJvciIsInN0YXR1c0NvZGUiLCJjb2RlcyIsImVycm9yIiwibWVzc2FnZSIsInZhbGlkIiwiaWQiLCJyZWRpcmVjdCIsImlPU1N1YnNjcmlwdGlvblVwZGF0ZSIsImRhdGFiYXNlIiwic3Vic2NyaXB0aW9uVXBkYXRlIiwiYWN0aW9uIiwicGxhbklkIiwiYXV0b19yZW5ld19hZGFtX2lkIiwiY2FuY2VsRGF0ZSIsImNhbmNlbGxhdGlvbl9kYXRlIiwic3RhdHVzIiwibm90aWZpY2F0aW9uX3R5cGUiLCJsYXRlc3RSZWNlaXB0IiwibGF0ZXN0X3JlY2VpcHQiLCJsYXRlc3RJbmZvIiwibGF0ZXN0X3JlY2VpcHRfaW5mbyIsImV4cGlyZWRSZWNlaXB0IiwibGF0ZXN0X2V4cGlyZWRfcmVjZWlwdCIsImV4cGlyZWRJbmZvIiwibGF0ZXN0X2V4cGlyZWRfcmVjZWlwdF9pbmZvIiwidHJhbnNhY3Rpb25JZCIsIm9yaWdpbmFsX3RyYW5zYWN0aW9uX2lkIiwiZm9ybWF0U3RhdHVzIiwidG9Mb3dlckNhc2UiLCJub3ciLCJEYXRlIiwicmVjZWlwdEluZm8iLCJ1cGRhdGUiLCJpc1ZhbGlkIiwiZXhwaXJlc19kYXRlX21zIiwibW9kaWZpZWQiLCJyZWNlaXB0IiwiaW5zZXJ0IiwiX2tleSIsImFkZGVkIiwidHlwZSIsImFxbFFyeSIsImFxbCIsInF1ZXJ5IiwidGhlbiIsImRiRXJyb3IiLCJjYXRlZ29yeSIsImxhYmVsIiwiZ2V0SU9TU3Vic2NyaXB0aW9uIiwiY29udGV4dCIsInNlc3Npb25JZCIsInVzZXJJZCIsImN1cnNvciIsIm5leHQiLCJzdWJzY3JpcHRpb24iLCJhZGRJT1NJbkFwcCIsInRyaWFsRW5kIiwic3Vic2NyaXB0aW9uSWQiLCJ1cGRhdGVkU3Vic2NyaXB0aW9uIiwiZ2V0SU9TSW5BcHAiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7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LGFBQUgsc0JBQ0dRLFNBREgsQ0FBdEI7QUFLQSxTQUFPLG1CQUFNMUMsUUFBTixFQUFnQm1DLEtBQWhCLENBQXNCRixNQUF0QixFQUNKRyxJQURJLENBQ0MsVUFBQ1EsTUFBRDtBQUFBLFdBQXlCQSxNQUFNLENBQUNDLElBQVAsRUFBekI7QUFBQSxHQURELEVBRUpULElBRkksQ0FFQztBQUFBLFFBQUNVLFlBQUQsdUVBQXFDLEVBQXJDO0FBQUEsV0FBNENBLFlBQTVDO0FBQUEsR0FGRCxXQUdFLFVBQUNwRCxLQUFEO0FBQUEsV0FBa0Isc0JBQVM7QUFDaENRLE1BQUFBLE1BQU0sRUFBTkEsTUFEZ0M7QUFFaENvQyxNQUFBQSxRQUFRLEVBQUVoRCxhQUZzQjtBQUdoQ2lELE1BQUFBLEtBQUssRUFBRTtBQUh5QixLQUFULEVBSXRCN0MsS0FKc0IsRUFJZitDLE9BSmUsRUFJTkwsSUFKTSxDQUlEO0FBQUEsYUFBTSxJQUFOO0FBQUEsS0FKQyxDQUFsQjtBQUFBLEdBSEYsQ0FBUDtBQVFELENBaEJNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtjcmVhdGVIYXNofSBmcm9tICdAbmxhYnMvdXRpbHMnO1xuaW1wb3J0IHthcWx9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7QXFsUXVlcnl9IGZyb20gJ2FyYW5nb2pzL2xpYi9janMvYXFsLXF1ZXJ5JztcbmltcG9ydCB7QXJyYXlDdXJzb3J9IGZyb20gJ2FyYW5nb2pzL2xpYi9janMvY3Vyc29yJztcblxuaW1wb3J0IHtcbiAgQXBpQ29udGV4dCxcbiAgUGF5bWVudElPU0luQXBwRXJyb3IsXG4gIFBheW1lbnRJT1NTdWJzY3JpcHRpb25JbmZvLFxuICBQYXltZW50SU9TU3Vic2NyaXB0aW9uVXBkYXRlLFxuICBQYXltZW50U3Vic2NyaXB0aW9uXG59IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7bG9nRXJyb3IsIHVzZURifSBmcm9tICcuLi91dGlscyc7XG5cbmNvbnN0IGV2ZW50Q2F0ZWdvcnk6IHN0cmluZyA9ICdpb3MnO1xuXG5leHBvcnQgY29uc3QgZ2V0SU9TSW5BcHBFcnJvciA9IChzdGF0dXNDb2RlOiBzdHJpbmcpOiBQYXltZW50SU9TSW5BcHBFcnJvciA9PiB7XG4gIGNvbnN0IGNvZGVzID0ge1xuICAgIFswXToge2Vycm9yOiBmYWxzZSwgbWVzc2FnZTogJ0FjdGl2ZScsIHZhbGlkOiB0cnVlfSxcbiAgICBbMjEwMDBdOiB7ZXJyb3I6IHRydWUsIGlkOiAncGF5bWVudF9yZWNlaXB0X3VucmVhZGFibGUnLCBtZXNzYWdlOiAnQXBwIHN0b3JlIGNvdWxkIG5vdCByZWFkJywgdmFsaWQ6IGZhbHNlfSxcbiAgICBbMjEwMDJdOiB7ZXJyb3I6IHRydWUsIGlkOiAncGF5bWVudF9kYXRhX21hbGZvcm1lZCcsIG1lc3NhZ2U6ICdEYXRhIHdhcyBtYWxmb3JtZWQnLCB2YWxpZDogZmFsc2V9LFxuICAgIFsyMTAwM106IHtlcnJvcjogdHJ1ZSwgaWQ6ICdwYXltZW50X3JlY2VpcHRfdW5hdXRob3JpemVkJywgbWVzc2FnZTogJ1JlY2VpcHQgbm90IGF1dGhlbnRpY2F0ZWQnLCB2YWxpZDogZmFsc2V9LFxuICAgIFsyMTAwNF06IHtlcnJvcjogdHJ1ZSwgaWQ6ICdwYXltZW50X2ludmFsaWRfc2VjcmV0JywgbWVzc2FnZTogJ1NoYXJlZCBzZWNyZXQgZG9lcyBub3QgbWF0Y2gnLCB2YWxpZDogZmFsc2V9LFxuICAgIFsyMTAwNV06IHtlcnJvcjogdHJ1ZSwgaWQ6ICdwYXltZW50X3NlcnZlcl91bmF2YWlsYWJsZScsIG1lc3NhZ2U6ICdSZWNlaXB0IHNlcnZlciB1bmF2YWlsYWJsZScsIHZhbGlkOiBmYWxzZX0sXG4gICAgWzIxMDA2XToge1xuICAgICAgZXJyb3I6IGZhbHNlLFxuICAgICAgaWQ6ICdwYXltZW50X3N1YnNjcmlwdGlvbl9leHBpcmVkJyxcbiAgICAgIG1lc3NhZ2U6ICdSZWNlaXB0IHZhbGlkIGJ1dCBzdWIgZXhwaXJlZCcsXG4gICAgICB2YWxpZDogdHJ1ZVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogc3BlY2lhbCBjYXNlIGZvciBhcHAgcmV2aWV3IGhhbmRsaW5nIC0gZm9yd2FyZCBhbnkgcmVxdWVzdCB0aGF0IGlzIGludGVuZGVkIGZvciB0aGUgU2FuZGJveCBidXQgd2FzIHNlbnQgdG9cbiAgICAgKiBQcm9kdWN0aW9uLCB0aGlzIGlzIHdoYXQgdGhlIGFwcCByZXZpZXcgdGVhbSBkb2VzXG4gICAgICovXG4gICAgWzIxMDA3XToge1xuICAgICAgZXJyb3I6IHRydWUsXG4gICAgICBpZDogJ3BheW1lbnRfaW52YWxpZF9zZXJ2ZXInLFxuICAgICAgbWVzc2FnZTogJ1NhbmRib3ggcmVjZWlwdCBzZW50IHRvIFByb2R1Y3Rpb24gZW52aXJvbm1lbnQnLFxuICAgICAgcmVkaXJlY3Q6IHRydWUsXG4gICAgICB2YWxpZDogZmFsc2VcbiAgICB9LFxuICAgIFsyMTAwOF06IHtcbiAgICAgIGVycm9yOiB0cnVlLFxuICAgICAgaWQ6ICdwYXltZW50X2ludmFsaWRfc2VydmVyJyxcbiAgICAgIG1lc3NhZ2U6ICdQcm9kdWN0aW9uIHJlY2VpcHQgc2VudCB0byBTYW5kYm94IGVudmlyb25tZW50JyxcbiAgICAgIHZhbGlkOiBmYWxzZVxuICAgIH1cbiAgfTtcblxuICByZXR1cm4gY29kZXNbc3RhdHVzQ29kZV0gfHwge307XG59O1xuXG5leHBvcnQgY29uc3QgaU9TU3Vic2NyaXB0aW9uVXBkYXRlID0gKFxuICBkYXRhYmFzZTogc3RyaW5nLFxuICBzdWJzY3JpcHRpb25VcGRhdGU6IFBheW1lbnRJT1NTdWJzY3JpcHRpb25VcGRhdGVcbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdpT1NTdWJzY3JpcHRpb25VcGRhdGUnO1xuICBjb25zdCB7XG4gICAgYXV0b19yZW5ld19hZGFtX2lkOiBwbGFuSWQsXG4gICAgY2FuY2VsbGF0aW9uX2RhdGU6IGNhbmNlbERhdGUsXG4gICAgbm90aWZpY2F0aW9uX3R5cGU6IHN0YXR1cyxcbiAgICBsYXRlc3RfcmVjZWlwdDogbGF0ZXN0UmVjZWlwdCxcbiAgICBsYXRlc3RfcmVjZWlwdF9pbmZvOiBsYXRlc3RJbmZvLFxuICAgIGxhdGVzdF9leHBpcmVkX3JlY2VpcHQ6IGV4cGlyZWRSZWNlaXB0LFxuICAgIGxhdGVzdF9leHBpcmVkX3JlY2VpcHRfaW5mbzogZXhwaXJlZEluZm8sXG4gICAgb3JpZ2luYWxfdHJhbnNhY3Rpb25faWQ6IHRyYW5zYWN0aW9uSWRcbiAgfSA9IHN1YnNjcmlwdGlvblVwZGF0ZTtcbiAgY29uc3QgZm9ybWF0U3RhdHVzOiBzdHJpbmcgPSAoc3RhdHVzIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBub3c6IG51bWJlciA9IERhdGUubm93KCk7XG4gIGNvbnN0IHJlY2VpcHRJbmZvOiBQYXltZW50SU9TU3Vic2NyaXB0aW9uSW5mb1tdID0gbGF0ZXN0SW5mbyB8fCBleHBpcmVkSW5mbztcbiAgY29uc3QgaWQ6IHN0cmluZyA9IGNyZWF0ZUhhc2goYHBheW1lbnQtJHt0cmFuc2FjdGlvbklkfWApO1xuXG4gIGNvbnN0IHVwZGF0ZTogUGF5bWVudFN1YnNjcmlwdGlvbiA9IHtcbiAgICBjYW5jZWxEYXRlLFxuICAgIGlzVmFsaWQ6IHJlY2VpcHRJbmZvWzBdLmV4cGlyZXNfZGF0ZV9tcyA+IG5vdyxcbiAgICBtb2RpZmllZDogbm93LFxuICAgIHBsYW5JZCxcbiAgICByZWNlaXB0OiBsYXRlc3RSZWNlaXB0IHx8IGV4cGlyZWRSZWNlaXB0LFxuICAgIHN0YXR1czogZm9ybWF0U3RhdHVzXG4gIH07XG4gIGNvbnN0IGluc2VydDogUGF5bWVudFN1YnNjcmlwdGlvbiA9IHtcbiAgICAuLi51cGRhdGUsXG4gICAgX2tleTogaWQsXG4gICAgYWRkZWQ6IG5vdyxcbiAgICB0eXBlOiAnaW9zX3BheW1lbnQnXG4gIH07XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgVVBTRVJUIHt0cmFuc2FjdGlvbklkOiAke3RyYW5zYWN0aW9uSWR9fVxuICAgICBJTlNFUlQgJHtpbnNlcnR9XG4gICAgIFVQREFURSAke3VwZGF0ZX0gSU4gc3Vic2NyaXB0aW9uc1xuICAgICBMSU1JVCAxYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2UpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoKSA9PiBudWxsKVxuICAgIC5jYXRjaCgoZGJFcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICB9LCBkYkVycm9yLCB7fSkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG4vLyBleHBvcnQgY29uc3QgYWRkSU9TSW5BcHAgPSAoXG4vLyAgIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4vLyAgIGFwcCxcbi8vICAgc3Vic2NyaXB0aW9uOiBQYXltZW50U3Vic2NyaXB0aW9uXG4vLyApOiBQcm9taXNlPFBheW1lbnRTdWJzY3JpcHRpb24+ID0+IHtcbi8vICAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnYWRkSU9TSW5BcHAnO1xuLy8gICBjb25zdCB7aXNQcm9kdWN0aW9uLCByZWNlaXB0fSA9IHN1YnNjcmlwdGlvbjtcbi8vICAgY29uc3Qge2RhdGFiYXNlLCB1c2VySWQ6IHNlc3Npb25JZH0gPSBjb250ZXh0O1xuXG4vLyAgIGNvbnN0IHByb2R1Y3Rpb25Ib3N0OiBzdHJpbmcgPSAnYnV5Lml0dW5lcy5hcHBsZS5jb20nO1xuLy8gICBjb25zdCBzYW5kYm94SG9zdDogc3RyaW5nID0gJ3NhbmRib3guaXR1bmVzLmFwcGxlLmNvbSc7XG4vLyAgIGNvbnN0IGVuZHBvaW50OiBzdHJpbmcgPSBpc1Byb2R1Y3Rpb24gPyBwcm9kdWN0aW9uSG9zdCA6IHNhbmRib3hIb3N0O1xuLy8gICBjb25zdCB2ZXJpZnlVcmw6IHN0cmluZyA9IGBodHRwczovLyR7ZW5kcG9pbnR9L3ZlcmlmeVJlY2VpcHRgO1xuLy8gICBjb25zdCBwYXlsb2FkOiBvYmplY3QgPSB7XG4vLyAgICAgcGFzc3dvcmQ6IGFwcC5pYXAsXG4vLyAgICAgJ3JlY2VpcHQtZGF0YSc6IGRlY29kZVVSSUNvbXBvbmVudChyZWNlaXB0KVxuLy8gICB9O1xuLy8gICBjb25zdCBvcHRpb25zOiBvYmplY3QgPSB7XG4vLyAgICAgaGVhZGVyczoge1xuLy8gICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXG4vLyAgICAgfVxuLy8gICB9O1xuXG4vLyAgIHJldHVybiBwb3N0KHZlcmlmeVVybCwgcGF5bG9hZCwgb3B0aW9ucylcbi8vICAgICAudGhlbigocmVzdWx0cykgPT4ge1xuLy8gICAgICAgY29uc3QganNvbiA9IEpTT04ucGFyc2UocmVzdWx0cyk7XG4vLyAgICAgICBjb25zdCB7XG4vLyAgICAgICAgIGxhdGVzdF9yZWNlaXB0OiBsYXRlc3RSZWNlaXB0LFxuLy8gICAgICAgICBsYXRlc3RfcmVjZWlwdF9pbmZvOiBsYXRlc3RJbmZvLFxuLy8gICAgICAgICBzdGF0dXNcbi8vICAgICAgIH0gPSBqc29uO1xuXG4vLyAgICAgICBjb25zdCB7XG4vLyAgICAgICAgIGlzX3RyaWFsX3BlcmlvZDogdHJpYWxQZXJpb2QsXG4vLyAgICAgICAgIG9yaWdpbmFsX3B1cmNoYXNlX2RhdGVfbXM6IGFkZGVkLFxuLy8gICAgICAgICBleHBpcmVzX2RhdGU6IGV4cGlyZXMsXG4vLyAgICAgICAgIHByb2R1Y3RfaWQ6IHBsYW5JZCxcbi8vICAgICAgICAgdHJhbnNhY3Rpb25faWQ6IHRyYW5zYWN0aW9uSWRcbi8vICAgICAgIH0gPSBsYXRlc3RJbmZvO1xuXG4vLyAgICAgICBpZihzdGF0dXMgPT09IDAgfHwgc3RhdHVzID09PSAyMTAwNikge1xuLy8gICAgICAgICBjb25zdCBpZDogc3RyaW5nID0gY3JlYXRlSGFzaChgcGF5bWVudC0ke3RyYW5zYWN0aW9uSWR9YCk7XG4vLyAgICAgICAgIGNvbnN0IG5vdzogbnVtYmVyID0gRGF0ZS5ub3coKTtcbi8vICAgICAgICAgY29uc3QgdXBkYXRlOiBQYXltZW50U3Vic2NyaXB0aW9uID0ge1xuLy8gICAgICAgICAgIGV4cGlyZXMsXG4vLyAgICAgICAgICAgaXNUcmlhbDogdHJpYWxQZXJpb2QgPT09ICd0cnVlJyxcbi8vICAgICAgICAgICBpc1ZhbGlkOiBleHBpcmVzID4gbm93LFxuLy8gICAgICAgICAgIG1vZGlmaWVkOiBub3csXG4vLyAgICAgICAgICAgcGxhbklkLFxuLy8gICAgICAgICAgIHJlY2VpcHQ6IGxhdGVzdFJlY2VpcHQsXG4vLyAgICAgICAgICAgdHJhbnNhY3Rpb25JZCxcbi8vICAgICAgICAgICB1c2VySWQ6IHNlc3Npb25JZFxuLy8gICAgICAgICB9O1xuLy8gICAgICAgICBjb25zdCBpbnNlcnQ6IFBheW1lbnRTdWJzY3JpcHRpb24gPSB7XG4vLyAgICAgICAgICAgLi4udXBkYXRlLFxuLy8gICAgICAgICAgIF9rZXk6IGlkLFxuLy8gICAgICAgICAgIGFkZGVkLFxuLy8gICAgICAgICAgIHR5cGU6ICdpb3NfcGF5bWVudCdcbi8vICAgICAgICAgfTtcblxuLy8gICAgICAgICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFVQU0VSVCB7dHJhbnNhY3Rpb25JZDogJHt0cmFuc2FjdGlvbklkfX1cbi8vICAgICAgICAgICAgICAgSU5TRVJUICR7aW5zZXJ0fVxuLy8gICAgICAgICAgICAgICBVUERBVEUgJHt1cGRhdGV9IElOIHN1YnNjcmlwdGlvbnNcbi8vICAgICAgICAgICAgICAgUkVUVVJOIE5FV2A7XG5cbi8vICAgICAgICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlKS5xdWVyeShhcWxRcnkpXG4vLyAgICAgICAgICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4vLyAgICAgICAgICAgLnRoZW4oKHVwZGF0ZWRTdWJzY3JpcHRpb246IFBheW1lbnRTdWJzY3JpcHRpb24gPSB7fSkgPT4gdXBkYXRlZFN1YnNjcmlwdGlvbilcbi8vICAgICAgICAgICAuY2F0Y2goKGRiRXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4vLyAgICAgICAgICAgICBhY3Rpb24sXG4vLyAgICAgICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbi8vICAgICAgICAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4vLyAgICAgICAgICAgfSwgZGJFcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG4vLyAgICAgICB9XG5cbi8vICAgICAgIC8vIEVycm9yc1xuLy8gICAgICAgY29uc3QgZXJyb3I6IFBheW1lbnRJT1NJbkFwcEVycm9yID0gZ2V0SU9TSW5BcHBFcnJvcihyZXN1bHRzLnN0YXR1cyk7XG5cbi8vICAgICAgIHJldHVybiBsb2dFeGNlcHRpb24oe1xuLy8gICAgICAgICBhY3Rpb24sXG4vLyAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuLy8gICAgICAgICBsYWJlbDogJ3BheW1lbnRfZXJyb3InLFxuLy8gICAgICAgICBtZXNzYWdlOiBlcnJvci5tZXNzYWdlLFxuLy8gICAgICAgICB2YWx1ZTogZXJyb3IuaWRcbi8vICAgICAgIH0sIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCk7XG4vLyAgICAgfSk7XG4vLyB9O1xuXG5leHBvcnQgY29uc3QgZ2V0SU9TU3Vic2NyaXB0aW9uID0gKGNvbnRleHQ6IEFwaUNvbnRleHQpOiBQcm9taXNlPFBheW1lbnRTdWJzY3JpcHRpb24+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0SU9TU3Vic2NyaXB0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlLCB1c2VySWQ6IHNlc3Npb25JZH0gPSBjb250ZXh0O1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBzIElOIHN1YnNjcmlwdGlvbnNcbiAgICAgIEZJTFRFUiBzLnVzZXJJZCA9PSAke3Nlc3Npb25JZH0gJiYgcy50eXBlID09IFwiaW9zX3BheW1lbnRcIlxuICAgICAgTElNSVQgMVxuICAgICAgUkVUVVJOIHNgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKChzdWJzY3JpcHRpb246IFBheW1lbnRTdWJzY3JpcHRpb24gPSB7fSkgPT4gc3Vic2NyaXB0aW9uKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZElPU0luQXBwID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHN1YnNjcmlwdGlvbjogUGF5bWVudFN1YnNjcmlwdGlvbik6IFByb21pc2U8UGF5bWVudFN1YnNjcmlwdGlvbj4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdhZGRJT1NJbkFwcCc7XG4gIGNvbnN0IHtkYXRhYmFzZSwgdXNlcklkOiBzZXNzaW9uSWR9ID0gY29udGV4dDtcbiAgY29uc3Qgbm93OiBudW1iZXIgPSBEYXRlLm5vdygpO1xuICBjb25zdCB7YWRkZWQgPSBub3csIHBsYW5JZCwgcmVjZWlwdCwgdHJhbnNhY3Rpb25JZCwgdHJpYWxFbmR9ID0gc3Vic2NyaXB0aW9uO1xuICBjb25zdCBzdWJzY3JpcHRpb25JZDogc3RyaW5nID0gY3JlYXRlSGFzaChgc3Vic2NyaXB0aW9uLSR7dHJhbnNhY3Rpb25JZH1gKTtcbiAgY29uc3QgaW5zZXJ0OiBQYXltZW50U3Vic2NyaXB0aW9uID0ge1xuICAgIF9rZXk6IHN1YnNjcmlwdGlvbklkLFxuICAgIGFkZGVkLFxuICAgIG1vZGlmaWVkOiBub3csXG4gICAgcGxhbklkLFxuICAgIHJlY2VpcHQsXG4gICAgdHJhbnNhY3Rpb25JZCxcbiAgICB0cmlhbEVuZCxcbiAgICB0eXBlOiAnaW9zX3N1YnNjcmlwdGlvbicsXG4gICAgdXNlcklkOiBzZXNzaW9uSWRcbiAgfTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBJTlNFUlQgJHtpbnNlcnR9IElOIHN1YnNjcmlwdGlvbnMgUkVUVVJOIE5FV2A7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKHVwZGF0ZWRTdWJzY3JpcHRpb246IFBheW1lbnRTdWJzY3JpcHRpb24gPSB7fSkgPT4gdXBkYXRlZFN1YnNjcmlwdGlvbilcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRJT1NJbkFwcCA9IChjb250ZXh0OiBBcGlDb250ZXh0KTogUHJvbWlzZTxQYXltZW50U3Vic2NyaXB0aW9uPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldElPU0luQXBwJztcbiAgY29uc3Qge2RhdGFiYXNlLCB1c2VySWQ6IHNlc3Npb25JZH0gPSBjb250ZXh0O1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBzIElOIHN1YnNjcmlwdGlvblxuICAgICAgRklMVEVSIHMudXNlcklkID09ICR7c2Vzc2lvbklkfSAmJiBzLnR5cGUgPT0gXCJpb3NcIlxuICAgICAgTElNSVQgMVxuICAgICAgUkVUVVJOIHNgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKChzdWJzY3JpcHRpb246IFBheW1lbnRTdWJzY3JpcHRpb24gPSB7fSkgPT4gc3Vic2NyaXB0aW9uKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcbiJdfQ==