@stamhoofd/models 2.13.0 → 2.17.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/dist/src/factories/GroupFactory.js +13 -6
- package/dist/src/factories/GroupFactory.js.map +1 -1
- package/dist/src/factories/MemberFactory.js +10 -4
- package/dist/src/factories/MemberFactory.js.map +1 -1
- package/dist/src/factories/OrganizationFactory.js +11 -6
- package/dist/src/factories/OrganizationFactory.js.map +1 -1
- package/dist/src/factories/ParentFactory.js +2 -3
- package/dist/src/factories/ParentFactory.js.map +1 -1
- package/dist/src/factories/RecordFactory.js +1 -0
- package/dist/src/factories/RecordFactory.js.map +1 -1
- package/dist/src/factories/RegisterCodeFactory.js +2 -3
- package/dist/src/factories/RegisterCodeFactory.js.map +1 -1
- package/dist/src/factories/RegistrationFactory.js +2 -0
- package/dist/src/factories/RegistrationFactory.js.map +1 -1
- package/dist/src/factories/UserFactory.js +15 -5
- package/dist/src/factories/UserFactory.js.map +1 -1
- package/dist/src/factories/WebshopFactory.js +7 -3
- package/dist/src/factories/WebshopFactory.js.map +1 -1
- package/dist/src/helpers/DNSValidator.js +1 -2
- package/dist/src/helpers/DNSValidator.js.map +1 -1
- package/dist/src/helpers/EmailBuilder.d.ts +23 -5
- package/dist/src/helpers/EmailBuilder.d.ts.map +1 -1
- package/dist/src/helpers/EmailBuilder.js +73 -21
- package/dist/src/helpers/EmailBuilder.js.map +1 -1
- package/dist/src/helpers/GroupBuilder.js +2 -2
- package/dist/src/helpers/GroupBuilder.js.map +1 -1
- package/dist/src/helpers/Handlebars.js +3 -5
- package/dist/src/helpers/Handlebars.js.map +1 -1
- package/dist/src/helpers/InvoiceBuilder.js +11 -10
- package/dist/src/helpers/InvoiceBuilder.js.map +1 -1
- package/dist/src/helpers/MemberMerger.js +5 -5
- package/dist/src/helpers/MemberMerger.js.map +1 -1
- package/dist/src/helpers/MemberMerger.test.js +14 -27
- package/dist/src/helpers/MemberMerger.test.js.map +1 -1
- package/dist/src/helpers/RateLimiter.d.ts.map +1 -1
- package/dist/src/helpers/RateLimiter.js +10 -5
- package/dist/src/helpers/RateLimiter.js.map +1 -1
- package/dist/src/helpers/WebshopCounter.js +2 -2
- package/dist/src/helpers/WebshopCounter.js.map +1 -1
- package/dist/src/migrations/1605262045-import-postcodes.js +10 -2
- package/dist/src/models/BalanceItem.js +41 -35
- package/dist/src/models/BalanceItem.js.map +1 -1
- package/dist/src/models/BalanceItemPayment.js +14 -11
- package/dist/src/models/BalanceItemPayment.js.map +1 -1
- package/dist/src/models/BuckarooPayment.js +5 -2
- package/dist/src/models/BuckarooPayment.js.map +1 -1
- package/dist/src/models/Document.js +24 -23
- package/dist/src/models/Document.js.map +1 -1
- package/dist/src/models/DocumentTemplate.js +36 -25
- package/dist/src/models/DocumentTemplate.js.map +1 -1
- package/dist/src/models/Email.d.ts.map +1 -1
- package/dist/src/models/Email.js +36 -38
- package/dist/src/models/Email.js.map +1 -1
- package/dist/src/models/EmailRecipient.js +15 -13
- package/dist/src/models/EmailRecipient.js.map +1 -1
- package/dist/src/models/EmailTemplate.d.ts +5 -0
- package/dist/src/models/EmailTemplate.d.ts.map +1 -1
- package/dist/src/models/EmailTemplate.js +30 -7
- package/dist/src/models/EmailTemplate.js.map +1 -1
- package/dist/src/models/EmailVerificationCode.js +32 -25
- package/dist/src/models/EmailVerificationCode.js.map +1 -1
- package/dist/src/models/Event.js +15 -12
- package/dist/src/models/Event.js.map +1 -1
- package/dist/src/models/Group.js +24 -21
- package/dist/src/models/Group.js.map +1 -1
- package/dist/src/models/Image.d.ts +0 -1
- package/dist/src/models/Image.d.ts.map +1 -1
- package/dist/src/models/Image.js +12 -14
- package/dist/src/models/Image.js.map +1 -1
- package/dist/src/models/Member.d.ts.map +1 -1
- package/dist/src/models/Member.js +34 -33
- package/dist/src/models/Member.js.map +1 -1
- package/dist/src/models/MemberPlatformMembership.js +22 -16
- package/dist/src/models/MemberPlatformMembership.js.map +1 -1
- package/dist/src/models/MemberResponsibilityRecord.js +10 -8
- package/dist/src/models/MemberResponsibilityRecord.js.map +1 -1
- package/dist/src/models/MergedMember.js +19 -14
- package/dist/src/models/MergedMember.js.map +1 -1
- package/dist/src/models/MolliePayment.js +5 -2
- package/dist/src/models/MolliePayment.js.map +1 -1
- package/dist/src/models/MollieToken.js +14 -14
- package/dist/src/models/MollieToken.js.map +1 -1
- package/dist/src/models/OneTimeToken.js +15 -13
- package/dist/src/models/OneTimeToken.js.map +1 -1
- package/dist/src/models/Order.d.ts +1 -1
- package/dist/src/models/Order.d.ts.map +1 -1
- package/dist/src/models/Order.js +42 -52
- package/dist/src/models/Order.js.map +1 -1
- package/dist/src/models/Organization.d.ts.map +1 -1
- package/dist/src/models/Organization.js +64 -66
- package/dist/src/models/Organization.js.map +1 -1
- package/dist/src/models/OrganizationRegistrationPeriod.js +8 -7
- package/dist/src/models/OrganizationRegistrationPeriod.js.map +1 -1
- package/dist/src/models/PasswordToken.js +9 -5
- package/dist/src/models/PasswordToken.js.map +1 -1
- package/dist/src/models/PayconiqPayment.js +12 -14
- package/dist/src/models/PayconiqPayment.js.map +1 -1
- package/dist/src/models/Payment.d.ts.map +1 -1
- package/dist/src/models/Payment.js +41 -35
- package/dist/src/models/Payment.js.map +1 -1
- package/dist/src/models/Platform.js +8 -10
- package/dist/src/models/Platform.js.map +1 -1
- package/dist/src/models/RegisterCode.js +12 -9
- package/dist/src/models/RegisterCode.js.map +1 -1
- package/dist/src/models/Registration.d.ts.map +1 -1
- package/dist/src/models/Registration.js +65 -80
- package/dist/src/models/Registration.js.map +1 -1
- package/dist/src/models/RegistrationPeriod.js +11 -9
- package/dist/src/models/RegistrationPeriod.js.map +1 -1
- package/dist/src/models/STCredit.js +11 -7
- package/dist/src/models/STCredit.js.map +1 -1
- package/dist/src/models/STInvoice.js +45 -45
- package/dist/src/models/STInvoice.js.map +1 -1
- package/dist/src/models/STPackage.d.ts.map +1 -1
- package/dist/src/models/STPackage.js +58 -62
- package/dist/src/models/STPackage.js.map +1 -1
- package/dist/src/models/STPendingInvoice.js +17 -16
- package/dist/src/models/STPendingInvoice.js.map +1 -1
- package/dist/src/models/StripeAccount.js +15 -14
- package/dist/src/models/StripeAccount.js.map +1 -1
- package/dist/src/models/StripeCheckoutSession.js +10 -10
- package/dist/src/models/StripeCheckoutSession.js.map +1 -1
- package/dist/src/models/StripePaymentIntent.js +10 -10
- package/dist/src/models/StripePaymentIntent.js.map +1 -1
- package/dist/src/models/Ticket.js +46 -32
- package/dist/src/models/Ticket.js.map +1 -1
- package/dist/src/models/Token.js +12 -5
- package/dist/src/models/Token.js.map +1 -1
- package/dist/src/models/UsedRegisterCode.js +15 -11
- package/dist/src/models/UsedRegisterCode.js.map +1 -1
- package/dist/src/models/User.d.ts +2 -1
- package/dist/src/models/User.d.ts.map +1 -1
- package/dist/src/models/User.js +51 -29
- package/dist/src/models/User.js.map +1 -1
- package/dist/src/models/UserPermissions.js +11 -8
- package/dist/src/models/UserPermissions.js.map +1 -1
- package/dist/src/models/Webshop.js +41 -37
- package/dist/src/models/Webshop.js.map +1 -1
- package/dist/src/models/WebshopDiscountCode.js +13 -9
- package/dist/src/models/WebshopDiscountCode.js.map +1 -1
- package/dist/src/models/addresses/City.js +9 -8
- package/dist/src/models/addresses/City.js.map +1 -1
- package/dist/src/models/addresses/PostalCode.js +7 -3
- package/dist/src/models/addresses/PostalCode.js.map +1 -1
- package/dist/src/models/addresses/Province.js +5 -2
- package/dist/src/models/addresses/Province.js.map +1 -1
- package/dist/src/models/addresses/Street.js +6 -3
- package/dist/src/models/addresses/Street.js.map +1 -1
- package/dist/src/structures/OrganizationServerMetaData.js +30 -27
- package/dist/src/structures/OrganizationServerMetaData.js.map +1 -1
- package/package.json +6 -3
- package/src/helpers/EmailBuilder.ts +95 -17
- package/src/helpers/RateLimiter.ts +1 -0
- package/src/index.ts +1 -1
- package/src/models/Email.ts +9 -11
- package/src/models/EmailTemplate.ts +20 -1
- package/src/models/Member.ts +5 -7
- package/src/models/Order.ts +11 -21
- package/src/models/Organization.ts +17 -26
- package/src/models/Payment.ts +1 -0
- package/src/models/Registration.ts +17 -45
- package/src/models/STPackage.ts +8 -16
- package/src/models/User.ts +24 -1
|
@@ -9,38 +9,45 @@ const uuid_1 = require("uuid");
|
|
|
9
9
|
const DNSValidator_1 = require("../helpers/DNSValidator");
|
|
10
10
|
const _1 = require("./");
|
|
11
11
|
class Webshop extends simple_database_1.Model {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
12
|
+
static table = "webshops";
|
|
13
|
+
// Columns
|
|
14
|
+
id;
|
|
15
|
+
organizationId;
|
|
16
|
+
// A custom domain name that is used to host the webshop application (should be unique)
|
|
17
|
+
// E.g. webshop.scoutswetteren.be
|
|
18
|
+
domain = null;
|
|
19
|
+
// If a domain is used, the optional suffix on that domain
|
|
20
|
+
// E.g. webshop.scoutswetteren.be/wafelbak
|
|
21
|
+
domainUri = null;
|
|
22
|
+
// Unique representation of this webshop from a string, that is used to provide the default domains
|
|
23
|
+
// in shop.stamhoofd.be/uri, and stamhoofd.be/shop/uri
|
|
24
|
+
uri;
|
|
25
|
+
// Old uri format, which was only unique on a per-organization basis
|
|
26
|
+
// in org.stamhoofd.shop/legacyUri
|
|
27
|
+
legacyUri = null;
|
|
28
|
+
/**
|
|
29
|
+
* Public meta data
|
|
30
|
+
*/
|
|
31
|
+
meta = structures_1.WebshopMetaData.create({});
|
|
32
|
+
/**
|
|
33
|
+
* Data only accessible by the owners / users with special permissions
|
|
34
|
+
*/
|
|
35
|
+
privateMeta = structures_1.WebshopPrivateMetaData.create({});
|
|
36
|
+
/**
|
|
37
|
+
* Data only accessible by the server
|
|
38
|
+
*/
|
|
39
|
+
serverMeta = structures_1.WebshopServerMetaData.create({});
|
|
40
|
+
/**
|
|
41
|
+
* Contains all the products
|
|
42
|
+
*/
|
|
43
|
+
products = [];
|
|
44
|
+
/**
|
|
45
|
+
* Contains all the categories in the right order
|
|
46
|
+
*/
|
|
47
|
+
categories = [];
|
|
48
|
+
createdAt;
|
|
49
|
+
updatedAt;
|
|
50
|
+
static organization = new simple_database_1.ManyToOneRelation(_1.Organization, "organization");
|
|
44
51
|
// Methods
|
|
45
52
|
static async getByLegacyURI(organizationId, uri) {
|
|
46
53
|
const [rows] = await simple_database_1.Database.select(`SELECT ${this.getDefaultSelect()} FROM ${this.table} WHERE \`organizationId\` = ? AND \`legacyUri\` = ? LIMIT 1`, [organizationId, uri]);
|
|
@@ -84,14 +91,13 @@ class Webshop extends simple_database_1.Model {
|
|
|
84
91
|
}
|
|
85
92
|
// Return the location of the webshop
|
|
86
93
|
getHost() {
|
|
87
|
-
var _a;
|
|
88
94
|
if (this.domain && this.meta.domainActive) {
|
|
89
95
|
if (this.domainUri) {
|
|
90
96
|
return this.domain + "/" + this.domainUri;
|
|
91
97
|
}
|
|
92
98
|
return this.domain;
|
|
93
99
|
}
|
|
94
|
-
const domain =
|
|
100
|
+
const domain = STAMHOOFD.domains.webshop[this.organization.address.country] ?? STAMHOOFD.domains.webshop[""];
|
|
95
101
|
return domain + "/" + this.uri;
|
|
96
102
|
}
|
|
97
103
|
async updateDNSRecords(background = false) {
|
|
@@ -120,12 +126,10 @@ class Webshop extends simple_database_1.Model {
|
|
|
120
126
|
}
|
|
121
127
|
}
|
|
122
128
|
exports.Webshop = Webshop;
|
|
123
|
-
Webshop.table = "webshops";
|
|
124
|
-
Webshop.organization = new simple_database_1.ManyToOneRelation(_1.Organization, "organization");
|
|
125
129
|
tslib_1.__decorate([
|
|
126
130
|
(0, simple_database_1.column)({
|
|
127
131
|
primary: true, type: "string", beforeSave(value) {
|
|
128
|
-
return value
|
|
132
|
+
return value ?? (0, uuid_1.v4)();
|
|
129
133
|
}
|
|
130
134
|
})
|
|
131
135
|
], Webshop.prototype, "id", void 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Webshop.js","sourceRoot":"","sources":["../../../src/models/Webshop.ts"],"names":[],"mappings":";;;;AAAA,iEAAyF;AACzF,iEAA2D;AAC3D,sDAA2I;AAC3I,+BAAoC;AACpC,0DAA6D;AAE7D,yBAAkC;AAElC,MAAa,OAAQ,SAAQ,uBAAK;
|
|
1
|
+
{"version":3,"file":"Webshop.js","sourceRoot":"","sources":["../../../src/models/Webshop.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,13 +7,18 @@ const simple_encoding_1 = require("@simonbackx/simple-encoding");
|
|
|
7
7
|
const structures_1 = require("@stamhoofd/structures");
|
|
8
8
|
const uuid_1 = require("uuid");
|
|
9
9
|
class WebshopDiscountCode extends simple_database_1.Model {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
10
|
+
static table = "webshop_discount_codes";
|
|
11
|
+
// Columns
|
|
12
|
+
id;
|
|
13
|
+
organizationId;
|
|
14
|
+
webshopId;
|
|
15
|
+
code;
|
|
16
|
+
description = '';
|
|
17
|
+
discounts = [];
|
|
18
|
+
usageCount = 0;
|
|
19
|
+
maximumUsage = null;
|
|
20
|
+
createdAt;
|
|
21
|
+
updatedAt;
|
|
17
22
|
getStructure() {
|
|
18
23
|
return structures_1.DiscountCode.create(this);
|
|
19
24
|
}
|
|
@@ -34,11 +39,10 @@ class WebshopDiscountCode extends simple_database_1.Model {
|
|
|
34
39
|
}
|
|
35
40
|
}
|
|
36
41
|
exports.WebshopDiscountCode = WebshopDiscountCode;
|
|
37
|
-
WebshopDiscountCode.table = "webshop_discount_codes";
|
|
38
42
|
tslib_1.__decorate([
|
|
39
43
|
(0, simple_database_1.column)({
|
|
40
44
|
primary: true, type: "string", beforeSave(value) {
|
|
41
|
-
return value
|
|
45
|
+
return value ?? (0, uuid_1.v4)();
|
|
42
46
|
}
|
|
43
47
|
})
|
|
44
48
|
], WebshopDiscountCode.prototype, "id", void 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebshopDiscountCode.js","sourceRoot":"","sources":["../../../src/models/WebshopDiscountCode.ts"],"names":[],"mappings":";;;;AAAA,iEAA4D;AAC5D,iEAA2D;AAC3D,sDAA+D;AAC/D,+BAAoC;AAEpC,MAAa,mBAAoB,SAAQ,uBAAK;
|
|
1
|
+
{"version":3,"file":"WebshopDiscountCode.js","sourceRoot":"","sources":["../../../src/models/WebshopDiscountCode.ts"],"names":[],"mappings":";;;;AAAA,iEAA4D;AAC5D,iEAA2D;AAC3D,sDAA+D;AAC/D,+BAAoC;AAEpC,MAAa,mBAAoB,SAAQ,uBAAK;IAC1C,MAAM,CAAC,KAAK,GAAG,wBAAwB,CAAC;IAExC,UAAU;IAMV,EAAE,CAAU;IAGZ,cAAc,CAAS;IAGvB,SAAS,CAAS;IAGlB,IAAI,CAAS;IAGb,WAAW,GAAG,EAAE,CAAA;IAGhB,SAAS,GAAe,EAAE,CAAA;IAG1B,UAAU,GAAG,CAAC,CAAA;IAGd,YAAY,GAAgB,IAAI,CAAA;IAYhC,SAAS,CAAM;IAUf,SAAS,CAAM;IAEf,YAAY;QACR,OAAO,yBAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACpC,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,SAAiB,EAAE,KAAe;QAC1D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrB,OAAO,EAAE,CAAC;QACd,CAAC;QAED,IAAI,MAAM,GAAG,MAAM,mBAAmB,CAAC,KAAK,CAAC;YACzC,SAAS;YACT,IAAI,EAAE;gBACF,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,KAAK;aACf;SACJ,CAAC,CAAC;QAEH,6BAA6B;QAC7B,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,IAAI,IAAI,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,UAAU,CAAC,CAAA;QACrF,OAAO,MAAM,CAAC;IAClB,CAAC;;AA1EL,kDA2EC;AAlEG;IALC,IAAA,wBAAM,EAAC;QACJ,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC,KAAK;YAC3C,OAAO,KAAK,IAAI,IAAA,SAAM,GAAE,CAAC;QAC7B,CAAC;KACJ,CAAC;+CACU;AAGZ;IADC,IAAA,wBAAM,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;2DACJ;AAGvB;IADC,IAAA,wBAAM,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;sDACT;AAGlB;IADC,IAAA,wBAAM,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;iDACd;AAGb;IADC,IAAA,wBAAM,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;wDACX;AAGhB;IADC,IAAA,wBAAM,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,8BAAY,CAAC,qBAAQ,CAAC,EAAE,CAAC;sDACpC;AAG1B;IADC,IAAA,wBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;uDACd;AAGd;IADC,IAAA,wBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;yDACZ;AAYhC;IAVC,IAAA,wBAAM,EAAC;QACJ,IAAI,EAAE,UAAU,EAAE,UAAU,CAAC,GAAS;YAClC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;gBACpB,OAAO,GAAG,CAAC;YACf,CAAC;YACD,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAA;YACvB,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;YACvB,OAAO,IAAI,CAAA;QACf,CAAC;KACJ,CAAC;sDACa;AAUf;IARC,IAAA,wBAAM,EAAC;QACJ,IAAI,EAAE,UAAU,EAAE,UAAU;YACxB,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAA;YACvB,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;YACvB,OAAO,IAAI,CAAA;QACf,CAAC;QACD,UAAU,EAAE,IAAI;KACnB,CAAC;sDACa"}
|
|
@@ -6,19 +6,20 @@ const simple_database_1 = require("@simonbackx/simple-database");
|
|
|
6
6
|
const uuid_1 = require("uuid");
|
|
7
7
|
const Province_1 = require("./Province");
|
|
8
8
|
class City extends simple_database_1.Model {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
static table = "cities";
|
|
10
|
+
id;
|
|
11
|
+
name;
|
|
12
|
+
provinceId;
|
|
13
|
+
parentCityId = null;
|
|
14
|
+
country;
|
|
15
|
+
static parentCity = new simple_database_1.ManyToOneRelation(City, "parentCity");
|
|
16
|
+
static province = new simple_database_1.ManyToOneRelation(Province_1.Province, "province");
|
|
13
17
|
}
|
|
14
18
|
exports.City = City;
|
|
15
|
-
City.table = "cities";
|
|
16
|
-
City.parentCity = new simple_database_1.ManyToOneRelation(City, "parentCity");
|
|
17
|
-
City.province = new simple_database_1.ManyToOneRelation(Province_1.Province, "province");
|
|
18
19
|
tslib_1.__decorate([
|
|
19
20
|
(0, simple_database_1.column)({
|
|
20
21
|
primary: true, type: "string", beforeSave(value) {
|
|
21
|
-
return value
|
|
22
|
+
return value ?? (0, uuid_1.v4)();
|
|
22
23
|
}
|
|
23
24
|
})
|
|
24
25
|
], City.prototype, "id", void 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"City.js","sourceRoot":"","sources":["../../../../src/models/addresses/City.ts"],"names":[],"mappings":";;;;AAAA,iEAA6E;AAE7E,+BAAoC;AAEpC,yCAAsC;AAEtC,MAAa,IAAK,SAAQ,uBAAK;
|
|
1
|
+
{"version":3,"file":"City.js","sourceRoot":"","sources":["../../../../src/models/addresses/City.ts"],"names":[],"mappings":";;;;AAAA,iEAA6E;AAE7E,+BAAoC;AAEpC,yCAAsC;AAEtC,MAAa,IAAK,SAAQ,uBAAK;IAC3B,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAA;IAOvB,EAAE,CAAU;IAGZ,IAAI,CAAS;IAGb,UAAU,CAAS;IAGnB,YAAY,GAAkB,IAAI,CAAC;IAGnC,OAAO,CAAU;IAEjB,MAAM,CAAC,UAAU,GAAG,IAAI,mCAAiB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAA;IAC7D,MAAM,CAAC,QAAQ,GAAG,IAAI,mCAAiB,CAAC,mBAAQ,EAAE,UAAU,CAAC,CAAA;;AAvBjE,oBAwBC;AAhBG;IALC,IAAA,wBAAM,EAAC;QACJ,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC,KAAK;YAC3C,OAAO,KAAK,IAAI,IAAA,SAAM,GAAE,CAAC;QAC7B,CAAC;KACJ,CAAC;gCACU;AAGZ;IADC,IAAA,wBAAM,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;kCACd;AAGb;IADC,IAAA,wBAAM,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;wCACnC;AAGnB;IADC,IAAA,wBAAM,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;0CACrC;AAGnC;IADC,IAAA,wBAAM,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;qCACV"}
|
|
@@ -9,6 +9,12 @@ const utility_1 = require("@stamhoofd/utility");
|
|
|
9
9
|
const uuid_1 = require("uuid");
|
|
10
10
|
const City_1 = require("./City");
|
|
11
11
|
class PostalCode extends simple_database_1.Model {
|
|
12
|
+
static table = "postal_codes";
|
|
13
|
+
id;
|
|
14
|
+
postalCode;
|
|
15
|
+
cityId;
|
|
16
|
+
country;
|
|
17
|
+
static city = new simple_database_1.ManyToOneRelation(City_1.City, "city");
|
|
12
18
|
/**
|
|
13
19
|
* Search for a given city via it's postal code and country, collecting information about the city (id), parentCity (id) and province (id)
|
|
14
20
|
*/
|
|
@@ -117,12 +123,10 @@ class PostalCode extends simple_database_1.Model {
|
|
|
117
123
|
}
|
|
118
124
|
}
|
|
119
125
|
exports.PostalCode = PostalCode;
|
|
120
|
-
PostalCode.table = "postal_codes";
|
|
121
|
-
PostalCode.city = new simple_database_1.ManyToOneRelation(City_1.City, "city");
|
|
122
126
|
tslib_1.__decorate([
|
|
123
127
|
(0, simple_database_1.column)({
|
|
124
128
|
primary: true, type: "string", beforeSave(value) {
|
|
125
|
-
return value
|
|
129
|
+
return value ?? (0, uuid_1.v4)();
|
|
126
130
|
}
|
|
127
131
|
})
|
|
128
132
|
], PostalCode.prototype, "id", void 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PostalCode.js","sourceRoot":"","sources":["../../../../src/models/addresses/PostalCode.ts"],"names":[],"mappings":";;;;AAAA,iEAAsF;AACtF,6DAAwD;AACxD,sDAAgD;AAChD,gDAA8D;AAC9D,+BAAoC;AAEpC,iCAA8B;AAE9B,MAAa,UAAW,SAAQ,uBAAK;
|
|
1
|
+
{"version":3,"file":"PostalCode.js","sourceRoot":"","sources":["../../../../src/models/addresses/PostalCode.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,13 +5,16 @@ const tslib_1 = require("tslib");
|
|
|
5
5
|
const simple_database_1 = require("@simonbackx/simple-database");
|
|
6
6
|
const uuid_1 = require("uuid");
|
|
7
7
|
class Province extends simple_database_1.Model {
|
|
8
|
+
static table = "provinces";
|
|
9
|
+
id;
|
|
10
|
+
name;
|
|
11
|
+
country;
|
|
8
12
|
}
|
|
9
13
|
exports.Province = Province;
|
|
10
|
-
Province.table = "provinces";
|
|
11
14
|
tslib_1.__decorate([
|
|
12
15
|
(0, simple_database_1.column)({
|
|
13
16
|
primary: true, type: "string", beforeSave(value) {
|
|
14
|
-
return value
|
|
17
|
+
return value ?? (0, uuid_1.v4)();
|
|
15
18
|
}
|
|
16
19
|
})
|
|
17
20
|
], Province.prototype, "id", void 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Province.js","sourceRoot":"","sources":["../../../../src/models/addresses/Province.ts"],"names":[],"mappings":";;;;AAAA,iEAA2D;AAE3D,+BAAoC;AAEpC,MAAa,QAAS,SAAQ,uBAAK
|
|
1
|
+
{"version":3,"file":"Province.js","sourceRoot":"","sources":["../../../../src/models/addresses/Province.ts"],"names":[],"mappings":";;;;AAAA,iEAA2D;AAE3D,+BAAoC;AAEpC,MAAa,QAAS,SAAQ,uBAAK;IAC/B,MAAM,CAAC,KAAK,GAAG,WAAW,CAAA;IAO1B,EAAE,CAAU;IAGZ,IAAI,CAAS;IAGb,OAAO,CAAU;;AAdrB,4BAeC;AAPG;IALC,IAAA,wBAAM,EAAC;QACJ,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC,KAAK;YAC3C,OAAO,KAAK,IAAI,IAAA,SAAM,GAAE,CAAC;QAC7B,CAAC;KACJ,CAAC;oCACU;AAGZ;IADC,IAAA,wBAAM,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;sCACd;AAGb;IADC,IAAA,wBAAM,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;yCACV"}
|
|
@@ -6,14 +6,17 @@ const simple_database_1 = require("@simonbackx/simple-database");
|
|
|
6
6
|
const uuid_1 = require("uuid");
|
|
7
7
|
const City_1 = require("./City");
|
|
8
8
|
class Street extends simple_database_1.Model {
|
|
9
|
+
static table = "streets";
|
|
10
|
+
id;
|
|
11
|
+
name;
|
|
12
|
+
cityId;
|
|
13
|
+
static city = new simple_database_1.ManyToOneRelation(City_1.City, "city");
|
|
9
14
|
}
|
|
10
15
|
exports.Street = Street;
|
|
11
|
-
Street.table = "streets";
|
|
12
|
-
Street.city = new simple_database_1.ManyToOneRelation(City_1.City, "city");
|
|
13
16
|
tslib_1.__decorate([
|
|
14
17
|
(0, simple_database_1.column)({
|
|
15
18
|
primary: true, type: "string", beforeSave(value) {
|
|
16
|
-
return value
|
|
19
|
+
return value ?? (0, uuid_1.v4)();
|
|
17
20
|
}
|
|
18
21
|
})
|
|
19
22
|
], Street.prototype, "id", void 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Street.js","sourceRoot":"","sources":["../../../../src/models/addresses/Street.ts"],"names":[],"mappings":";;;;AAAA,iEAA+E;AAC/E,+BAAoC;AAEpC,iCAA8B;AAE9B,MAAa,MAAO,SAAQ,uBAAK
|
|
1
|
+
{"version":3,"file":"Street.js","sourceRoot":"","sources":["../../../../src/models/addresses/Street.ts"],"names":[],"mappings":";;;;AAAA,iEAA+E;AAC/E,+BAAoC;AAEpC,iCAA8B;AAE9B,MAAa,MAAO,SAAQ,uBAAK;IAC7B,MAAM,CAAC,KAAK,GAAG,SAAS,CAAA;IAOxB,EAAE,CAAU;IAGZ,IAAI,CAAS;IAGb,MAAM,CAAS;IAEf,MAAM,CAAC,IAAI,GAAG,IAAI,mCAAiB,CAAC,WAAI,EAAE,MAAM,CAAC,CAAA;;AAhBrD,wBAmBC;AAXG;IALC,IAAA,wBAAM,EAAC;QACJ,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC,KAAK;YAC3C,OAAO,KAAK,IAAI,IAAA,SAAM,GAAE,CAAC;QAC7B,CAAC;KACJ,CAAC;kCACU;AAGZ;IADC,IAAA,wBAAM,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;oCACd;AAGb;IADC,IAAA,wBAAM,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;sCACrC"}
|
|
@@ -5,10 +5,8 @@ const tslib_1 = require("tslib");
|
|
|
5
5
|
const simple_encoding_1 = require("@simonbackx/simple-encoding");
|
|
6
6
|
const structures_1 = require("@stamhoofd/structures");
|
|
7
7
|
class DripEmail extends simple_encoding_1.AutoEncoder {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
this.date = new Date();
|
|
11
|
-
}
|
|
8
|
+
id;
|
|
9
|
+
date = new Date();
|
|
12
10
|
}
|
|
13
11
|
exports.DripEmail = DripEmail;
|
|
14
12
|
tslib_1.__decorate([
|
|
@@ -18,32 +16,38 @@ tslib_1.__decorate([
|
|
|
18
16
|
(0, simple_encoding_1.field)({ decoder: simple_encoding_1.DateDecoder })
|
|
19
17
|
], DripEmail.prototype, "date", void 0);
|
|
20
18
|
class OrganizationServerMetaData extends simple_encoding_1.AutoEncoder {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
19
|
+
privateDKIMKey;
|
|
20
|
+
publicDKIMKey;
|
|
21
|
+
usedRegisterCode;
|
|
22
|
+
/**
|
|
23
|
+
* When the DNS records are invalid for the first time, this timestamp will get set.
|
|
24
|
+
* When DNS is valid again, this will get cleared
|
|
25
|
+
*/
|
|
26
|
+
firstInvalidDNSRecords;
|
|
27
|
+
/**
|
|
28
|
+
* Whether an email has been send to say that the domain is setup correctly
|
|
29
|
+
* Set back to false when changing the domain
|
|
30
|
+
*/
|
|
31
|
+
didSendDomainSetupMail = true;
|
|
32
|
+
/**
|
|
33
|
+
* When the DNS records are invalid for the first time, this timestamp will get set.
|
|
34
|
+
* When DNS is valid again, this will get cleared
|
|
35
|
+
*/
|
|
36
|
+
DNSRecordWarningCount = 0;
|
|
37
|
+
lastInvalidDNSDates;
|
|
38
|
+
isDNSUnstable = false;
|
|
39
|
+
mollieCustomerId;
|
|
40
|
+
ssoConfiguration = null;
|
|
41
|
+
/**
|
|
42
|
+
* List of specific emails that were send to this organization
|
|
43
|
+
*/
|
|
44
|
+
dripEmailList = new Map();
|
|
40
45
|
markDNSValid() {
|
|
41
46
|
// Reset if longer than 14 days without invalid DNS
|
|
42
47
|
this.isDNSUnstable = this.recalculateIsDNSUnstable();
|
|
43
48
|
this.firstInvalidDNSRecords = undefined;
|
|
44
49
|
}
|
|
45
50
|
markDNSFailure() {
|
|
46
|
-
var _a;
|
|
47
51
|
if (this.firstInvalidDNSRecords) {
|
|
48
52
|
// Hasn't been valid
|
|
49
53
|
return;
|
|
@@ -53,16 +57,15 @@ class OrganizationServerMetaData extends simple_encoding_1.AutoEncoder {
|
|
|
53
57
|
// Remove all dates longer than 14 days ago, or more than 6 events
|
|
54
58
|
const d14 = new Date(Date.now() - 1000 * 60 * 60 * 24 * 14);
|
|
55
59
|
const maxLength = 6;
|
|
56
|
-
this.lastInvalidDNSDates = [...(
|
|
60
|
+
this.lastInvalidDNSDates = [...(this.lastInvalidDNSDates ?? []), new Date()].filter(d => d > d14).slice(0, maxLength);
|
|
57
61
|
this.isDNSUnstable = this.recalculateIsDNSUnstable();
|
|
58
62
|
}
|
|
59
63
|
/**
|
|
60
64
|
* DNS is unstable if it was marked invalid 4 times in the last 2 weeks. Then it stays unstable until there were no invalid DNS moments in the last 2 weeks.
|
|
61
65
|
*/
|
|
62
66
|
recalculateIsDNSUnstable() {
|
|
63
|
-
var _a;
|
|
64
67
|
const d14 = new Date(Date.now() - 1000 * 60 * 60 * 24 * 14);
|
|
65
|
-
return (
|
|
68
|
+
return (this.lastInvalidDNSDates ?? []).filter(d => d > d14).length > (this.isDNSUnstable ? 0 : 4);
|
|
66
69
|
}
|
|
67
70
|
addEmail(identifier) {
|
|
68
71
|
console.log("Marked email ", identifier);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OrganizationServerMetaData.js","sourceRoot":"","sources":["../../../src/structures/OrganizationServerMetaData.ts"],"names":[],"mappings":";;;;AAAA,iEAAoJ;AACpJ,sDAAkE;AAElE,MAAa,SAAU,SAAQ,6BAAW;
|
|
1
|
+
{"version":3,"file":"OrganizationServerMetaData.js","sourceRoot":"","sources":["../../../src/structures/OrganizationServerMetaData.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stamhoofd/models",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.17.0",
|
|
4
4
|
"main": "./dist/src/index.js",
|
|
5
5
|
"types": "./dist/src/index.d.ts",
|
|
6
6
|
"license": "UNLICENCED",
|
|
@@ -24,7 +24,10 @@
|
|
|
24
24
|
"base-x": "^3.0.9"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
|
-
"@simonbackx/simple-database": "1.
|
|
27
|
+
"@simonbackx/simple-database": "1.25.0"
|
|
28
28
|
},
|
|
29
|
-
"
|
|
29
|
+
"publishConfig": {
|
|
30
|
+
"access": "public"
|
|
31
|
+
},
|
|
32
|
+
"gitHead": "5f940486646acd12e23e96a750bc12ca2be4df44"
|
|
30
33
|
}
|
|
@@ -1,18 +1,91 @@
|
|
|
1
1
|
import { EmailAddress, EmailBuilder } from "@stamhoofd/email";
|
|
2
|
-
import { Recipient, Replacement } from "@stamhoofd/structures";
|
|
2
|
+
import { EmailTemplateType, Recipient, Replacement } from "@stamhoofd/structures";
|
|
3
3
|
import { Formatter } from "@stamhoofd/utility";
|
|
4
4
|
|
|
5
|
-
import { Organization, Platform, User } from "../models";
|
|
6
5
|
import { SimpleError } from "@simonbackx/simple-errors";
|
|
6
|
+
import { EmailTemplate, Organization, Platform, User } from "../models";
|
|
7
7
|
|
|
8
|
-
export
|
|
8
|
+
export type EmailTemplateOptions = {
|
|
9
|
+
type: EmailTemplateType,
|
|
10
|
+
webshopId?: string | null,
|
|
11
|
+
groupId?: string | null,
|
|
12
|
+
organizationId?: string | null
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export async function getEmailTemplate(data: EmailTemplateOptions) {
|
|
16
|
+
// Most specific template: for specific group
|
|
17
|
+
const q = EmailTemplate.select()
|
|
18
|
+
.where('type', data.type)
|
|
19
|
+
|
|
20
|
+
if (data.groupId) {
|
|
21
|
+
q.where('groupId', data.groupId)
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
if (data.organizationId) {
|
|
25
|
+
q.where('organizationId', data.organizationId)
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
if (data.webshopId) {
|
|
29
|
+
q.where('webshopId', data.webshopId)
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
let templates = await q.limit(1).fetch()
|
|
33
|
+
|
|
34
|
+
// Specific for organization
|
|
35
|
+
if (templates.length == 0 && (data.groupId || data.webshopId) && data.organizationId) {
|
|
36
|
+
templates = await EmailTemplate.select()
|
|
37
|
+
.where('type', data.type)
|
|
38
|
+
.where('organizationId', data.organizationId)
|
|
39
|
+
.where('groupId', null)
|
|
40
|
+
.where('webshopId', null)
|
|
41
|
+
.limit(1)
|
|
42
|
+
.fetch()
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// Default for platform
|
|
46
|
+
if (templates.length == 0 && (data.groupId || data.webshopId || data.organizationId)) {
|
|
47
|
+
templates = await EmailTemplate.select()
|
|
48
|
+
.where('type', data.type)
|
|
49
|
+
.where('organizationId', null)
|
|
50
|
+
.where('groupId', null)
|
|
51
|
+
.where('webshopId', null)
|
|
52
|
+
.limit(1)
|
|
53
|
+
.fetch()
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
if (templates.length == 0) {
|
|
57
|
+
console.error("Could not find email template for type "+data.type)
|
|
58
|
+
return
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
return templates[0]
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
export async function getEmailBuilderForTemplate(organization: Organization|null, options: Omit<EmailBuilderOptions, "subject" | "html"> & { template: Omit<EmailTemplateOptions, "organizationId"> }) {
|
|
66
|
+
const template = await getEmailTemplate({
|
|
67
|
+
...options.template,
|
|
68
|
+
organizationId: organization?.id ?? null
|
|
69
|
+
})
|
|
70
|
+
|
|
71
|
+
if (!template) {
|
|
72
|
+
return undefined
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
return await getEmailBuilder(organization, {
|
|
76
|
+
...options,
|
|
77
|
+
subject: template.subject,
|
|
78
|
+
html: template.html
|
|
79
|
+
})
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export type EmailBuilderOptions = {
|
|
9
83
|
defaultReplacements?: Replacement[],
|
|
10
84
|
recipients: Recipient[],
|
|
11
85
|
from: string,
|
|
12
86
|
replyTo?: string|null,
|
|
13
87
|
subject: string,
|
|
14
|
-
|
|
15
|
-
html: string | null,
|
|
88
|
+
html: string,
|
|
16
89
|
attachments?: {
|
|
17
90
|
filename: string;
|
|
18
91
|
content: string;
|
|
@@ -23,8 +96,14 @@ export async function getEmailBuilder(organization: Organization|null, email: {
|
|
|
23
96
|
unsubscribeType?: 'all'|'marketing',
|
|
24
97
|
fromStamhoofd?: boolean,
|
|
25
98
|
singleBcc?: string,
|
|
99
|
+
replaceAll?: {from: string, to: string}[], // replace in all e-mails, not recipient dependent
|
|
26
100
|
callback?: (error: Error|null) => void; // for each email
|
|
27
|
-
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* @param organization defines replacements and unsubsribe behaviour
|
|
105
|
+
*/
|
|
106
|
+
export async function getEmailBuilder(organization: Organization|null, email: EmailBuilderOptions) {
|
|
28
107
|
const platform = await Platform.getSharedStruct()
|
|
29
108
|
// Update recipients
|
|
30
109
|
const cleaned: Recipient[] = []
|
|
@@ -86,16 +165,21 @@ export async function getEmailBuilder(organization: Organization|null, email: {
|
|
|
86
165
|
if (organization) {
|
|
87
166
|
const extra = organization.meta.getEmailReplacements()
|
|
88
167
|
recipient.replacements.push(...extra)
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
// Defaults
|
|
171
|
+
const extra = platform.config.getEmailReplacements()
|
|
172
|
+
recipient.replacements.push(...extra)
|
|
93
173
|
}
|
|
94
174
|
|
|
95
175
|
const queue = email.recipients.slice()
|
|
96
176
|
|
|
97
177
|
let emailIndex = 0;
|
|
98
178
|
|
|
179
|
+
for (const s of email.replaceAll ?? []) {
|
|
180
|
+
email.html = email.html.replaceAll(s.from, s.to)
|
|
181
|
+
}
|
|
182
|
+
|
|
99
183
|
// Create e-mail builder
|
|
100
184
|
const builder: EmailBuilder = () => {
|
|
101
185
|
const recipient = queue.shift()
|
|
@@ -105,15 +189,9 @@ export async function getEmailBuilder(organization: Organization|null, email: {
|
|
|
105
189
|
|
|
106
190
|
let replacedHtml = email.html
|
|
107
191
|
let replacedSubject = email.subject
|
|
108
|
-
//let replacedText = email.text
|
|
109
192
|
|
|
110
193
|
for (const replacement of recipient.replacements) {
|
|
111
|
-
|
|
112
|
-
replacedHtml = replacedHtml.replaceAll("{{"+replacement.token+"}}", replacement.html ?? Formatter.escapeHtml(replacement.value))
|
|
113
|
-
}
|
|
114
|
-
//if (replacedText) {
|
|
115
|
-
// replacedText = replacedText.replaceAll("{{"+replacement.token+"}}", replacement.value)
|
|
116
|
-
//}
|
|
194
|
+
replacedHtml = replacedHtml.replaceAll("{{"+replacement.token+"}}", replacement.html ?? Formatter.escapeHtml(replacement.value))
|
|
117
195
|
replacedSubject = replacedSubject.replaceAll("{{"+replacement.token+"}}", replacement.value)
|
|
118
196
|
}
|
|
119
197
|
|
|
@@ -42,6 +42,7 @@ export class RateLimitWindow {
|
|
|
42
42
|
throw new SimpleError({
|
|
43
43
|
code: 'rate_limit',
|
|
44
44
|
message: `Rate limit exceeded (${w} ${amount > 1 ? '('+amount+' added)' : ''} requests in ${Math.round(this.age/1000)}s). Retry after ${retryAfter}s. Check your code and try to reduce the number of (parallel) requests you make. Add waiting periods if needed.`,
|
|
45
|
+
human: `Oeps! Te veel aanvragen. Om spam te vermijden is jouw aanvraag tijdelijk geblokkeerd. Probeer het over ${retryAfter} seconden opnieuw.`,
|
|
45
46
|
statusCode: 429
|
|
46
47
|
})
|
|
47
48
|
}
|