@bprotsyk/aso-core 2.1.24 → 2.1.31

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 (248) hide show
  1. package/README.md +1 -1
  2. package/lib/app/app-integration.d.ts +53 -53
  3. package/lib/app/app-integration.js +63 -63
  4. package/lib/app/app-list-item.d.ts +5 -5
  5. package/lib/app/app-list-item.js +2 -2
  6. package/lib/app/app-type.d.ts +4 -4
  7. package/lib/app/app-type.js +8 -8
  8. package/lib/app/app.d.ts +207 -213
  9. package/lib/app/app.js +161 -184
  10. package/lib/general/cloudflare-domain.d.ts +42 -42
  11. package/lib/general/cloudflare-domain.js +12 -12
  12. package/lib/general/domain.d.ts +108 -108
  13. package/lib/general/domain.js +61 -61
  14. package/lib/general/namecheap-domain.d.ts +85 -85
  15. package/lib/general/namecheap-domain.js +14 -14
  16. package/lib/general/push.d.ts +6 -6
  17. package/lib/general/push.js +2 -2
  18. package/lib/general/queue.d.ts +2 -2
  19. package/lib/general/queue.js +1 -1
  20. package/lib/general/shape.d.ts +18 -18
  21. package/lib/general/shape.js +36 -36
  22. package/lib/index.d.ts +26 -26
  23. package/lib/index.js +69 -69
  24. package/lib/keitaro/keitaro-campaign.d.ts +31 -31
  25. package/lib/keitaro/keitaro-campaign.js +5 -5
  26. package/lib/keitaro/keitaro-domain.d.ts +6 -6
  27. package/lib/keitaro/keitaro-domain.js +2 -2
  28. package/lib/keitaro/keitaro-offer.d.ts +7 -7
  29. package/lib/keitaro/keitaro-offer.js +2 -2
  30. package/lib/keitaro/keitaro-stream.d.ts +20 -20
  31. package/lib/keitaro/keitaro-stream.js +2 -2
  32. package/lib/network/keitaro/http.d.ts +2 -2
  33. package/lib/network/keitaro/http.js +12 -12
  34. package/lib/network/keitaro/keitaro-service.d.ts +50 -50
  35. package/lib/network/keitaro/keitaro-service.js +261 -261
  36. package/lib/offers/list.d.ts +37 -37
  37. package/lib/offers/list.js +12 -12
  38. package/lib/offers/offer.d.ts +91 -91
  39. package/lib/offers/offer.js +42 -42
  40. package/lib/offers/offerwall/offerwall-home-dialog-data.d.ts +6 -6
  41. package/lib/offers/offerwall/offerwall-home-dialog-data.js +2 -2
  42. package/lib/offers/offerwall/offerwall-offer.d.ts +12 -12
  43. package/lib/offers/offerwall/offerwall-offer.js +2 -2
  44. package/lib/offers/offerwall/offerwall-response.d.ts +6 -6
  45. package/lib/offers/offerwall/offerwall-response.js +2 -2
  46. package/lib/offers/offerwall/offerwall-section.d.ts +6 -6
  47. package/lib/offers/offerwall/offerwall-section.js +2 -2
  48. package/lib/offers/section.d.ts +47 -47
  49. package/lib/offers/section.js +20 -20
  50. package/lib/panel/app/upsert-flash-app-request.d.ts +31 -0
  51. package/lib/panel/app/upsert-flash-app-request.js +2 -0
  52. package/lib/panel/auth.d.ts +9 -9
  53. package/lib/panel/auth.js +2 -2
  54. package/lib/panel/flash/upsert-flash-app-request.d.ts +31 -31
  55. package/lib/panel/flash/upsert-flash-app-request.js +2 -2
  56. package/lib/panel/user.d.ts +46 -46
  57. package/lib/panel/user.js +28 -28
  58. package/lib/templates/nginx-template.conf +35 -35
  59. package/lib/templates/nginx-template.d.ts +1 -1
  60. package/lib/templates/nginx-template.js +39 -39
  61. package/lib/templates/nginx-template.ts +35 -35
  62. package/lib/utils/general.d.ts +11 -11
  63. package/lib/utils/general.js +40 -40
  64. package/lib/utils/huawei/converter.d.ts +2 -2
  65. package/lib/utils/huawei/converter.js +53 -53
  66. package/lib/utils/keitaro-utils.d.ts +13 -15
  67. package/lib/utils/keitaro-utils.js +569 -569
  68. package/lib/utils/server-util.js +303 -303
  69. package/package.json +51 -51
  70. package/src/app/app-integration.ts +66 -66
  71. package/src/app/app-list-item.ts +4 -4
  72. package/src/app/app-type.ts +3 -3
  73. package/src/app/app.ts +322 -346
  74. package/src/general/cloudflare-domain.ts +44 -44
  75. package/src/general/domain.ts +105 -105
  76. package/src/general/namecheap-domain.ts +63 -63
  77. package/src/general/push.ts +5 -5
  78. package/src/general/queue.ts +4 -4
  79. package/src/general/shape.tsx +55 -55
  80. package/src/index.ts +32 -32
  81. package/src/keitaro/keitaro-campaign.ts +35 -35
  82. package/src/keitaro/keitaro-domain.ts +5 -5
  83. package/src/keitaro/keitaro-offer.ts +6 -6
  84. package/src/keitaro/keitaro-stream.ts +19 -19
  85. package/src/network/keitaro/http.ts +8 -8
  86. package/src/network/keitaro/keitaro-service.ts +323 -323
  87. package/src/offers/list.ts +19 -19
  88. package/src/offers/offer.ts +80 -80
  89. package/src/offers/offerwall/offerwall-home-dialog-data.ts +6 -6
  90. package/src/offers/offerwall/offerwall-offer.ts +12 -12
  91. package/src/offers/offerwall/offerwall-response.ts +7 -7
  92. package/src/offers/offerwall/offerwall-section.ts +7 -7
  93. package/src/offers/section.ts +29 -29
  94. package/src/panel/{flash → app}/upsert-flash-app-request.ts +39 -39
  95. package/src/panel/auth.ts +9 -9
  96. package/src/panel/user.ts +38 -38
  97. package/src/templates/nginx-template.ts +35 -35
  98. package/src/utils/data.csv +65 -65
  99. package/src/utils/general.ts +36 -36
  100. package/src/utils/huawei/converter.ts +55 -55
  101. package/src/utils/keitaro-utils.ts +664 -662
  102. package/src/utils/map-apps.json +4747 -4747
  103. package/src/utils/server-util.ts +368 -368
  104. package/src/utils/update-postbacks.js +27 -27
  105. package/tsconfig.json +20 -20
  106. package/docs/.nojekyll +0 -1
  107. package/docs/DOCS.zip +0 -0
  108. package/docs/assets/highlight.css +0 -22
  109. package/docs/assets/main.js +0 -58
  110. package/docs/assets/search.js +0 -1
  111. package/docs/assets/style.css +0 -1279
  112. package/docs/enums/PanelUserAccessScope.html +0 -127
  113. package/docs/functions/ASO_v0.toDefault.html +0 -81
  114. package/docs/functions/ASO_v1.toDefault.html +0 -81
  115. package/docs/functions/ASO_v2.toDefault.html +0 -79
  116. package/docs/functions/ASO_v3.toDefault.html +0 -78
  117. package/docs/functions/ASO_v4.toDefault.html +0 -76
  118. package/docs/functions/ASO_v5.toDefault.html +0 -77
  119. package/docs/functions/ColoredText.html +0 -93
  120. package/docs/functions/ShapeDiv.html +0 -110
  121. package/docs/index.html +0 -83
  122. package/docs/interfaces/ASOConfigFetch.IUsageLogEntry.html +0 -1414
  123. package/docs/interfaces/ASOConfigFetch.IUsageLogRequest.html +0 -104
  124. package/docs/interfaces/ASOConfigFetch.IUsageLogResponse.html +0 -109
  125. package/docs/interfaces/ASO_v0.IAuthorizationActionMapping.html +0 -146
  126. package/docs/interfaces/ASO_v0.IColoredSpan.html +0 -90
  127. package/docs/interfaces/ASO_v0.IColoredSpanMapping.html +0 -90
  128. package/docs/interfaces/ASO_v0.IColoredString.html +0 -90
  129. package/docs/interfaces/ASO_v0.IColoredStringMapping.html +0 -90
  130. package/docs/interfaces/ASO_v0.IConfig.html +0 -557
  131. package/docs/interfaces/ASO_v0.IConfigMapping.html +0 -230
  132. package/docs/interfaces/ASO_v0.ILocalization.html +0 -517
  133. package/docs/interfaces/ASO_v0.ILocalizationMap.html +0 -78
  134. package/docs/interfaces/ASO_v0.ILocalizationMapping.html +0 -503
  135. package/docs/interfaces/ASO_v0.IOfferResult.html +0 -104
  136. package/docs/interfaces/ASO_v0.IOfferResultEmoji.html +0 -83
  137. package/docs/interfaces/ASO_v0.IOfferResultMapping.html +0 -118
  138. package/docs/interfaces/ASO_v0.IOfferSectionMapping.html +0 -109
  139. package/docs/interfaces/ASO_v0.IOffersSection.html +0 -97
  140. package/docs/interfaces/ASO_v0.ISectionPalette.html +0 -153
  141. package/docs/interfaces/ASO_v0.ISectionPaletteMapping.html +0 -153
  142. package/docs/interfaces/ASO_v1.IAuthorizationActionMapping.html +0 -146
  143. package/docs/interfaces/ASO_v1.IColoredSpan.html +0 -90
  144. package/docs/interfaces/ASO_v1.IColoredSpanMapping.html +0 -90
  145. package/docs/interfaces/ASO_v1.IColoredString.html +0 -90
  146. package/docs/interfaces/ASO_v1.IColoredStringMapping.html +0 -90
  147. package/docs/interfaces/ASO_v1.IConfig.html +0 -550
  148. package/docs/interfaces/ASO_v1.IConfigMapping.html +0 -230
  149. package/docs/interfaces/ASO_v1.ILocalization.html +0 -482
  150. package/docs/interfaces/ASO_v1.ILocalizationMap.html +0 -78
  151. package/docs/interfaces/ASO_v1.ILocalizationMapping.html +0 -482
  152. package/docs/interfaces/ASO_v1.IOfferResult.html +0 -104
  153. package/docs/interfaces/ASO_v1.IOfferResultEmoji.html +0 -83
  154. package/docs/interfaces/ASO_v1.IOfferResultMapping.html +0 -118
  155. package/docs/interfaces/ASO_v1.IOfferSectionMapping.html +0 -109
  156. package/docs/interfaces/ASO_v1.IOffersSection.html +0 -102
  157. package/docs/interfaces/ASO_v1.ISectionPalette.html +0 -153
  158. package/docs/interfaces/ASO_v1.ISectionPaletteMapping.html +0 -153
  159. package/docs/interfaces/ASO_v2.IAuthorizationActionMapping.html +0 -139
  160. package/docs/interfaces/ASO_v2.IColoredSpanMapping.html +0 -90
  161. package/docs/interfaces/ASO_v2.IColoredString.html +0 -90
  162. package/docs/interfaces/ASO_v2.IColoredStringMapping.html +0 -90
  163. package/docs/interfaces/ASO_v2.IConfig.html +0 -494
  164. package/docs/interfaces/ASO_v2.IConfigMapping.html +0 -202
  165. package/docs/interfaces/ASO_v2.ILocalization.html +0 -475
  166. package/docs/interfaces/ASO_v2.ILocalizationMap.html +0 -76
  167. package/docs/interfaces/ASO_v2.ILocalizationMapping.html +0 -363
  168. package/docs/interfaces/ASO_v2.IOfferResult.html +0 -111
  169. package/docs/interfaces/ASO_v2.IOfferResultMapping.html +0 -118
  170. package/docs/interfaces/ASO_v2.IOfferSectionMapping.html +0 -109
  171. package/docs/interfaces/ASO_v2.IOffersSection.html +0 -102
  172. package/docs/interfaces/ASO_v2.ISectionPalette.html +0 -153
  173. package/docs/interfaces/ASO_v2.ISectionPaletteMapping.html +0 -153
  174. package/docs/interfaces/ASO_v3.IAuthorizationActionMapping.html +0 -139
  175. package/docs/interfaces/ASO_v3.IColoredSpanMapping.html +0 -90
  176. package/docs/interfaces/ASO_v3.IColoredString.html +0 -90
  177. package/docs/interfaces/ASO_v3.IColoredStringMapping.html +0 -90
  178. package/docs/interfaces/ASO_v3.IConfig.html +0 -515
  179. package/docs/interfaces/ASO_v3.IConfigMapping.html +0 -209
  180. package/docs/interfaces/ASO_v3.ILocalization.html +0 -447
  181. package/docs/interfaces/ASO_v3.ILocalizationMap.html +0 -75
  182. package/docs/interfaces/ASO_v3.ILocalizationMapping.html +0 -342
  183. package/docs/interfaces/ASO_v3.IOfferResultMapping.html +0 -118
  184. package/docs/interfaces/ASO_v3.IOfferSectionMapping.html +0 -109
  185. package/docs/interfaces/ASO_v3.IOffersSection.html +0 -102
  186. package/docs/interfaces/ASO_v3.ISectionPalette.html +0 -153
  187. package/docs/interfaces/ASO_v3.ISectionPaletteMapping.html +0 -153
  188. package/docs/interfaces/ASO_v4.IAuthorizationActionMapping.html +0 -139
  189. package/docs/interfaces/ASO_v4.IColoredSpanMapping.html +0 -90
  190. package/docs/interfaces/ASO_v4.IColoredString.html +0 -90
  191. package/docs/interfaces/ASO_v4.IColoredStringMapping.html +0 -90
  192. package/docs/interfaces/ASO_v4.IConfig.html +0 -515
  193. package/docs/interfaces/ASO_v4.IConfigMapping.html +0 -132
  194. package/docs/interfaces/ASO_v4.ILocalization.html +0 -370
  195. package/docs/interfaces/ASO_v4.ILocalizationMap.html +0 -73
  196. package/docs/interfaces/ASO_v4.ILocalizationMapping.html +0 -258
  197. package/docs/interfaces/ASO_v4.IOfferResultMapping.html +0 -118
  198. package/docs/interfaces/ASO_v4.IOfferSectionMapping.html +0 -90
  199. package/docs/interfaces/ASO_v4.LocalizedString.html +0 -83
  200. package/docs/interfaces/ASO_v5.IAuthorizationActionMapping.html +0 -139
  201. package/docs/interfaces/ASO_v5.IColoredSpan.html +0 -90
  202. package/docs/interfaces/ASO_v5.IColoredSpanMapping.html +0 -90
  203. package/docs/interfaces/ASO_v5.IColoredString.html +0 -90
  204. package/docs/interfaces/ASO_v5.IColoredStringMapping.html +0 -90
  205. package/docs/interfaces/ASO_v5.IConfig.html +0 -543
  206. package/docs/interfaces/ASO_v5.IConfigMapping.html +0 -160
  207. package/docs/interfaces/ASO_v5.ILocalization.html +0 -412
  208. package/docs/interfaces/ASO_v5.ILocalizationMap.html +0 -74
  209. package/docs/interfaces/ASO_v5.ILocalizationMapping.html +0 -300
  210. package/docs/interfaces/ASO_v5.IOfferResultMapping.html +0 -118
  211. package/docs/interfaces/ASO_v5.IOfferSectionMapping.html +0 -90
  212. package/docs/interfaces/ASO_v5.LocalizedString.html +0 -83
  213. package/docs/interfaces/IAsoConfigResponse.html +0 -82
  214. package/docs/interfaces/IAsoCustomizedOffer.html +0 -117
  215. package/docs/interfaces/IAsoDefaultConfig.html +0 -444
  216. package/docs/interfaces/IAsoOfferResponse.html +0 -82
  217. package/docs/interfaces/IAsoSection.html +0 -89
  218. package/docs/interfaces/IAsoSingleOffer.html +0 -89
  219. package/docs/interfaces/IAuthToken.html +0 -103
  220. package/docs/interfaces/IColoredTextProps.html +0 -75
  221. package/docs/interfaces/IFlashApp.html +0 -145
  222. package/docs/interfaces/IFlashAppListItem.html +0 -89
  223. package/docs/interfaces/IGradient.html +0 -96
  224. package/docs/interfaces/IOffer.html +0 -138
  225. package/docs/interfaces/IOfferWallAuthConfig.html +0 -131
  226. package/docs/interfaces/IOfferWallAuthLocalization.html +0 -103
  227. package/docs/interfaces/IOfferWallAuthSubmitRequest.html +0 -75
  228. package/docs/interfaces/IOfferWallAuthSubmitResponse.html +0 -75
  229. package/docs/interfaces/IOfferWallHomeDialogData.html +0 -96
  230. package/docs/interfaces/IOfferWallOffer.html +0 -110
  231. package/docs/interfaces/IOfferWallResponse.html +0 -82
  232. package/docs/interfaces/IOfferWallSection.html +0 -89
  233. package/docs/interfaces/IPanelUser.html +0 -1406
  234. package/docs/interfaces/IPush.html +0 -96
  235. package/docs/interfaces/IShape.html +0 -103
  236. package/docs/interfaces/IStroke.html +0 -82
  237. package/docs/interfaces/IUpsertFlashAppRequest.html +0 -215
  238. package/docs/interfaces/IUpsertFlashAppResponse.html +0 -82
  239. package/docs/modules/ASOConfigFetch.html +0 -64
  240. package/docs/modules/ASO_v0.html +0 -97
  241. package/docs/modules/ASO_v1.html +0 -97
  242. package/docs/modules/ASO_v2.html +0 -93
  243. package/docs/modules/ASO_v3.html +0 -91
  244. package/docs/modules/ASO_v4.html +0 -87
  245. package/docs/modules/ASO_v5.html +0 -89
  246. package/docs/modules.html +0 -134
  247. package/docs/variables/FlashAppSchema.html +0 -84
  248. package/docs/variables/PanelUserSchema.html +0 -84
