@winible/winible-typed 1.0.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.
- package/README.md +32 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/migrations/20220601151258-custom_name_describing_your_migration.js +19 -0
- package/dist/migrations/20220601151258-custom_name_describing_your_migration.js.map +1 -0
- package/dist/migrations/20220605225655-create-dashboard-user-permissions.js +27 -0
- package/dist/migrations/20220605225655-create-dashboard-user-permissions.js.map +1 -0
- package/dist/migrations/20220606001300-update-dashboard-user-permissions.js +14 -0
- package/dist/migrations/20220606001300-update-dashboard-user-permissions.js.map +1 -0
- package/dist/migrations/20220607091109-add-read-date-for-message.js +19 -0
- package/dist/migrations/20220607091109-add-read-date-for-message.js.map +1 -0
- package/dist/migrations/20220616225456-add-delete-columns.js +21 -0
- package/dist/migrations/20220616225456-add-delete-columns.js.map +1 -0
- package/dist/migrations/20220709202211-disable-feed.js +24 -0
- package/dist/migrations/20220709202211-disable-feed.js.map +1 -0
- package/dist/migrations/20220723215213-limit-promotion-claims.js +18 -0
- package/dist/migrations/20220723215213-limit-promotion-claims.js.map +1 -0
- package/dist/migrations/20220723220233-num_claims.js +12 -0
- package/dist/migrations/20220723220233-num_claims.js.map +1 -0
- package/dist/migrations/20220723221907-default_false_promos.js +17 -0
- package/dist/migrations/20220723221907-default_false_promos.js.map +1 -0
- package/dist/migrations/20220724172559-default_zero_claims.js +13 -0
- package/dist/migrations/20220724172559-default_zero_claims.js.map +1 -0
- package/dist/migrations/20220724201419-pinned_post.js +13 -0
- package/dist/migrations/20220724201419-pinned_post.js.map +1 -0
- package/dist/migrations/20220729164625-unsend_mass.js +12 -0
- package/dist/migrations/20220729164625-unsend_mass.js.map +1 -0
- package/dist/migrations/20220823033002-interval-unit.js +14 -0
- package/dist/migrations/20220823033002-interval-unit.js.map +1 -0
- package/dist/migrations/20220830193530-processorId.js +15 -0
- package/dist/migrations/20220830193530-processorId.js.map +1 -0
- package/dist/migrations/20220907121932-add-processor-to-sub.js +15 -0
- package/dist/migrations/20220907121932-add-processor-to-sub.js.map +1 -0
- package/dist/migrations/20220907212232-add-trans-id.js +12 -0
- package/dist/migrations/20220907212232-add-trans-id.js.map +1 -0
- package/dist/migrations/20220907220423-big-int-trans.js +12 -0
- package/dist/migrations/20220907220423-big-int-trans.js.map +1 -0
- package/dist/migrations/20220909161902-add-stale.js +13 -0
- package/dist/migrations/20220909161902-add-stale.js.map +1 -0
- package/dist/migrations/20220922000225-verified-spender.js +13 -0
- package/dist/migrations/20220922000225-verified-spender.js.map +1 -0
- package/dist/migrations/20220922212108-verified-spender-2.js +16 -0
- package/dist/migrations/20220922212108-verified-spender-2.js.map +1 -0
- package/dist/migrations/20221013223648-product-subscription-list.js +12 -0
- package/dist/migrations/20221013223648-product-subscription-list.js.map +1 -0
- package/dist/migrations/20221014001037-product-subscription-list.js +75 -0
- package/dist/migrations/20221014001037-product-subscription-list.js.map +1 -0
- package/dist/migrations/20221026055245-update-type.js +15 -0
- package/dist/migrations/20221026055245-update-type.js.map +1 -0
- package/dist/scripts/authorizeTransfer.js +188 -0
- package/dist/scripts/authorizeTransfer.js.map +1 -0
- package/dist/scripts/createDashboardLink.js +30 -0
- package/dist/scripts/createDashboardLink.js.map +1 -0
- package/dist/scripts/deleteMalformedImages.js +84 -0
- package/dist/scripts/deleteMalformedImages.js.map +1 -0
- package/dist/scripts/importMixpanelEvents.js +44 -0
- package/dist/scripts/importMixpanelEvents.js.map +1 -0
- package/dist/scripts/payoutSubscriptions.js +185 -0
- package/dist/scripts/payoutSubscriptions.js.map +1 -0
- package/dist/scripts/removeUnreferenceSubs.js +39 -0
- package/dist/scripts/removeUnreferenceSubs.js.map +1 -0
- package/dist/scripts/test.js +33 -0
- package/dist/scripts/test.js.map +1 -0
- package/dist/server/index.js +30 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/middlewares/slack-auth.js +40 -0
- package/dist/server/middlewares/slack-auth.js.map +1 -0
- package/dist/server/v1/bypassCreator.js +81 -0
- package/dist/server/v1/bypassCreator.js.map +1 -0
- package/dist/server/v1/cancelSubscription.js +35 -0
- package/dist/server/v1/cancelSubscription.js.map +1 -0
- package/dist/server/v1/changeName.js +41 -0
- package/dist/server/v1/changeName.js.map +1 -0
- package/dist/server/v1/checkAuthSub.js +58 -0
- package/dist/server/v1/checkAuthSub.js.map +1 -0
- package/dist/server/v1/dashboardLink.js +30 -0
- package/dist/server/v1/dashboardLink.js.map +1 -0
- package/dist/server/v1/getSuspendedSubs.js +76 -0
- package/dist/server/v1/getSuspendedSubs.js.map +1 -0
- package/dist/server/v1/index.js +28 -0
- package/dist/server/v1/index.js.map +1 -0
- package/dist/server/v1/manualCreateSub.js +159 -0
- package/dist/server/v1/manualCreateSub.js.map +1 -0
- package/dist/server/v1/refund.js +78 -0
- package/dist/server/v1/refund.js.map +1 -0
- package/dist/server/v1/retrySubscription.js +81 -0
- package/dist/server/v1/retrySubscription.js.map +1 -0
- package/dist/server/v1/searchUser.js +169 -0
- package/dist/server/v1/searchUser.js.map +1 -0
- package/dist/server/v1/slack.js +14 -0
- package/dist/server/v1/slack.js.map +1 -0
- package/dist/src/index.js +24 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/pk-client.js +1103 -0
- package/dist/src/pk-client.js.map +1 -0
- package/dist/src/pk-sub.js +310 -0
- package/dist/src/pk-sub.js.map +1 -0
- package/dist/src/slack-client.js +48 -0
- package/dist/src/slack-client.js.map +1 -0
- package/dist/src/types.js +3 -0
- package/dist/src/types.js.map +1 -0
- package/dist/support/index.js +19 -0
- package/dist/support/index.js.map +1 -0
- package/dist/support/metrics.js +21 -0
- package/dist/support/metrics.js.map +1 -0
- package/dist/support/mixpanel.js +7 -0
- package/dist/support/mixpanel.js.map +1 -0
- package/dist/support/slack-client.js +51 -0
- package/dist/support/slack-client.js.map +1 -0
- package/dist/support/uploadcare.js +140 -0
- package/dist/support/uploadcare.js.map +1 -0
- package/dist/support/utils.js +69 -0
- package/dist/support/utils.js.map +1 -0
- package/dist/typed-model/asset-category.js +38 -0
- package/dist/typed-model/asset-category.js.map +1 -0
- package/dist/typed-model/asset-constent-person.js +56 -0
- package/dist/typed-model/asset-constent-person.js.map +1 -0
- package/dist/typed-model/blocked-ip.js +34 -0
- package/dist/typed-model/blocked-ip.js.map +1 -0
- package/dist/typed-model/category-tag.js +46 -0
- package/dist/typed-model/category-tag.js.map +1 -0
- package/dist/typed-model/consent-person.js +55 -0
- package/dist/typed-model/consent-person.js.map +1 -0
- package/dist/typed-model/content-category-tag.js +58 -0
- package/dist/typed-model/content-category-tag.js.map +1 -0
- package/dist/typed-model/content-like.js +58 -0
- package/dist/typed-model/content-like.js.map +1 -0
- package/dist/typed-model/credit-payment.js +389 -0
- package/dist/typed-model/credit-payment.js.map +1 -0
- package/dist/typed-model/credit-payout.js +42 -0
- package/dist/typed-model/credit-payout.js.map +1 -0
- package/dist/typed-model/credit-purchase.js +46 -0
- package/dist/typed-model/credit-purchase.js.map +1 -0
- package/dist/typed-model/customer-profile.js +51 -0
- package/dist/typed-model/customer-profile.js.map +1 -0
- package/dist/typed-model/dashboard-user-permissions.js +34 -0
- package/dist/typed-model/dashboard-user-permissions.js.map +1 -0
- package/dist/typed-model/dashboard-user.js +109 -0
- package/dist/typed-model/dashboard-user.js.map +1 -0
- package/dist/typed-model/fan-list.js +46 -0
- package/dist/typed-model/fan-list.js.map +1 -0
- package/dist/typed-model/fraud.js +41 -0
- package/dist/typed-model/fraud.js.map +1 -0
- package/dist/typed-model/index.js +101 -0
- package/dist/typed-model/index.js.map +1 -0
- package/dist/typed-model/list-member.js +47 -0
- package/dist/typed-model/list-member.js.map +1 -0
- package/dist/typed-model/mass-message.js +43 -0
- package/dist/typed-model/mass-message.js.map +1 -0
- package/dist/typed-model/media-asset.js +73 -0
- package/dist/typed-model/media-asset.js.map +1 -0
- package/dist/typed-model/media-category.js +49 -0
- package/dist/typed-model/media-category.js.map +1 -0
- package/dist/typed-model/media.js +59 -0
- package/dist/typed-model/media.js.map +1 -0
- package/dist/typed-model/message-media.js +53 -0
- package/dist/typed-model/message-media.js.map +1 -0
- package/dist/typed-model/message.js +191 -0
- package/dist/typed-model/message.js.map +1 -0
- package/dist/typed-model/notification.js +84 -0
- package/dist/typed-model/notification.js.map +1 -0
- package/dist/typed-model/pb-sequelize.js +25 -0
- package/dist/typed-model/pb-sequelize.js.map +1 -0
- package/dist/typed-model/phone-chat-participation.js +127 -0
- package/dist/typed-model/phone-chat-participation.js.map +1 -0
- package/dist/typed-model/phone-chat.js +118 -0
- package/dist/typed-model/phone-chat.js.map +1 -0
- package/dist/typed-model/phone-owner.js +266 -0
- package/dist/typed-model/phone-owner.js.map +1 -0
- package/dist/typed-model/phone-user.js +109 -0
- package/dist/typed-model/phone-user.js.map +1 -0
- package/dist/typed-model/premium-content.js +123 -0
- package/dist/typed-model/premium-content.js.map +1 -0
- package/dist/typed-model/purchased-content.js +69 -0
- package/dist/typed-model/purchased-content.js.map +1 -0
- package/dist/typed-model/short-url.js +88 -0
- package/dist/typed-model/short-url.js.map +1 -0
- package/dist/typed-model/subscription-bundle.js +53 -0
- package/dist/typed-model/subscription-bundle.js.map +1 -0
- package/dist/typed-model/subscription-category-tags.js +58 -0
- package/dist/typed-model/subscription-category-tags.js.map +1 -0
- package/dist/typed-model/subscription-plan.js +126 -0
- package/dist/typed-model/subscription-plan.js.map +1 -0
- package/dist/typed-model/subscription-promotion.js +93 -0
- package/dist/typed-model/subscription-promotion.js.map +1 -0
- package/dist/typed-model/subscription.js +123 -0
- package/dist/typed-model/subscription.js.map +1 -0
- package/dist/typed-model/twilio-phone.js +92 -0
- package/dist/typed-model/twilio-phone.js.map +1 -0
- package/dist/typed-model/user-follow.js +103 -0
- package/dist/typed-model/user-follow.js.map +1 -0
- package/dist/typed-model/verification-code.js +52 -0
- package/dist/typed-model/verification-code.js.map +1 -0
- package/index.ts +3 -0
- package/package.json +72 -0
- package/src/index.ts +2 -0
- package/src/pk-client.ts +1650 -0
- package/src/pk-sub.ts +455 -0
- package/src/types.ts +40 -0
- package/support/index.ts +2 -0
- package/support/slack-client.ts +43 -0
- package/support/uploadcare.ts +191 -0
- package/support/utils.ts +72 -0
- package/typed-model/asset-category.ts +57 -0
- package/typed-model/asset-constent-person.ts +82 -0
- package/typed-model/blocked-ip.ts +52 -0
- package/typed-model/category-tag.ts +66 -0
- package/typed-model/consent-person.ts +78 -0
- package/typed-model/content-category-tag.ts +79 -0
- package/typed-model/content-like.ts +79 -0
- package/typed-model/credit-payment.ts +678 -0
- package/typed-model/credit-payout.ts +62 -0
- package/typed-model/credit-purchase.ts +67 -0
- package/typed-model/customer-profile.ts +70 -0
- package/typed-model/dashboard-user-permissions.ts +51 -0
- package/typed-model/dashboard-user.ts +146 -0
- package/typed-model/fan-list.ts +68 -0
- package/typed-model/fraud.ts +62 -0
- package/typed-model/index.ts +58 -0
- package/typed-model/list-member.ts +67 -0
- package/typed-model/mass-message.ts +64 -0
- package/typed-model/media-asset.ts +99 -0
- package/typed-model/media-category.ts +70 -0
- package/typed-model/media.ts +85 -0
- package/typed-model/message-media.ts +74 -0
- package/typed-model/message.ts +258 -0
- package/typed-model/notification.ts +130 -0
- package/typed-model/pb-sequelize.ts +25 -0
- package/typed-model/phone-chat-participation.ts +166 -0
- package/typed-model/phone-chat.ts +185 -0
- package/typed-model/phone-owner.ts +341 -0
- package/typed-model/phone-user.ts +146 -0
- package/typed-model/premium-content.ts +164 -0
- package/typed-model/purchased-content.ts +100 -0
- package/typed-model/short-url.ts +120 -0
- package/typed-model/subscription-bundle.ts +75 -0
- package/typed-model/subscription-category-tags.ts +79 -0
- package/typed-model/subscription-plan.ts +171 -0
- package/typed-model/subscription-promotion.ts +125 -0
- package/typed-model/subscription.ts +170 -0
- package/typed-model/twilio-phone.ts +149 -0
- package/typed-model/user-follow.ts +141 -0
- package/typed-model/verification-code.ts +74 -0
@@ -0,0 +1,191 @@
|
|
1
|
+
import http = require("http");
|
2
|
+
import https = require("https");
|
3
|
+
import crypto = require("crypto");
|
4
|
+
|
5
|
+
function setup_response_handler(
|
6
|
+
res: http.IncomingMessage,
|
7
|
+
callback: (arg0: Error | undefined, arg1?: string | undefined) => void
|
8
|
+
) {
|
9
|
+
if (typeof callback !== "function") {
|
10
|
+
return;
|
11
|
+
}
|
12
|
+
var response = "";
|
13
|
+
res.setEncoding("utf8");
|
14
|
+
res.on("data", function (chunk: string) {
|
15
|
+
response += chunk;
|
16
|
+
});
|
17
|
+
res.on("end", function () {
|
18
|
+
var err;
|
19
|
+
|
20
|
+
if (res.statusCode! > 201) {
|
21
|
+
err = new Error(
|
22
|
+
"Unexpected status " + res.statusCode + " from uploadcare.com"
|
23
|
+
);
|
24
|
+
}
|
25
|
+
|
26
|
+
try {
|
27
|
+
response = JSON.parse(response);
|
28
|
+
} catch (e) {
|
29
|
+
return callback(new Error("Invalid JSON from uploadcare.com"), undefined);
|
30
|
+
}
|
31
|
+
|
32
|
+
callback(err, response);
|
33
|
+
});
|
34
|
+
}
|
35
|
+
|
36
|
+
export default function (
|
37
|
+
public_key: string,
|
38
|
+
private_key: crypto.BinaryLike | crypto.KeyObject,
|
39
|
+
options: {}
|
40
|
+
) {
|
41
|
+
var defaults = options || {};
|
42
|
+
|
43
|
+
function _request(
|
44
|
+
method: string,
|
45
|
+
path: string,
|
46
|
+
options: { data?: any; ssl?: any },
|
47
|
+
callback: (err: any, res: any) => void
|
48
|
+
) {
|
49
|
+
var request_data = JSON.stringify(options.data);
|
50
|
+
if (!options.data) {
|
51
|
+
request_data = "";
|
52
|
+
}
|
53
|
+
var ssl = options.ssl !== false;
|
54
|
+
|
55
|
+
//Prepare headers
|
56
|
+
var content_type = "application/json",
|
57
|
+
//Hash private key
|
58
|
+
content_hash = crypto
|
59
|
+
.createHash("md5")
|
60
|
+
.update(request_data)
|
61
|
+
.digest("hex"),
|
62
|
+
date = new Date().toUTCString(),
|
63
|
+
sign_string = [method, content_hash, content_type, date, path].join("\n"),
|
64
|
+
sign = crypto
|
65
|
+
.createHmac("sha1", private_key)
|
66
|
+
.update(sign_string)
|
67
|
+
.digest("hex"),
|
68
|
+
request_options = {
|
69
|
+
host: "api.uploadcare.com",
|
70
|
+
port: ssl ? 443 : 80,
|
71
|
+
path: path,
|
72
|
+
method: method,
|
73
|
+
headers: {
|
74
|
+
Authentication: "UploadCare " + public_key + ":" + sign,
|
75
|
+
"X-Uploadcare-Date": date,
|
76
|
+
"Content-Type": content_type,
|
77
|
+
"Content-Length": request_data.length,
|
78
|
+
},
|
79
|
+
};
|
80
|
+
|
81
|
+
var req = ssl
|
82
|
+
? https.request(request_options)
|
83
|
+
: http.request(request_options);
|
84
|
+
|
85
|
+
req.on("response", function (res) {
|
86
|
+
setup_response_handler(res, callback);
|
87
|
+
});
|
88
|
+
|
89
|
+
req.write(request_data);
|
90
|
+
req.end();
|
91
|
+
}
|
92
|
+
|
93
|
+
function _submit(
|
94
|
+
path: any,
|
95
|
+
form: {
|
96
|
+
submit: (
|
97
|
+
arg0: { host: string; port: string; path: any; protocol: string },
|
98
|
+
arg1: (err: any, res: any) => void
|
99
|
+
) => void;
|
100
|
+
},
|
101
|
+
callback: (arg0: any) => void
|
102
|
+
) {
|
103
|
+
form.submit(
|
104
|
+
{
|
105
|
+
host: "upload.uploadcare.com",
|
106
|
+
port: "443",
|
107
|
+
path: path,
|
108
|
+
protocol: "https:",
|
109
|
+
},
|
110
|
+
function (err: any, res: any) {
|
111
|
+
if (err) {
|
112
|
+
callback(err);
|
113
|
+
} else {
|
114
|
+
setup_response_handler(res, callback);
|
115
|
+
}
|
116
|
+
}
|
117
|
+
);
|
118
|
+
}
|
119
|
+
|
120
|
+
function post(
|
121
|
+
path: string,
|
122
|
+
options: { data?: any; ssl?: boolean; form?: any },
|
123
|
+
callback: any
|
124
|
+
) {
|
125
|
+
if (options.form) {
|
126
|
+
_submit(path, options.data, callback);
|
127
|
+
} else {
|
128
|
+
_request("POST", path, options, callback);
|
129
|
+
}
|
130
|
+
}
|
131
|
+
|
132
|
+
function put(path: string, options: {}, callback: any) {
|
133
|
+
_request("PUT", path, options, callback);
|
134
|
+
}
|
135
|
+
|
136
|
+
function get(path: string, callback: any) {
|
137
|
+
_request("GET", path, {}, callback);
|
138
|
+
}
|
139
|
+
|
140
|
+
//
|
141
|
+
// this is a special case when uploading image from URL
|
142
|
+
// you have to check status until you receive a success
|
143
|
+
function upload_fromurl_get_status(
|
144
|
+
token: string,
|
145
|
+
callback: (err: any, file: any) => any
|
146
|
+
) {
|
147
|
+
var path = "/from_url/status/?token=" + token + "&_=" + Date.now();
|
148
|
+
https.get("https://upload.uploadcare.com" + path, function (res) {
|
149
|
+
setup_response_handler(res, callback);
|
150
|
+
});
|
151
|
+
}
|
152
|
+
|
153
|
+
function remove(path: string, callback: any) {
|
154
|
+
_request("DELETE", path, {}, callback);
|
155
|
+
}
|
156
|
+
|
157
|
+
var api = {
|
158
|
+
files: {
|
159
|
+
store: function (fileId: string, callback: any) {
|
160
|
+
post("/files/" + fileId + "/storage/", {}, callback);
|
161
|
+
},
|
162
|
+
storeCustom: function (fileId: any, target: any, callback: any) {
|
163
|
+
post("/files/", { data: { source: fileId, target: target } }, callback);
|
164
|
+
},
|
165
|
+
info: function (fileId: string, callback: any) {
|
166
|
+
get("/files/" + fileId + "/", callback);
|
167
|
+
},
|
168
|
+
remove: function (fileId: string, callback: any) {
|
169
|
+
remove("/files/" + fileId + "/", callback);
|
170
|
+
},
|
171
|
+
removeMultiple: function (fileIds: any, callback: any) {
|
172
|
+
_request("DELETE", "/files/storage/", { data: fileIds }, callback);
|
173
|
+
},
|
174
|
+
},
|
175
|
+
videos: {
|
176
|
+
convert: function (fileId: string, callback: any) {
|
177
|
+
post(
|
178
|
+
"/convert/video/",
|
179
|
+
{
|
180
|
+
data: {
|
181
|
+
store: 1,
|
182
|
+
paths: [`${fileId}/video/-/format/mp4/`],
|
183
|
+
},
|
184
|
+
},
|
185
|
+
callback
|
186
|
+
);
|
187
|
+
},
|
188
|
+
},
|
189
|
+
};
|
190
|
+
return api;
|
191
|
+
}
|
package/support/utils.ts
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
import dotenv = require("dotenv");
|
2
|
+
import UploadCare from "../support/uploadcare";
|
3
|
+
dotenv.config();
|
4
|
+
|
5
|
+
const uploadcare = UploadCare(
|
6
|
+
"3d93f73d90b8efffadd7",
|
7
|
+
"8fd6cd1136eb7a500164",
|
8
|
+
{}
|
9
|
+
);
|
10
|
+
|
11
|
+
export const convertVideoToMp4 = async (url: string) => {
|
12
|
+
try {
|
13
|
+
let uuid = url.split("https://ucarecdn.com/")[1];
|
14
|
+
if (!uuid) {
|
15
|
+
console.log("Couldn't parse UUID");
|
16
|
+
return url;
|
17
|
+
}
|
18
|
+
uuid = uuid.split("/")[0];
|
19
|
+
let fileInfo: any = await new Promise((resolve, reject) => {
|
20
|
+
uploadcare.files.info(uuid, (err: any, res: any) => {
|
21
|
+
resolve(res);
|
22
|
+
});
|
23
|
+
});
|
24
|
+
|
25
|
+
let { mime_type } = fileInfo;
|
26
|
+
if (mime_type !== "video/quicktime") {
|
27
|
+
console.log("Not quicktime");
|
28
|
+
return url;
|
29
|
+
}
|
30
|
+
let convertResponse: any = await new Promise((resolve, reject) => {
|
31
|
+
uploadcare.videos.convert(uuid, (err: any, res: any) => {
|
32
|
+
resolve(res);
|
33
|
+
});
|
34
|
+
});
|
35
|
+
let newUUID =
|
36
|
+
convertResponse &&
|
37
|
+
convertResponse.result &&
|
38
|
+
convertResponse.result[0] &&
|
39
|
+
convertResponse.result[0].uuid;
|
40
|
+
if (!newUUID) {
|
41
|
+
return url;
|
42
|
+
}
|
43
|
+
return `https://ucarecdn.com/${newUUID}/`;
|
44
|
+
} catch (err) {
|
45
|
+
console.log(err);
|
46
|
+
return url;
|
47
|
+
}
|
48
|
+
};
|
49
|
+
|
50
|
+
export const convertImageUrlToImageKit = (url: string, transformation: any) => {
|
51
|
+
if (!url || url.length == 0) {
|
52
|
+
return "";
|
53
|
+
}
|
54
|
+
const rootMappings: any = {
|
55
|
+
"https://paychat-images.s3.amazonaws.com/":
|
56
|
+
"https://ik.imagekit.io/jzv0ymnoihm/paychat-images/",
|
57
|
+
"https://paychat-media.s3.amazonaws.com/":
|
58
|
+
"https://ik.imagekit.io/jzv0ymnoihm/media/",
|
59
|
+
"https://paychat-images.s3.us-west-1.amazonaws.com/":
|
60
|
+
"https://ik.imagekit.io/jzv0ymnoihm/paychat-images/",
|
61
|
+
"https://paychat-media.s3.us-west-1.amazonaws.com/":
|
62
|
+
"https://ik.imagekit.io/jzv0ymnoihm/media/",
|
63
|
+
};
|
64
|
+
let finalUrl = url;
|
65
|
+
for (let key of Object.keys(rootMappings)) {
|
66
|
+
finalUrl = finalUrl.replace(key, rootMappings[key]);
|
67
|
+
}
|
68
|
+
if (transformation) {
|
69
|
+
finalUrl = finalUrl + `?tr=${transformation}`;
|
70
|
+
}
|
71
|
+
return finalUrl;
|
72
|
+
};
|
@@ -0,0 +1,57 @@
|
|
1
|
+
import {
|
2
|
+
Model,
|
3
|
+
InferAttributes,
|
4
|
+
InferCreationAttributes,
|
5
|
+
CreationOptional,
|
6
|
+
DataTypes,
|
7
|
+
fn,
|
8
|
+
} from "sequelize";
|
9
|
+
|
10
|
+
import sequelize from "./pb-sequelize";
|
11
|
+
|
12
|
+
// order of InferAttributes & InferCreationAttributes is important.
|
13
|
+
class AssetCategory extends Model<
|
14
|
+
InferAttributes<AssetCategory>,
|
15
|
+
InferCreationAttributes<AssetCategory>
|
16
|
+
> {
|
17
|
+
// 'CreationOptional' is a special type that marks the field as optional
|
18
|
+
// when creating an instance of the model (such as using Model.create()).
|
19
|
+
declare id: CreationOptional<string>;
|
20
|
+
declare mediaAssetId: string;
|
21
|
+
declare mediaCategoryId: string;
|
22
|
+
declare createdAt: CreationOptional<Date>;
|
23
|
+
declare updatedAt: CreationOptional<Date>;
|
24
|
+
}
|
25
|
+
|
26
|
+
AssetCategory.init(
|
27
|
+
{
|
28
|
+
id: {
|
29
|
+
type: DataTypes.BIGINT,
|
30
|
+
primaryKey: true,
|
31
|
+
allowNull: false,
|
32
|
+
defaultValue: sequelize.fn("next_id"),
|
33
|
+
},
|
34
|
+
mediaAssetId: {
|
35
|
+
type: DataTypes.BIGINT,
|
36
|
+
field: "media_asset_id",
|
37
|
+
},
|
38
|
+
mediaCategoryId: {
|
39
|
+
type: DataTypes.BIGINT,
|
40
|
+
field: "media_category_id",
|
41
|
+
},
|
42
|
+
createdAt: DataTypes.DATE,
|
43
|
+
updatedAt: DataTypes.DATE,
|
44
|
+
},
|
45
|
+
{
|
46
|
+
tableName: "asset_categories",
|
47
|
+
sequelize,
|
48
|
+
}
|
49
|
+
);
|
50
|
+
|
51
|
+
/*
|
52
|
+
====================================================================
|
53
|
+
Class functions
|
54
|
+
====================================================================
|
55
|
+
*/
|
56
|
+
|
57
|
+
export default AssetCategory;
|
@@ -0,0 +1,82 @@
|
|
1
|
+
import {
|
2
|
+
Model,
|
3
|
+
InferAttributes,
|
4
|
+
InferCreationAttributes,
|
5
|
+
CreationOptional,
|
6
|
+
DataTypes,
|
7
|
+
fn,
|
8
|
+
NonAttribute,
|
9
|
+
} from "sequelize";
|
10
|
+
|
11
|
+
import sequelize from "./pb-sequelize";
|
12
|
+
|
13
|
+
import ConsentPerson from "./consent-person";
|
14
|
+
import MediaAsset from "./media-asset";
|
15
|
+
|
16
|
+
// order of InferAttributes & InferCreationAttributes is important.
|
17
|
+
class AssetConsentPerson extends Model<
|
18
|
+
InferAttributes<AssetConsentPerson>,
|
19
|
+
InferCreationAttributes<AssetConsentPerson>
|
20
|
+
> {
|
21
|
+
// 'CreationOptional' is a special type that marks the field as optional
|
22
|
+
// when creating an instance of the model (such as using Model.create()).
|
23
|
+
declare id: CreationOptional<string>;
|
24
|
+
declare consentPersonId: string;
|
25
|
+
declare mediaAssetId: string;
|
26
|
+
declare createdAt: CreationOptional<Date>;
|
27
|
+
declare updatedAt: CreationOptional<Date>;
|
28
|
+
|
29
|
+
declare consent_person?: NonAttribute<ConsentPerson>;
|
30
|
+
declare media_asset?: NonAttribute<MediaAsset[]>;
|
31
|
+
}
|
32
|
+
|
33
|
+
AssetConsentPerson.init(
|
34
|
+
{
|
35
|
+
id: {
|
36
|
+
type: DataTypes.BIGINT,
|
37
|
+
primaryKey: true,
|
38
|
+
allowNull: false,
|
39
|
+
defaultValue: fn("next_id"),
|
40
|
+
},
|
41
|
+
consentPersonId: {
|
42
|
+
type: DataTypes.BIGINT,
|
43
|
+
field: "consent_person_id",
|
44
|
+
},
|
45
|
+
mediaAssetId: {
|
46
|
+
type: DataTypes.BIGINT,
|
47
|
+
field: "media_asset_id",
|
48
|
+
},
|
49
|
+
createdAt: DataTypes.DATE,
|
50
|
+
updatedAt: DataTypes.DATE,
|
51
|
+
},
|
52
|
+
{
|
53
|
+
sequelize,
|
54
|
+
tableName: "asset_consent_people",
|
55
|
+
}
|
56
|
+
);
|
57
|
+
|
58
|
+
/*
|
59
|
+
====================================================================
|
60
|
+
Class functions
|
61
|
+
====================================================================
|
62
|
+
*/
|
63
|
+
|
64
|
+
AssetConsentPerson.hasOne(ConsentPerson, {
|
65
|
+
foreignKey: "id",
|
66
|
+
sourceKey: "consentPersonId",
|
67
|
+
});
|
68
|
+
ConsentPerson.hasMany(AssetConsentPerson, {
|
69
|
+
foreignKey: "consent_person_id",
|
70
|
+
sourceKey: "id",
|
71
|
+
});
|
72
|
+
|
73
|
+
AssetConsentPerson.hasOne(MediaAsset, {
|
74
|
+
foreignKey: "id",
|
75
|
+
sourceKey: "mediaAssetId",
|
76
|
+
});
|
77
|
+
MediaAsset.hasMany(AssetConsentPerson, {
|
78
|
+
foreignKey: "media_asset_id",
|
79
|
+
sourceKey: "id",
|
80
|
+
});
|
81
|
+
|
82
|
+
export default AssetConsentPerson;
|
@@ -0,0 +1,52 @@
|
|
1
|
+
import {
|
2
|
+
Model,
|
3
|
+
InferAttributes,
|
4
|
+
InferCreationAttributes,
|
5
|
+
CreationOptional,
|
6
|
+
DataTypes,
|
7
|
+
fn,
|
8
|
+
} from "sequelize";
|
9
|
+
|
10
|
+
import sequelize from "./pb-sequelize";
|
11
|
+
|
12
|
+
// order of InferAttributes & InferCreationAttributes is important.
|
13
|
+
class BlockedIP extends Model<
|
14
|
+
InferAttributes<BlockedIP>,
|
15
|
+
InferCreationAttributes<BlockedIP>
|
16
|
+
> {
|
17
|
+
// 'CreationOptional' is a special type that marks the field as optional
|
18
|
+
// when creating an instance of the model (such as using Model.create()).
|
19
|
+
declare id: CreationOptional<string>;
|
20
|
+
declare ipAddress: string;
|
21
|
+
declare createdAt: CreationOptional<Date>;
|
22
|
+
declare updatedAt: CreationOptional<Date>;
|
23
|
+
}
|
24
|
+
|
25
|
+
BlockedIP.init(
|
26
|
+
{
|
27
|
+
id: {
|
28
|
+
type: DataTypes.BIGINT,
|
29
|
+
primaryKey: true,
|
30
|
+
allowNull: false,
|
31
|
+
defaultValue: sequelize.fn("next_id"),
|
32
|
+
},
|
33
|
+
ipAddress: {
|
34
|
+
type: DataTypes.STRING,
|
35
|
+
field: "ip_address",
|
36
|
+
},
|
37
|
+
createdAt: DataTypes.DATE,
|
38
|
+
updatedAt: DataTypes.DATE,
|
39
|
+
},
|
40
|
+
{
|
41
|
+
tableName: "blocked_ips",
|
42
|
+
sequelize,
|
43
|
+
}
|
44
|
+
);
|
45
|
+
|
46
|
+
/*
|
47
|
+
====================================================================
|
48
|
+
Class functions
|
49
|
+
====================================================================
|
50
|
+
*/
|
51
|
+
|
52
|
+
export default BlockedIP;
|
@@ -0,0 +1,66 @@
|
|
1
|
+
import {
|
2
|
+
Model,
|
3
|
+
InferAttributes,
|
4
|
+
InferCreationAttributes,
|
5
|
+
CreationOptional,
|
6
|
+
DataTypes,
|
7
|
+
fn,
|
8
|
+
} from "sequelize";
|
9
|
+
|
10
|
+
import sequelize from "./pb-sequelize";
|
11
|
+
import PhoneOwner from "./phone-owner";
|
12
|
+
|
13
|
+
// order of InferAttributes & InferCreationAttributes is important.
|
14
|
+
class CategoryTag extends Model<
|
15
|
+
InferAttributes<CategoryTag>,
|
16
|
+
InferCreationAttributes<CategoryTag>
|
17
|
+
> {
|
18
|
+
// 'CreationOptional' is a special type that marks the field as optional
|
19
|
+
// when creating an instance of the model (such as using Model.create()).
|
20
|
+
declare id: CreationOptional<string>;
|
21
|
+
declare ownerId: string;
|
22
|
+
declare name: string;
|
23
|
+
|
24
|
+
declare createdAt: CreationOptional<Date>;
|
25
|
+
declare updatedAt: CreationOptional<Date>;
|
26
|
+
}
|
27
|
+
|
28
|
+
CategoryTag.init(
|
29
|
+
{
|
30
|
+
id: {
|
31
|
+
type: DataTypes.BIGINT,
|
32
|
+
primaryKey: true,
|
33
|
+
allowNull: false,
|
34
|
+
defaultValue: sequelize.fn("next_id"),
|
35
|
+
},
|
36
|
+
ownerId: {
|
37
|
+
type: DataTypes.BIGINT,
|
38
|
+
field: "owner_id",
|
39
|
+
},
|
40
|
+
name: {
|
41
|
+
type: DataTypes.STRING,
|
42
|
+
field: "name",
|
43
|
+
},
|
44
|
+
createdAt: DataTypes.DATE,
|
45
|
+
updatedAt: DataTypes.DATE,
|
46
|
+
},
|
47
|
+
{
|
48
|
+
sequelize,
|
49
|
+
tableName: "category_tags",
|
50
|
+
// Other model options go here
|
51
|
+
}
|
52
|
+
);
|
53
|
+
|
54
|
+
PhoneOwner.hasMany(CategoryTag, {
|
55
|
+
foreignKey: "owner_id",
|
56
|
+
onDelete: "NO ACTION",
|
57
|
+
constraints: false,
|
58
|
+
});
|
59
|
+
CategoryTag.hasOne(PhoneOwner, {
|
60
|
+
foreignKey: "id",
|
61
|
+
sourceKey: "owner_id",
|
62
|
+
onDelete: "NO ACTION",
|
63
|
+
constraints: false,
|
64
|
+
});
|
65
|
+
|
66
|
+
export default CategoryTag;
|
@@ -0,0 +1,78 @@
|
|
1
|
+
import {
|
2
|
+
Model,
|
3
|
+
InferAttributes,
|
4
|
+
InferCreationAttributes,
|
5
|
+
CreationOptional,
|
6
|
+
DataTypes,
|
7
|
+
fn,
|
8
|
+
} from "sequelize";
|
9
|
+
|
10
|
+
import sequelize from "./pb-sequelize";
|
11
|
+
|
12
|
+
// order of InferAttributes & InferCreationAttributes is important.
|
13
|
+
class ConsentPerson extends Model<
|
14
|
+
InferAttributes<ConsentPerson>,
|
15
|
+
InferCreationAttributes<ConsentPerson>
|
16
|
+
> {
|
17
|
+
// 'CreationOptional' is a special type that marks the field as optional
|
18
|
+
// when creating an instance of the model (such as using Model.create()).
|
19
|
+
declare id: CreationOptional<string>;
|
20
|
+
declare ownerId: string;
|
21
|
+
declare fullName: string;
|
22
|
+
declare birthday: Date;
|
23
|
+
declare consentFormKey: string;
|
24
|
+
declare idImageKey: string;
|
25
|
+
declare reviewStatus: "pending" | "approved";
|
26
|
+
declare createdAt: CreationOptional<Date>;
|
27
|
+
declare updatedAt: CreationOptional<Date>;
|
28
|
+
}
|
29
|
+
|
30
|
+
ConsentPerson.init(
|
31
|
+
{
|
32
|
+
id: {
|
33
|
+
type: DataTypes.BIGINT,
|
34
|
+
primaryKey: true,
|
35
|
+
allowNull: false,
|
36
|
+
defaultValue: fn("next_id"),
|
37
|
+
},
|
38
|
+
ownerId: {
|
39
|
+
type: DataTypes.BIGINT,
|
40
|
+
field: "owner_id",
|
41
|
+
},
|
42
|
+
fullName: {
|
43
|
+
type: DataTypes.STRING,
|
44
|
+
field: "full_name",
|
45
|
+
},
|
46
|
+
birthday: {
|
47
|
+
type: DataTypes.DATE,
|
48
|
+
field: "birthday",
|
49
|
+
},
|
50
|
+
consentFormKey: {
|
51
|
+
type: DataTypes.STRING,
|
52
|
+
field: "consent_form_key",
|
53
|
+
},
|
54
|
+
idImageKey: {
|
55
|
+
type: DataTypes.STRING,
|
56
|
+
field: "id_image_key",
|
57
|
+
},
|
58
|
+
reviewStatus: {
|
59
|
+
type: DataTypes.STRING,
|
60
|
+
field: "review_status",
|
61
|
+
defaultValue: "pending",
|
62
|
+
},
|
63
|
+
createdAt: DataTypes.DATE,
|
64
|
+
updatedAt: DataTypes.DATE,
|
65
|
+
},
|
66
|
+
{
|
67
|
+
sequelize,
|
68
|
+
tableName: "consent_people",
|
69
|
+
}
|
70
|
+
);
|
71
|
+
|
72
|
+
/*
|
73
|
+
====================================================================
|
74
|
+
Class functions
|
75
|
+
====================================================================
|
76
|
+
*/
|
77
|
+
|
78
|
+
export default ConsentPerson;
|
@@ -0,0 +1,79 @@
|
|
1
|
+
import {
|
2
|
+
Model,
|
3
|
+
InferAttributes,
|
4
|
+
InferCreationAttributes,
|
5
|
+
CreationOptional,
|
6
|
+
DataTypes,
|
7
|
+
fn,
|
8
|
+
} from "sequelize";
|
9
|
+
import CategoryTag from "./category-tag";
|
10
|
+
|
11
|
+
import sequelize from "./pb-sequelize";
|
12
|
+
import PremiumContent from "./premium-content";
|
13
|
+
|
14
|
+
// order of InferAttributes & InferCreationAttributes is important.
|
15
|
+
class ContentCategoryTag extends Model<
|
16
|
+
InferAttributes<ContentCategoryTag>,
|
17
|
+
InferCreationAttributes<ContentCategoryTag>
|
18
|
+
> {
|
19
|
+
// 'CreationOptional' is a special type that marks the field as optional
|
20
|
+
// when creating an instance of the model (such as using Model.create()).
|
21
|
+
declare id: CreationOptional<string>;
|
22
|
+
declare contentId: string;
|
23
|
+
declare tagId: string;
|
24
|
+
|
25
|
+
declare createdAt: CreationOptional<Date>;
|
26
|
+
declare updatedAt: CreationOptional<Date>;
|
27
|
+
}
|
28
|
+
|
29
|
+
ContentCategoryTag.init(
|
30
|
+
{
|
31
|
+
id: {
|
32
|
+
type: DataTypes.BIGINT,
|
33
|
+
primaryKey: true,
|
34
|
+
allowNull: false,
|
35
|
+
defaultValue: sequelize.fn("next_id"),
|
36
|
+
},
|
37
|
+
contentId: {
|
38
|
+
type: DataTypes.BIGINT,
|
39
|
+
field: "content_id",
|
40
|
+
},
|
41
|
+
tagId: {
|
42
|
+
type: DataTypes.BIGINT,
|
43
|
+
field: "tag_id",
|
44
|
+
},
|
45
|
+
createdAt: DataTypes.DATE,
|
46
|
+
updatedAt: DataTypes.DATE,
|
47
|
+
},
|
48
|
+
{
|
49
|
+
sequelize,
|
50
|
+
tableName: "content_category_tags",
|
51
|
+
// Other model options go here
|
52
|
+
}
|
53
|
+
);
|
54
|
+
|
55
|
+
PremiumContent.hasMany(ContentCategoryTag, {
|
56
|
+
foreignKey: "content_id",
|
57
|
+
onDelete: "NO ACTION",
|
58
|
+
constraints: false,
|
59
|
+
});
|
60
|
+
ContentCategoryTag.hasOne(PremiumContent, {
|
61
|
+
foreignKey: "id",
|
62
|
+
sourceKey: "content_id",
|
63
|
+
onDelete: "NO ACTION",
|
64
|
+
constraints: false,
|
65
|
+
});
|
66
|
+
|
67
|
+
CategoryTag.hasMany(ContentCategoryTag, {
|
68
|
+
foreignKey: "tag_id",
|
69
|
+
onDelete: "NO ACTION",
|
70
|
+
constraints: false,
|
71
|
+
});
|
72
|
+
ContentCategoryTag.hasOne(CategoryTag, {
|
73
|
+
foreignKey: "id",
|
74
|
+
sourceKey: "tag_id",
|
75
|
+
onDelete: "NO ACTION",
|
76
|
+
constraints: false,
|
77
|
+
});
|
78
|
+
|
79
|
+
export default ContentCategoryTag;
|