@nlabs/reaktor 0.1.10 → 0.1.12

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