@@ -1,261 +1,261 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.KeitaroService = exports.upsertStreamToCampaign = void 0;
7
- const http_1 = __importDefault(require("./http"));
8
- const keitaro_utils_1 = require("../../utils/keitaro-utils");
9
- const general_1 = require("../../utils/general");
10
- async function getStreamsByCampaignId(campaignId) {
11
- const { data: streams } = await http_1.default.get(`campaigns/${campaignId}/streams`);
12
- return streams;
13
- }
14
- async function getAllCampaigns() {
15
- const { data: campaigns } = await http_1.default.get('campaigns');
16
- return campaigns;
17
- }
18
- async function cloneStreams(originalCampaignId, streamPositionsToClone, campaignRegExp) {
19
- // Get the original campaign's streams
20
- const originalStreams = await getStreamsByCampaignId(originalCampaignId);
21
- // Filter the original streams by the given stream positions to clone
22
- const streamsToClone = originalStreams.filter(stream => streamPositionsToClone.includes(stream.position));
23
- // Get a list of all campaigns
24
- const allCampaigns = await getAllCampaigns();
25
- // Filter the campaigns by the given RegExp
26
- const matchingCampaigns = allCampaigns.filter(campaign => campaignRegExp.exec(campaign.name) && campaign.id != originalCampaignId);
27
- // console.log(matchingCampaigns)
28
- // For each matching campaign, clone the streams
29
- for (const matchingCampaign of matchingCampaigns) {
30
- for (const streamToClone of streamsToClone) {
31
- await http_1.default.post('streams', {
32
- name: streamToClone.name,
33
- campaign_id: matchingCampaign.id,
34
- schema: streamToClone.schema,
35
- type: streamToClone.type,
36
- action_type: streamToClone.action_type,
37
- weight: 100,
38
- offers: streamToClone.offers.map((offer) => {
39
- return {
40
- offer_id: offer.offer_id,
41
- share: 100
42
- };
43
- }),
44
- filters: streamToClone.filters.map((filter) => {
45
- return {
46
- name: filter.name,
47
- mode: filter.mode,
48
- payload: filter.payload
49
- };
50
- }),
51
- });
52
- }
53
- }
54
- }
55
- async function updateCampaign(id, payload) {
56
- await http_1.default.put(`campaigns/${id}`, payload);
57
- }
58
- async function createStreamForMatchingCampaigns(streamPartialPayload, offerId, campaignRegExp, avoidGroup) {
59
- // Get a list of all campaigns
60
- const allCampaigns = await getAllCampaigns();
61
- // Filter the campaigns by the given RegExp
62
- const matchingCampaigns = allCampaigns.filter(campaign => (avoidGroup ? campaign.group_id != avoidGroup : true) && campaignRegExp.exec(campaign.name));
63
- // console.log(matchingCampaigns)
64
- // For each matching campaign, clone the streams
65
- for (const matchingCampaign of matchingCampaigns) {
66
- let streams = await getStreamsByCampaignId(matchingCampaign.id);
67
- let identicalStream = streams.find((stream) => stream.name.includes(offerId));
68
- if (identicalStream) {
69
- await http_1.default.put(`streams/${identicalStream.id}`, {
70
- campaign_id: matchingCampaign.id,
71
- ...streamPartialPayload
72
- });
73
- }
74
- else {
75
- await http_1.default.post('streams', {
76
- campaign_id: matchingCampaign.id,
77
- ...streamPartialPayload
78
- });
79
- }
80
- }
81
- }
82
- async function getAllOffers() {
83
- const { data: offers } = await http_1.default.get('offers');
84
- return offers;
85
- }
86
- async function findKeitaroOffers(filter) {
87
- let offers = await getAllOffers();
88
- if (filter.caption)
89
- offers = offers.filter((o) => o.name.includes(filter.caption));
90
- if (filter.keitaroId)
91
- offers = offers.filter((o) => o.id == filter.keitaroId);
92
- if (filter.name)
93
- offers = offers.filter((o) => o.name.includes(filter.name));
94
- return offers;
95
- }
96
- async function getOfferByKeitaroId(id) {
97
- const { data: offer } = await http_1.default.get(`offers/${id}`);
98
- return offer;
99
- }
100
- async function updateOffer(offer) {
101
- const { data: o } = await http_1.default.put(`offers/${offer.id}`, offer);
102
- return o;
103
- }
104
- function createStreamPartialPayload(keitaroOfferId, offerName, offerId, offerGeo) {
105
- return {
106
- name: `${offerName} ${offerGeo} (${offerId})`,
107
- schema: "landings",
108
- type: "regular",
109
- action_type: "http",
110
- weight: 100,
111
- offers: [{
112
- offer_id: keitaroOfferId,
113
- share: 100,
114
- state: "active"
115
- }],
116
- filters: [{
117
- name: "sub_id_15",
118
- mode: "accept",
119
- payload: [offerId]
120
- }],
121
- };
122
- }
123
- async function addOfferToKeitaro(offer, affiliateId, link, avoidGroup, groupId) {
124
- // TODO look if offer already exists by offer.name
125
- let allOffers = await getAllOffers();
126
- let identicalOffer = allOffers.find((o) => { return o.name.includes(offer.name); });
127
- let keitaroOfferId;
128
- if (identicalOffer) {
129
- keitaroOfferId = identicalOffer.id;
130
- }
131
- else {
132
- let offerPayload = {
133
- name: `${offer.caption} ${offer.geo} (${offer.name})`,
134
- group_id: groupId || 1,
135
- action_payload: link,
136
- affiliate_network_id: affiliateId,
137
- country: [offer.geo],
138
- action_type: "http",
139
- offer_type: "external",
140
- payout_auto: true,
141
- payout_upsell: true,
142
- };
143
- const { data: keitaroOffer } = await http_1.default.post(`offers`, offerPayload);
144
- keitaroOfferId = keitaroOffer.id;
145
- }
146
- let streamPartialPayload = createStreamPartialPayload(keitaroOfferId, offer.caption, offer.name, offer.geo);
147
- await createStreamForMatchingCampaigns(streamPartialPayload, offer.name, /◈/, avoidGroup);
148
- }
149
- async function createCampaign(campaignData) {
150
- let { data: campaign } = await http_1.default.post(`/campaigns`, campaignData);
151
- return campaign;
152
- }
153
- async function getCampaignById(id) {
154
- const { data: campaign } = await http_1.default.get(`/campaigns/${id}`);
155
- return campaign;
156
- }
157
- async function upsertStreamToCampaign(campaign, stream) {
158
- let streams = await getStreamsByCampaignId(campaign.id);
159
- let identicalStream = streams.find((s) => stream.name == s.name);
160
- if (identicalStream) {
161
- console.log(`Found identical! Name: ${stream.name}`);
162
- await http_1.default.put(`streams/${identicalStream.id}`, {
163
- campaign_id: campaign.id,
164
- ...stream
165
- });
166
- }
167
- else {
168
- await http_1.default.post('streams', {
169
- campaign_id: campaign.id,
170
- ...stream
171
- });
172
- }
173
- }
174
- exports.upsertStreamToCampaign = upsertStreamToCampaign;
175
- async function cloneOWCampaign(app) {
176
- let name = `#${app.id} [◈])`;
177
- let allCampaigns = await getAllCampaigns();
178
- let matchingCampaign = allCampaigns.filter((c) => c.name.includes(`#${app.id} [◈]`));
179
- if (matchingCampaign.length > 0)
180
- return matchingCampaign[0];
181
- const { data: campaigns } = await http_1.default.post(`/campaigns/2673/clone`);
182
- if (campaigns.length == 0)
183
- throw Error("Campaign cloning falied");
184
- let clonedCampaign = campaigns[0];
185
- let allDomains = await exports.KeitaroService.getDomains(true);
186
- if (!allDomains) {
187
- throw Error(`Failed to get all domains list`);
188
- }
189
- const domain = allDomains[Math.floor(Math.random() * allDomains.length)];
190
- let payload = {
191
- name: name,
192
- traffic_source_id: keitaro_utils_1.TRAFFIC_SOURCE_ID_FLASH_AI,
193
- domain_id: domain.id,
194
- parameters: (0, keitaro_utils_1.prepareOWCampaignParameters)(app)
195
- };
196
- const { data: campaign } = await http_1.default.put(`/campaigns/${clonedCampaign.id}`, payload);
197
- return campaign;
198
- }
199
- async function cloneDCampaign(app) {
200
- let name = `D #${app.id} (${app.bundle})`;
201
- let allCampaigns = await getAllCampaigns();
202
- let matchingCampaign = allCampaigns.filter((c) => c.name.includes(`D #${app.id}`));
203
- if (matchingCampaign.length > 0)
204
- return matchingCampaign[0];
205
- const { data: campaigns } = await http_1.default.post(`/campaigns/2693/clone`);
206
- if (campaigns.length == 0)
207
- throw Error("Campaign cloning falied");
208
- let clonedCampaign = campaigns[0];
209
- let allDomains = await exports.KeitaroService.getDomains(true);
210
- if (!allDomains) {
211
- throw Error(`Failed to get all domains list`);
212
- }
213
- const domain = allDomains[Math.floor(Math.random() * allDomains.length)];
214
- let payload = {
215
- name: name,
216
- traffic_source_id: keitaro_utils_1.TRAFFIC_SOURCE_ID_FLASH_AI,
217
- domain_id: domain.id,
218
- group_id: 93,
219
- };
220
- const { data: campaign } = await http_1.default.put(`/campaigns/${clonedCampaign.id}`, payload);
221
- return campaign;
222
- }
223
- async function changeCampaignsGroup(fromId, toId, exceptForCampaignIds, onlyForCampaignIds) {
224
- let campaigns = await getAllCampaigns();
225
- const matchingCampaigns = campaigns.filter(campaign => campaign.group_id == fromId
226
- && exceptForCampaignIds.length > 0 ? !exceptForCampaignIds.includes(campaign.id) : onlyForCampaignIds?.includes(campaign.id));
227
- for (let campaign of matchingCampaigns) {
228
- await updateCampaign(campaign.id, { group_id: toId });
229
- }
230
- }
231
- // Domain
232
- async function getDomains(onlyActive) {
233
- const { data: domains } = await http_1.default.get(`/domains`);
234
- return onlyActive ? domains.filter((d) => d.network_status == "active") : domains;
235
- }
236
- async function getProfitForTimeRange(from, to) {
237
- let fromString = (0, general_1.convertMillisToDate)(from);
238
- let toString = (0, general_1.convertMillisToDate)(to);
239
- let { data: data } = await http_1.default.post(`/report/build`, {
240
- range: {
241
- from: fromString,
242
- to: toString,
243
- timezone: 'Europe/Kyiv'
244
- },
245
- metrics: ['profit']
246
- });
247
- return data.rows[0].profit;
248
- }
249
- async function getProfitForTodayAndYesterday() {
250
- let timestamps = (0, general_1.getTimestampsForTodayAndYesterday)();
251
- let today = await exports.KeitaroService.getProfitForTimeRange(timestamps.today.start, timestamps.today.end);
252
- let yesterday = await exports.KeitaroService.getProfitForTimeRange(timestamps.yesterday.start, timestamps.yesterday.end);
253
- return {
254
- today: today,
255
- yesterday: yesterday
256
- };
257
- }
258
- exports.KeitaroService = {
259
- getStreamsByCampaignId, updateCampaign, getAllCampaigns, getAllOffers, cloneStreams, addOfferToKeitaro, getOfferByKeitaroId, getDomains, createCampaign, getCampaignById, upsertStreamToCampaign, cloneOWCampaign,
260
- updateOffer, changeCampaignsGroup, getProfitForTimeRange, getProfitForTodayAndYesterday, cloneDCampaign, findKeitaroOffers
261
- };
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.KeitaroService = exports.upsertStreamToCampaign = void 0;
7
+ const http_1 = __importDefault(require("./http"));
8
+ const keitaro_utils_1 = require("../../utils/keitaro-utils");
9
+ const general_1 = require("../../utils/general");
10
+ async function getStreamsByCampaignId(campaignId) {
11
+ const { data: streams } = await http_1.default.get(`campaigns/${campaignId}/streams`);
12
+ return streams;
13
+ }
14
+ async function getAllCampaigns() {
15
+ const { data: campaigns } = await http_1.default.get('campaigns');
16
+ return campaigns;
17
+ }
18
+ async function cloneStreams(originalCampaignId, streamPositionsToClone, campaignRegExp) {
19
+ // Get the original campaign's streams
20
+ const originalStreams = await getStreamsByCampaignId(originalCampaignId);
21
+ // Filter the original streams by the given stream positions to clone
22
+ const streamsToClone = originalStreams.filter(stream => streamPositionsToClone.includes(stream.position));
23
+ // Get a list of all campaigns
24
+ const allCampaigns = await getAllCampaigns();
25
+ // Filter the campaigns by the given RegExp
26
+ const matchingCampaigns = allCampaigns.filter(campaign => campaignRegExp.exec(campaign.name) && campaign.id != originalCampaignId);
27
+ // console.log(matchingCampaigns)
28
+ // For each matching campaign, clone the streams
29
+ for (const matchingCampaign of matchingCampaigns) {
30
+ for (const streamToClone of streamsToClone) {
31
+ await http_1.default.post('streams', {
32
+ name: streamToClone.name,
33
+ campaign_id: matchingCampaign.id,
34
+ schema: streamToClone.schema,
35
+ type: streamToClone.type,
36
+ action_type: streamToClone.action_type,
37
+ weight: 100,
38
+ offers: streamToClone.offers.map((offer) => {
39
+ return {
40
+ offer_id: offer.offer_id,
41
+ share: 100
42
+ };
43
+ }),
44
+ filters: streamToClone.filters.map((filter) => {
45
+ return {
46
+ name: filter.name,
47
+ mode: filter.mode,
48
+ payload: filter.payload
49
+ };
50
+ }),
51
+ });
52
+ }
53
+ }
54
+ }
55
+ async function updateCampaign(id, payload) {
56
+ await http_1.default.put(`campaigns/${id}`, payload);
57
+ }
58
+ async function createStreamForMatchingCampaigns(streamPartialPayload, offerId, campaignRegExp, avoidGroup) {
59
+ // Get a list of all campaigns
60
+ const allCampaigns = await getAllCampaigns();
61
+ // Filter the campaigns by the given RegExp
62
+ const matchingCampaigns = allCampaigns.filter(campaign => (avoidGroup ? campaign.group_id != avoidGroup : true) && campaignRegExp.exec(campaign.name));
63
+ // console.log(matchingCampaigns)
64
+ // For each matching campaign, clone the streams
65
+ for (const matchingCampaign of matchingCampaigns) {
66
+ let streams = await getStreamsByCampaignId(matchingCampaign.id);
67
+ let identicalStream = streams.find((stream) => stream.name.includes(offerId));
68
+ if (identicalStream) {
69
+ await http_1.default.put(`streams/${identicalStream.id}`, {
70
+ campaign_id: matchingCampaign.id,
71
+ ...streamPartialPayload
72
+ });
73
+ }
74
+ else {
75
+ await http_1.default.post('streams', {
76
+ campaign_id: matchingCampaign.id,
77
+ ...streamPartialPayload
78
+ });
79
+ }
80
+ }
81
+ }
82
+ async function getAllOffers() {
83
+ const { data: offers } = await http_1.default.get('offers');
84
+ return offers;
85
+ }
86
+ async function findKeitaroOffers(filter) {
87
+ let offers = await getAllOffers();
88
+ if (filter.caption)
89
+ offers = offers.filter((o) => o.name.includes(filter.caption));
90
+ if (filter.keitaroId)
91
+ offers = offers.filter((o) => o.id == filter.keitaroId);
92
+ if (filter.name)
93
+ offers = offers.filter((o) => o.name.includes(filter.name));
94
+ return offers;
95
+ }
96
+ async function getOfferByKeitaroId(id) {
97
+ const { data: offer } = await http_1.default.get(`offers/${id}`);
98
+ return offer;
99
+ }
100
+ async function updateOffer(offer) {
101
+ const { data: o } = await http_1.default.put(`offers/${offer.id}`, offer);
102
+ return o;
103
+ }
104
+ function createStreamPartialPayload(keitaroOfferId, offerName, offerId, offerGeo) {
105
+ return {
106
+ name: `${offerName} ${offerGeo} (${offerId})`,
107
+ schema: "landings",
108
+ type: "regular",
109
+ action_type: "http",
110
+ weight: 100,
111
+ offers: [{
112
+ offer_id: keitaroOfferId,
113
+ share: 100,
114
+ state: "active"
115
+ }],
116
+ filters: [{
117
+ name: "sub_id_15",
118
+ mode: "accept",
119
+ payload: [offerId]
120
+ }],
121
+ };
122
+ }
123
+ async function addOfferToKeitaro(offer, affiliateId, link, avoidGroup, groupId) {
124
+ // TODO look if offer already exists by offer.name
125
+ let allOffers = await getAllOffers();
126
+ let identicalOffer = allOffers.find((o) => { return o.name.includes(offer.name); });
127
+ let keitaroOfferId;
128
+ if (identicalOffer) {
129
+ keitaroOfferId = identicalOffer.id;
130
+ }
131
+ else {
132
+ let offerPayload = {
133
+ name: `${offer.caption} ${offer.geo} (${offer.name})`,
134
+ group_id: groupId || 1,
135
+ action_payload: link,
136
+ affiliate_network_id: affiliateId,
137
+ country: [offer.geo],
138
+ action_type: "http",
139
+ offer_type: "external",
140
+ payout_auto: true,
141
+ payout_upsell: true,
142
+ };
143
+ const { data: keitaroOffer } = await http_1.default.post(`offers`, offerPayload);
144
+ keitaroOfferId = keitaroOffer.id;
145
+ }
146
+ let streamPartialPayload = createStreamPartialPayload(keitaroOfferId, offer.caption, offer.name, offer.geo);
147
+ await createStreamForMatchingCampaigns(streamPartialPayload, offer.name, /◈/, avoidGroup);
148
+ }
149
+ async function createCampaign(campaignData) {
150
+ let { data: campaign } = await http_1.default.post(`/campaigns`, campaignData);
151
+ return campaign;
152
+ }
153
+ async function getCampaignById(id) {
154
+ const { data: campaign } = await http_1.default.get(`/campaigns/${id}`);
155
+ return campaign;
156
+ }
157
+ async function upsertStreamToCampaign(campaign, stream) {
158
+ let streams = await getStreamsByCampaignId(campaign.id);
159
+ let identicalStream = streams.find((s) => stream.name == s.name);
160
+ if (identicalStream) {
161
+ console.log(`Found identical! Name: ${stream.name}`);
162
+ await http_1.default.put(`streams/${identicalStream.id}`, {
163
+ campaign_id: campaign.id,
164
+ ...stream
165
+ });
166
+ }
167
+ else {
168
+ await http_1.default.post('streams', {
169
+ campaign_id: campaign.id,
170
+ ...stream
171
+ });
172
+ }
173
+ }
174
+ exports.upsertStreamToCampaign = upsertStreamToCampaign;
175
+ async function cloneOWCampaign(app) {
176
+ let name = `#${app.id} [◈])`;
177
+ let allCampaigns = await getAllCampaigns();
178
+ let matchingCampaign = allCampaigns.filter((c) => c.name.includes(`#${app.id} [◈]`));
179
+ if (matchingCampaign.length > 0)
180
+ return matchingCampaign[0];
181
+ const { data: campaigns } = await http_1.default.post(`/campaigns/2673/clone`);
182
+ if (campaigns.length == 0)
183
+ throw Error("Campaign cloning falied");
184
+ let clonedCampaign = campaigns[0];
185
+ let allDomains = await exports.KeitaroService.getDomains(true);
186
+ if (!allDomains) {
187
+ throw Error(`Failed to get all domains list`);
188
+ }
189
+ const domain = allDomains[Math.floor(Math.random() * allDomains.length)];
190
+ let payload = {
191
+ name: name,
192
+ traffic_source_id: keitaro_utils_1.TRAFFIC_SOURCE_ID_FLASH_AI,
193
+ domain_id: domain.id,
194
+ parameters: (0, keitaro_utils_1.prepareOWCampaignParameters)(app)
195
+ };
196
+ const { data: campaign } = await http_1.default.put(`/campaigns/${clonedCampaign.id}`, payload);
197
+ return campaign;
198
+ }
199
+ async function cloneDCampaign(app) {
200
+ let name = `D #${app.id} (${app.bundle})`;
201
+ let allCampaigns = await getAllCampaigns();
202
+ let matchingCampaign = allCampaigns.filter((c) => c.name.includes(`D #${app.id}`));
203
+ if (matchingCampaign.length > 0)
204
+ return matchingCampaign[0];
205
+ const { data: campaigns } = await http_1.default.post(`/campaigns/2693/clone`);
206
+ if (campaigns.length == 0)
207
+ throw Error("Campaign cloning falied");
208
+ let clonedCampaign = campaigns[0];
209
+ let allDomains = await exports.KeitaroService.getDomains(true);
210
+ if (!allDomains) {
211
+ throw Error(`Failed to get all domains list`);
212
+ }
213
+ const domain = allDomains[Math.floor(Math.random() * allDomains.length)];
214
+ let payload = {
215
+ name: name,
216
+ traffic_source_id: keitaro_utils_1.TRAFFIC_SOURCE_ID_FLASH_AI,
217
+ domain_id: domain.id,
218
+ group_id: 93,
219
+ };
220
+ const { data: campaign } = await http_1.default.put(`/campaigns/${clonedCampaign.id}`, payload);
221
+ return campaign;
222
+ }
223
+ async function changeCampaignsGroup(fromId, toId, exceptForCampaignIds, onlyForCampaignIds) {
224
+ let campaigns = await getAllCampaigns();
225
+ const matchingCampaigns = campaigns.filter(campaign => campaign.group_id == fromId
226
+ && exceptForCampaignIds.length > 0 ? !exceptForCampaignIds.includes(campaign.id) : onlyForCampaignIds?.includes(campaign.id));
227
+ for (let campaign of matchingCampaigns) {
228
+ await updateCampaign(campaign.id, { group_id: toId });
229
+ }
230
+ }
231
+ // Domain
232
+ async function getDomains(onlyActive) {
233
+ const { data: domains } = await http_1.default.get(`/domains`);
234
+ return onlyActive ? domains.filter((d) => d.network_status == "active") : domains;
235
+ }
236
+ async function getProfitForTimeRange(from, to) {
237
+ let fromString = (0, general_1.convertMillisToDate)(from);
238
+ let toString = (0, general_1.convertMillisToDate)(to);
239
+ let { data: data } = await http_1.default.post(`/report/build`, {
240
+ range: {
241
+ from: fromString,
242
+ to: toString,
243
+ timezone: 'Europe/Kyiv'
244
+ },
245
+ metrics: ['profit']
246
+ });
247
+ return data.rows[0].profit;
248
+ }
249
+ async function getProfitForTodayAndYesterday() {
250
+ let timestamps = (0, general_1.getTimestampsForTodayAndYesterday)();
251
+ let today = await exports.KeitaroService.getProfitForTimeRange(timestamps.today.start, timestamps.today.end);
252
+ let yesterday = await exports.KeitaroService.getProfitForTimeRange(timestamps.yesterday.start, timestamps.yesterday.end);
253
+ return {
254
+ today: today,
255
+ yesterday: yesterday
256
+ };
257
+ }
258
+ exports.KeitaroService = {
259
+ getStreamsByCampaignId, updateCampaign, getAllCampaigns, getAllOffers, cloneStreams, addOfferToKeitaro, getOfferByKeitaroId, getDomains, createCampaign, getCampaignById, upsertStreamToCampaign, cloneOWCampaign,
260
+ updateOffer, changeCampaignsGroup, getProfitForTimeRange, getProfitForTodayAndYesterday, cloneDCampaign, findKeitaroOffers
261
+ };
@@ -1,37 +1,37 @@
1
- /// <reference types="mongoose/types/aggregate" />
2
- /// <reference types="mongoose/types/callback" />
3
- /// <reference types="mongoose/types/collection" />
4
- /// <reference types="mongoose/types/connection" />
5
- /// <reference types="mongoose/types/cursor" />
6
- /// <reference types="mongoose/types/document" />
7
- /// <reference types="mongoose/types/error" />
8
- /// <reference types="mongoose/types/expressions" />
9
- /// <reference types="mongoose/types/helpers" />
10
- /// <reference types="mongoose/types/middlewares" />
11
- /// <reference types="mongoose/types/indexes" />
12
- /// <reference types="mongoose/types/models" />
13
- /// <reference types="mongoose/types/mongooseoptions" />
14
- /// <reference types="mongoose/types/pipelinestage" />
15
- /// <reference types="mongoose/types/populate" />
16
- /// <reference types="mongoose/types/query" />
17
- /// <reference types="mongoose/types/schemaoptions" />
18
- /// <reference types="mongoose/types/schematypes" />
19
- /// <reference types="mongoose/types/session" />
20
- /// <reference types="mongoose/types/types" />
21
- /// <reference types="mongoose/types/utility" />
22
- /// <reference types="mongoose/types/validation" />
23
- /// <reference types="mongoose/types/virtuals" />
24
- /// <reference types="mongoose/types/inferschematype" />
25
- import { Schema } from "mongoose";
26
- export interface ISectionsList {
27
- id: number;
28
- content: IAppOffersSection[];
29
- }
30
- export interface IAppOffersSection {
31
- sectionId: number;
32
- offerIdsOrdered: number[];
33
- }
34
- export declare const SectionsListSchema: Schema<any, import("mongoose").Model<any, any, any, any, any>, {}, {}, {}, {}, import("mongoose").DefaultSchemaOptions, {
35
- id: number;
36
- content: any[];
37
- }>;
1
+ /// <reference types="mongoose/types/aggregate" />
2
+ /// <reference types="mongoose/types/callback" />
3
+ /// <reference types="mongoose/types/collection" />
4
+ /// <reference types="mongoose/types/connection" />
5
+ /// <reference types="mongoose/types/cursor" />
6
+ /// <reference types="mongoose/types/document" />
7
+ /// <reference types="mongoose/types/error" />
8
+ /// <reference types="mongoose/types/expressions" />
9
+ /// <reference types="mongoose/types/helpers" />
10
+ /// <reference types="mongoose/types/middlewares" />
11
+ /// <reference types="mongoose/types/indexes" />
12
+ /// <reference types="mongoose/types/models" />
13
+ /// <reference types="mongoose/types/mongooseoptions" />
14
+ /// <reference types="mongoose/types/pipelinestage" />
15
+ /// <reference types="mongoose/types/populate" />
16
+ /// <reference types="mongoose/types/query" />
17
+ /// <reference types="mongoose/types/schemaoptions" />
18
+ /// <reference types="mongoose/types/schematypes" />
19
+ /// <reference types="mongoose/types/session" />
20
+ /// <reference types="mongoose/types/types" />
21
+ /// <reference types="mongoose/types/utility" />
22
+ /// <reference types="mongoose/types/validation" />
23
+ /// <reference types="mongoose/types/virtuals" />
24
+ /// <reference types="mongoose/types/inferschematype" />
25
+ import { Schema } from "mongoose";
26
+ export interface ISectionsList {
27
+ id: number;
28
+ content: IAppOffersSection[];
29
+ }
30
+ export interface IAppOffersSection {
31
+ sectionId: number;
32
+ offerIdsOrdered: number[];
33
+ }
34
+ export declare const SectionsListSchema: Schema<any, import("mongoose").Model<any, any, any, any, any>, {}, {}, {}, {}, import("mongoose").DefaultSchemaOptions, {
35
+ id: number;
36
+ content: any[];
37
+ }>;
@@ -1,12 +1,12 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SectionsListSchema = void 0;
4
- const mongoose_1 = require("mongoose");
5
- exports.SectionsListSchema = new mongoose_1.Schema({
6
- id: {
7
- type: Number,
8
- unique: true,
9
- required: true
10
- },
11
- content: [Object],
12
- });
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SectionsListSchema = void 0;
4
+ const mongoose_1 = require("mongoose");
5
+ exports.SectionsListSchema = new mongoose_1.Schema({
6
+ id: {
7
+ type: Number,
8
+ unique: true,
9
+ required: true
10
+ },
11
+ content: [Object],
12
+ });