@unchainedshop/plugins 1.1.5 → 1.2.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/jest.config.js +5 -0
- package/lib/files/gridfs/gridfs-adapter.js +1 -1
- package/lib/files/gridfs/gridfs-adapter.js.map +1 -1
- package/lib/files/gridfs/gridfs-webhook.d.ts +2 -1
- package/lib/files/gridfs/gridfs-webhook.js +5 -4
- package/lib/files/gridfs/gridfs-webhook.js.map +1 -1
- package/lib/files/gridfs/index.d.ts +3 -3
- package/lib/files/gridfs/index.js.map +1 -1
- package/lib/files/gridfs/promisePipe.d.ts +1 -1
- package/lib/files/gridfs/promisePipe.js.map +1 -1
- package/lib/files/gridfs/sign.d.ts +1 -1
- package/lib/files/gridfs/sign.js.map +1 -1
- package/lib/files/minio/minio-adapter.js +1 -1
- package/lib/files/minio/minio-adapter.js.map +1 -1
- package/lib/files/minio/minio-webhook.d.ts +2 -1
- package/lib/files/minio/minio-webhook.js +30 -28
- package/lib/files/minio/minio-webhook.js.map +1 -1
- package/lib/payment/apple-iap/adapter.d.ts +2 -1
- package/lib/payment/apple-iap/adapter.js +94 -92
- package/lib/payment/apple-iap/adapter.js.map +1 -1
- package/lib/payment/apple-iap/index.d.ts +2 -1
- package/lib/payment/apple-iap/index.js +2 -1
- package/lib/payment/apple-iap/index.js.map +1 -1
- package/lib/payment/bity/adapter.d.ts +2 -1
- package/lib/payment/bity/adapter.js +50 -48
- package/lib/payment/bity/adapter.js.map +1 -1
- package/lib/payment/bity/index.d.ts +2 -1
- package/lib/payment/bity/index.js +2 -1
- package/lib/payment/bity/index.js.map +1 -1
- package/lib/payment/braintree.js +2 -2
- package/lib/payment/braintree.js.map +1 -1
- package/lib/payment/cryptopay.d.ts +2 -1
- package/lib/payment/cryptopay.js +60 -58
- package/lib/payment/cryptopay.js.map +1 -1
- package/lib/payment/datatrans-v2/index.d.ts +2 -1
- package/lib/payment/datatrans-v2/index.js +2 -1
- package/lib/payment/datatrans-v2/index.js.map +1 -1
- package/lib/payment/datatrans-v2/middleware.d.ts +2 -1
- package/lib/payment/datatrans-v2/middleware.js +99 -97
- package/lib/payment/datatrans-v2/middleware.js.map +1 -1
- package/lib/payment/paypal-checkout.js +1 -1
- package/lib/payment/paypal-checkout.js.map +1 -1
- package/lib/payment/postfinance-checkout/index.d.ts +2 -1
- package/lib/payment/postfinance-checkout/index.js +2 -1
- package/lib/payment/postfinance-checkout/index.js.map +1 -1
- package/lib/payment/postfinance-checkout/middleware.d.ts +2 -1
- package/lib/payment/postfinance-checkout/middleware.js +36 -34
- package/lib/payment/postfinance-checkout/middleware.js.map +1 -1
- package/lib/payment/stripe.d.ts +2 -1
- package/lib/payment/stripe.js +63 -60
- package/lib/payment/stripe.js.map +1 -1
- package/lib/payment/worldline-saferpay/worldline-saferpay-client/index.d.ts +3 -3
- package/lib/pricing/product-price-ECB-interbank-exchange.js +1 -1
- package/lib/pricing/product-price-ECB-interbank-exchange.js.map +1 -1
- package/lib/pricing/product-price-cryptopay.d.ts +2 -1
- package/lib/pricing/product-price-cryptopay.js +20 -18
- package/lib/pricing/product-price-cryptopay.js.map +1 -1
- package/lib/worker/ZombieKillerWorker.js.map +1 -1
- package/lib/worker/email.js +1 -0
- package/lib/worker/email.js.map +1 -1
- package/package.json +30 -24
- package/src/files/gridfs/gridfs-adapter.ts +1 -1
- package/src/files/gridfs/gridfs-webhook.ts +62 -0
- package/src/files/gridfs/{index.js → index.ts} +0 -0
- package/src/files/gridfs/{promisePipe.js → promisePipe.ts} +0 -0
- package/src/files/gridfs/{sign.js → sign.ts} +0 -0
- package/src/files/minio/minio-adapter.ts +1 -1
- package/src/files/minio/minio-webhook.js +33 -30
- package/src/payment/apple-iap/adapter.ts +113 -110
- package/src/payment/apple-iap/index.ts +2 -1
- package/src/payment/bity/adapter.ts +53 -51
- package/src/payment/bity/index.ts +2 -1
- package/src/payment/braintree.ts +2 -2
- package/src/payment/cryptopay.ts +69 -67
- package/src/payment/datatrans-v2/index.ts +3 -1
- package/src/payment/datatrans-v2/middleware.ts +129 -123
- package/src/payment/paypal-checkout.ts +1 -1
- package/src/payment/postfinance-checkout/index.ts +3 -1
- package/src/payment/postfinance-checkout/middleware.ts +42 -40
- package/src/payment/stripe.ts +82 -74
- package/src/payment/worldline-saferpay/worldline-saferpay-client/index.ts +3 -3
- package/src/pricing/product-discount.ts +1 -1
- package/src/pricing/product-price-ECB-interbank-exchange.ts +1 -1
- package/src/pricing/product-price-cryptopay.ts +20 -18
- package/src/worker/ZombieKillerWorker.ts +5 -5
- package/src/worker/email.ts +1 -0
- package/tsconfig.json +26 -5
- package/src/files/gridfs/gridfs-webhook.js +0 -60
- package/tsconfig.build.json +0 -26
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import fetch from 'isomorphic-unfetch';
|
|
2
2
|
import { ProductPricingDirector, ProductPricingAdapter } from '@unchainedshop/core-products';
|
|
3
|
+
import xmlJs from 'xml-js';
|
|
3
4
|
import Cache from './utils/cache';
|
|
4
5
|
const CACHE_PERIOD = 60 * 60 * 24; // 1 day
|
|
5
6
|
const SUPPORTED_CURRENCIES = [
|
|
@@ -37,7 +38,6 @@ const SUPPORTED_CURRENCIES = [
|
|
|
37
38
|
'ZAR',
|
|
38
39
|
];
|
|
39
40
|
const cache = new Cache(CACHE_PERIOD);
|
|
40
|
-
const xmlJs = require('xml-js'); // eslint-disable-line
|
|
41
41
|
const getEURexchangeRateForCurrency = async (currency) => {
|
|
42
42
|
const response = cache.get(currency, () => fetch(`https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml`, {
|
|
43
43
|
method: 'GET',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"product-price-ECB-interbank-exchange.js","sourceRoot":"","sources":["../../src/pricing/product-price-ECB-interbank-exchange.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,oBAAoB,CAAC;AACvC,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"product-price-ECB-interbank-exchange.js","sourceRoot":"","sources":["../../src/pricing/product-price-ECB-interbank-exchange.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
declare const _default: (app: any) => void;
|
|
2
|
+
export default _default;
|
|
@@ -1,21 +1,23 @@
|
|
|
1
1
|
import bodyParser from 'body-parser';
|
|
2
2
|
import { useMiddlewareWithCurrentContext } from '@unchainedshop/api';
|
|
3
|
-
const { CRYPTOPAY_SECRET, CRYPTOPAY_PRICING_WEBHOOK_PATH = '/
|
|
4
|
-
|
|
5
|
-
useMiddlewareWithCurrentContext(CRYPTOPAY_PRICING_WEBHOOK_PATH,
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
});
|
|
3
|
+
const { CRYPTOPAY_SECRET, CRYPTOPAY_PRICING_WEBHOOK_PATH = '/payment/cryptopay-pricing' } = process.env;
|
|
4
|
+
export default (app) => {
|
|
5
|
+
useMiddlewareWithCurrentContext(app, CRYPTOPAY_PRICING_WEBHOOK_PATH, bodyParser.json());
|
|
6
|
+
useMiddlewareWithCurrentContext(app, CRYPTOPAY_PRICING_WEBHOOK_PATH, async (request, response) => {
|
|
7
|
+
const resolvedContext = request.unchainedContext;
|
|
8
|
+
const { baseCurrency, token, rate, timestamp, secret } = request.body;
|
|
9
|
+
if (secret !== CRYPTOPAY_SECRET) {
|
|
10
|
+
response.end(JSON.stringify({ success: false }));
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
const rateData = {
|
|
14
|
+
baseCurrency,
|
|
15
|
+
quoteCurrency: token,
|
|
16
|
+
rate,
|
|
17
|
+
timestamp,
|
|
18
|
+
};
|
|
19
|
+
const success = await resolvedContext.modules.products.prices.rates.updateRate(rateData);
|
|
20
|
+
response.end(JSON.stringify({ success }));
|
|
21
|
+
});
|
|
22
|
+
};
|
|
21
23
|
//# sourceMappingURL=product-price-cryptopay.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"product-price-cryptopay.js","sourceRoot":"","sources":["../../src/pricing/product-price-cryptopay.ts"],"names":[],"mappings":"AAEA,OAAO,UAAU,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,+BAA+B,EAAE,MAAM,oBAAoB,CAAC;AAErE,MAAM,EAAE,gBAAgB,EAAE,8BAA8B,GAAG,4BAA4B,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;AAExG,+BAA+B,CAAC,8BAA8B,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"product-price-cryptopay.js","sourceRoot":"","sources":["../../src/pricing/product-price-cryptopay.ts"],"names":[],"mappings":"AAEA,OAAO,UAAU,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,+BAA+B,EAAE,MAAM,oBAAoB,CAAC;AAErE,MAAM,EAAE,gBAAgB,EAAE,8BAA8B,GAAG,4BAA4B,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;AAExG,eAAe,CAAC,GAAG,EAAE,EAAE;IACrB,+BAA+B,CAAC,GAAG,EAAE,8BAA8B,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;IAExF,+BAA+B,CAAC,GAAG,EAAE,8BAA8B,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE;QAC/F,MAAM,eAAe,GAAG,OAAO,CAAC,gBAA2B,CAAC;QAC5D,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;QACtE,IAAI,MAAM,KAAK,gBAAgB,EAAE;YAC/B,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YACjD,OAAO;SACR;QACD,MAAM,QAAQ,GAAqB;YACjC,YAAY;YACZ,aAAa,EAAE,KAAK;YACpB,IAAI;YACJ,SAAS;SACV,CAAC;QACF,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACzF,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ZombieKillerWorker.js","sourceRoot":"","sources":["../../src/worker/ZombieKillerWorker.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ZombieKillerWorker.js","sourceRoot":"","sources":["../../src/worker/ZombieKillerWorker.ts"],"names":[],"mappings":"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"}
|
package/lib/worker/email.js
CHANGED
|
@@ -4,6 +4,7 @@ import fs from 'fs';
|
|
|
4
4
|
import path from 'path';
|
|
5
5
|
import os from 'os';
|
|
6
6
|
import open from 'open';
|
|
7
|
+
import nodemailer from 'nodemailer';
|
|
7
8
|
const logger = createLogger('unchained:plugins:worker:email');
|
|
8
9
|
const checkEmailInterceptionEnabled = () => {
|
|
9
10
|
return process.env.NODE_ENV !== 'production' && !process.env.UNCHAINED_DISABLE_EMAIL_INTERCEPTION;
|
package/lib/worker/email.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email.js","sourceRoot":"","sources":["../../src/worker/email.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"email.js","sourceRoot":"","sources":["../../src/worker/email.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@unchainedshop/plugins",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"
|
|
5
|
-
|
|
3
|
+
"version": "1.2.0",
|
|
4
|
+
"exports": {
|
|
5
|
+
"./*": "./lib/*"
|
|
6
|
+
},
|
|
6
7
|
"type": "module",
|
|
7
8
|
"scripts": {
|
|
9
|
+
"prepublishOnly": "npm install && npm run build || :",
|
|
8
10
|
"clean": "rm -rf lib",
|
|
9
|
-
"build": "npm run clean && tsc
|
|
10
|
-
"watch": "tsc -
|
|
11
|
-
"
|
|
11
|
+
"build": "npm run clean && tsc",
|
|
12
|
+
"watch": "tsc -w",
|
|
13
|
+
"test": "jest --watch"
|
|
12
14
|
},
|
|
13
15
|
"repository": {
|
|
14
16
|
"type": "git",
|
|
@@ -26,36 +28,40 @@
|
|
|
26
28
|
},
|
|
27
29
|
"homepage": "https://github.com/unchainedshop/unchained#readme",
|
|
28
30
|
"devDependencies": {
|
|
29
|
-
"@
|
|
31
|
+
"@types/node": "^16.11.44",
|
|
32
|
+
"@unchainedshop/api": "^1.1.9",
|
|
30
33
|
"@unchainedshop/client-oauth2": "^4.3.3",
|
|
31
|
-
"@unchainedshop/core-delivery": "^1.1.
|
|
32
|
-
"@unchainedshop/core-enrollments": "^1.1.
|
|
33
|
-
"@unchainedshop/core-filters": "^1.1.
|
|
34
|
-
"@unchainedshop/core-messaging": "^1.1.
|
|
35
|
-
"@unchainedshop/core-orders": "^1.1.
|
|
36
|
-
"@unchainedshop/core-payment": "^1.1.
|
|
37
|
-
"@unchainedshop/core-products": "^1.1.
|
|
38
|
-
"@unchainedshop/core-quotations": "^1.1.
|
|
39
|
-
"@unchainedshop/core-warehousing": "^1.1.
|
|
40
|
-
"@unchainedshop/core-worker": "^1.1.
|
|
41
|
-
"@unchainedshop/events": "^1.1.
|
|
42
|
-
"@unchainedshop/file-upload": "^1.1.
|
|
43
|
-
"@unchainedshop/logger": "1.1.
|
|
44
|
-
"@unchainedshop/types": "^1.1.
|
|
45
|
-
"@unchainedshop/utils": "^1.1.
|
|
46
|
-
"JSONStream": "^1.3.5",
|
|
34
|
+
"@unchainedshop/core-delivery": "^1.1.9",
|
|
35
|
+
"@unchainedshop/core-enrollments": "^1.1.9",
|
|
36
|
+
"@unchainedshop/core-filters": "^1.1.9",
|
|
37
|
+
"@unchainedshop/core-messaging": "^1.1.9",
|
|
38
|
+
"@unchainedshop/core-orders": "^1.1.9",
|
|
39
|
+
"@unchainedshop/core-payment": "^1.1.9",
|
|
40
|
+
"@unchainedshop/core-products": "^1.1.9",
|
|
41
|
+
"@unchainedshop/core-quotations": "^1.1.9",
|
|
42
|
+
"@unchainedshop/core-warehousing": "^1.1.9",
|
|
43
|
+
"@unchainedshop/core-worker": "^1.1.9",
|
|
44
|
+
"@unchainedshop/events": "^1.1.9",
|
|
45
|
+
"@unchainedshop/file-upload": "^1.1.9",
|
|
46
|
+
"@unchainedshop/logger": "^1.1.9",
|
|
47
|
+
"@unchainedshop/types": "^1.1.9",
|
|
48
|
+
"@unchainedshop/utils": "^1.1.9",
|
|
47
49
|
"bluebird": "^3.7.2",
|
|
48
50
|
"body-parser": "^1.20.0",
|
|
49
51
|
"event-iterator": "^2.0.0",
|
|
52
|
+
"jest": "^28.1.2",
|
|
53
|
+
"JSONStream": "^1.3.5",
|
|
50
54
|
"minio": "^7.0.28",
|
|
51
55
|
"moment": "^2.29.3",
|
|
52
56
|
"mongodb": "^4.7.0",
|
|
53
|
-
"node-sheets": "^1.
|
|
57
|
+
"node-sheets": "^1.1.9",
|
|
54
58
|
"nodemailer": "^6.7.5",
|
|
55
59
|
"open": "^8.4.0",
|
|
56
60
|
"redis": "^4.1.0",
|
|
57
61
|
"request": "^2.88.2",
|
|
62
|
+
"ts-jest": "^28.0.5",
|
|
58
63
|
"typescript": "^4.7.4",
|
|
64
|
+
"xml-js": "^1.6.11",
|
|
59
65
|
"xml2js": "0.4.23"
|
|
60
66
|
}
|
|
61
67
|
}
|
|
@@ -5,9 +5,9 @@ import http, { OutgoingHttpHeaders } from 'http';
|
|
|
5
5
|
import mimeType from 'mime-types';
|
|
6
6
|
import { URL } from 'url';
|
|
7
7
|
import { Readable } from 'stream';
|
|
8
|
+
import buildHashedFilename from '@unchainedshop/file-upload/buildHashedFilename';
|
|
8
9
|
import sign from './sign';
|
|
9
10
|
import promisePipe from './promisePipe';
|
|
10
|
-
import buildHashedFilename from '@unchainedshop/file-upload/lib/buildHashedFilename';
|
|
11
11
|
|
|
12
12
|
const { UNCHAINED_PUT_URL_EXPIRY, ROOT_URL } = process.env;
|
|
13
13
|
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { useMiddlewareWithCurrentContext } from '@unchainedshop/api';
|
|
2
|
+
import { log, LogLevel } from '@unchainedshop/logger';
|
|
3
|
+
import buildHashedFilename from '@unchainedshop/file-upload/buildHashedFilename';
|
|
4
|
+
import sign from './sign';
|
|
5
|
+
import promisePipe from './promisePipe';
|
|
6
|
+
|
|
7
|
+
const { ROOT_URL } = process.env;
|
|
8
|
+
|
|
9
|
+
/*
|
|
10
|
+
curl -vvv -X PUT -T /Users/pozylon/Downloads/grafik.png http://localhost:4010/gridfs/user-avatars/hans.png?e=1653059591506&s=df8626a1c9b9006249d7f1928fd530579fed57216f1bdcb83c28a8322cdc90b1
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
export default (app) =>
|
|
14
|
+
useMiddlewareWithCurrentContext(app, '/gridfs', async (req, res) => {
|
|
15
|
+
try {
|
|
16
|
+
const { services, modules } = req.unchainedContext;
|
|
17
|
+
const url = new URL(req.url, ROOT_URL);
|
|
18
|
+
const [, directoryName, fileName] = url.pathname.split('/');
|
|
19
|
+
|
|
20
|
+
if (req.method === 'PUT') {
|
|
21
|
+
const { s: signature, e: expiryTimestamp } = req.query;
|
|
22
|
+
const expiryDate = new Date(parseInt(expiryTimestamp, 10));
|
|
23
|
+
const fileId = buildHashedFilename(directoryName, fileName, expiryDate);
|
|
24
|
+
if (sign(directoryName, fileId, expiryDate.getTime()) === signature) {
|
|
25
|
+
const file = await modules.files.findFile({ fileId });
|
|
26
|
+
if (file.expires === null) {
|
|
27
|
+
res.writeHead(503);
|
|
28
|
+
res.end('File already linked');
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
const writeStream = await modules.gridfsFileUploads.createWriteStream(
|
|
32
|
+
directoryName,
|
|
33
|
+
fileId,
|
|
34
|
+
fileName,
|
|
35
|
+
);
|
|
36
|
+
res.writeHead(200);
|
|
37
|
+
const { length } = await promisePipe(req, writeStream);
|
|
38
|
+
await services.files.linkFile({ fileId, size: length }, req.unchainedContext);
|
|
39
|
+
res.end();
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
res.writeHead(403);
|
|
43
|
+
res.end();
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
if (req.method === 'GET') {
|
|
47
|
+
const fileId = fileName;
|
|
48
|
+
const readStream = await modules.gridfsFileUploads.createReadStream(directoryName, fileId);
|
|
49
|
+
res.writeHead(200);
|
|
50
|
+
await promisePipe(readStream, res);
|
|
51
|
+
res.end();
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
res.writeHead(404);
|
|
55
|
+
res.end();
|
|
56
|
+
return;
|
|
57
|
+
} catch (e) {
|
|
58
|
+
log(e.message, { level: LogLevel.Error });
|
|
59
|
+
res.writeHead(503);
|
|
60
|
+
res.end(JSON.stringify(e));
|
|
61
|
+
}
|
|
62
|
+
});
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -8,7 +8,7 @@ import mimeType from 'mime-types';
|
|
|
8
8
|
import Minio from 'minio';
|
|
9
9
|
import { Readable } from 'stream';
|
|
10
10
|
import { URL } from 'url';
|
|
11
|
-
import buildHashedFilename from '@unchainedshop/file-upload/
|
|
11
|
+
import buildHashedFilename from '@unchainedshop/file-upload/buildHashedFilename';
|
|
12
12
|
|
|
13
13
|
const {
|
|
14
14
|
MINIO_ACCESS_KEY,
|
|
@@ -9,39 +9,42 @@ const isAuthorized = ({ authorization = '' }) => {
|
|
|
9
9
|
return type === 'Bearer' && token === MINIO_WEBHOOK_AUTH_TOKEN;
|
|
10
10
|
};
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
12
|
+
export default (app) => {
|
|
13
|
+
useMiddlewareWithCurrentContext(
|
|
14
|
+
app,
|
|
15
|
+
'/minio/',
|
|
16
|
+
bodyParser.json({
|
|
17
|
+
strict: false,
|
|
18
|
+
}),
|
|
19
|
+
);
|
|
18
20
|
|
|
19
|
-
useMiddlewareWithCurrentContext('/minio/', async (req, res) => {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
21
|
+
useMiddlewareWithCurrentContext(app, '/minio/', async (req, res) => {
|
|
22
|
+
try {
|
|
23
|
+
if (req.method === 'POST' && req.body) {
|
|
24
|
+
const { headers } = req;
|
|
25
|
+
const { Records = [], EventName } = req.body;
|
|
26
|
+
if (EventName === 's3:ObjectCreated:Put' && isAuthorized(headers)) {
|
|
27
|
+
const [{ s3 }] = Records;
|
|
28
|
+
const { object } = s3;
|
|
29
|
+
const { size, contentType: type } = object;
|
|
30
|
+
const [fileId] = object.key.split('.');
|
|
31
|
+
const { services } = req.unchainedContext;
|
|
32
|
+
await services.files.linkFile({ fileId, type, size }, req.unchainedContext);
|
|
33
|
+
res.writeHead(200);
|
|
34
|
+
res.end();
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
34
37
|
}
|
|
38
|
+
res.writeHead(404);
|
|
39
|
+
res.end();
|
|
40
|
+
return;
|
|
41
|
+
} catch (e) {
|
|
42
|
+
log(e.message, { level: LogLevel.Error });
|
|
43
|
+
res.writeHead(503);
|
|
44
|
+
res.end(JSON.stringify(e));
|
|
35
45
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
return;
|
|
39
|
-
} catch (e) {
|
|
40
|
-
log(e.message, { level: LogLevel.Error });
|
|
41
|
-
res.writeHead(503);
|
|
42
|
-
res.end(JSON.stringify(e));
|
|
43
|
-
}
|
|
44
|
-
});
|
|
46
|
+
});
|
|
47
|
+
};
|
|
45
48
|
|
|
46
49
|
/*
|
|
47
50
|
|
|
@@ -13,7 +13,7 @@ const logger = createLogger('unchained:core-payment:iap');
|
|
|
13
13
|
const {
|
|
14
14
|
APPLE_IAP_SHARED_SECRET,
|
|
15
15
|
APPLE_IAP_ENVIRONMENT = 'sandbox',
|
|
16
|
-
APPLE_IAP_WEBHOOK_PATH = '/
|
|
16
|
+
APPLE_IAP_WEBHOOK_PATH = '/payment/apple-iap',
|
|
17
17
|
} = process.env;
|
|
18
18
|
|
|
19
19
|
// https://developer.apple.com/documentation/storekit/in-app_purchase/validating_receipts_with_the_app_store
|
|
@@ -88,44 +88,89 @@ const fixPeriods = async (
|
|
|
88
88
|
);
|
|
89
89
|
};
|
|
90
90
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
if (req.method === 'POST') {
|
|
100
|
-
try {
|
|
101
|
-
const resolvedContext = req.unchainedContext as Context;
|
|
102
|
-
const { modules, services } = resolvedContext;
|
|
103
|
-
const responseBody = req.body || {};
|
|
104
|
-
if (responseBody.password !== APPLE_IAP_SHARED_SECRET) {
|
|
105
|
-
throw new Error('shared secret not valid');
|
|
106
|
-
}
|
|
91
|
+
export default (app) => {
|
|
92
|
+
useMiddlewareWithCurrentContext(
|
|
93
|
+
app,
|
|
94
|
+
APPLE_IAP_WEBHOOK_PATH,
|
|
95
|
+
bodyParser.json({
|
|
96
|
+
strict: false,
|
|
97
|
+
}),
|
|
98
|
+
);
|
|
107
99
|
|
|
108
|
-
|
|
109
|
-
|
|
100
|
+
useMiddlewareWithCurrentContext(app, APPLE_IAP_WEBHOOK_PATH, async (req, res) => {
|
|
101
|
+
if (req.method === 'POST') {
|
|
102
|
+
try {
|
|
103
|
+
const resolvedContext = req.unchainedContext as Context;
|
|
104
|
+
const { modules, services } = resolvedContext;
|
|
105
|
+
const responseBody = req.body || {};
|
|
106
|
+
if (responseBody.password !== APPLE_IAP_SHARED_SECRET) {
|
|
107
|
+
throw new Error('shared secret not valid');
|
|
108
|
+
}
|
|
110
109
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
const orderPayment = await modules.orders.payments.findOrderPaymentByContextData({
|
|
114
|
-
context: {
|
|
115
|
-
'meta.transactionIdentifier': latestTransaction.transaction_id,
|
|
116
|
-
},
|
|
117
|
-
});
|
|
110
|
+
const transactions = responseBody?.unified_receipt?.latest_receipt_info; // eslint-disable-line
|
|
111
|
+
const latestTransaction = transactions[0];
|
|
118
112
|
|
|
119
|
-
if (
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
113
|
+
if (responseBody.notification_type === AppleNotificationTypes.INITIAL_BUY) {
|
|
114
|
+
// Find the cart to checkout
|
|
115
|
+
const orderPayment = await modules.orders.payments.findOrderPaymentByContextData({
|
|
116
|
+
context: {
|
|
117
|
+
'meta.transactionIdentifier': latestTransaction.transaction_id,
|
|
118
|
+
},
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
if (!orderPayment) throw new Error('Could not find any matching order payment');
|
|
122
|
+
const order = await modules.orders.findOrder({
|
|
123
|
+
orderId: orderPayment.orderId,
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
if (modules.orders.isCart(order)) {
|
|
127
|
+
// checkout if is cart, else just ignore because the cart is already checked out
|
|
128
|
+
// through submission of the receipt with GraphQL
|
|
129
|
+
const checkedOut = await modules.orders.checkout(
|
|
130
|
+
order._id,
|
|
131
|
+
{
|
|
132
|
+
paymentContext: {
|
|
133
|
+
receiptData: responseBody?.unified_receipt?.latest_receipt, // eslint-disable-line
|
|
134
|
+
},
|
|
135
|
+
},
|
|
136
|
+
resolvedContext,
|
|
137
|
+
);
|
|
138
|
+
const orderId = checkedOut._id;
|
|
139
|
+
const enrollment = await modules.enrollments.findEnrollment({
|
|
140
|
+
orderId,
|
|
141
|
+
});
|
|
142
|
+
await fixPeriods(
|
|
143
|
+
{
|
|
144
|
+
transactionId: latestTransaction.original_transaction_id,
|
|
145
|
+
transactions,
|
|
146
|
+
enrollmentId: enrollment._id,
|
|
147
|
+
orderId,
|
|
148
|
+
},
|
|
149
|
+
resolvedContext,
|
|
150
|
+
);
|
|
123
151
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
152
|
+
logger.info(`Apple IAP Webhook: Confirmed checkout for order ${checkedOut.orderNumber}`, {
|
|
153
|
+
orderId: checkedOut._id,
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
} else {
|
|
157
|
+
// Just store payment credentials, use the enrollments paymentProvider reference and
|
|
158
|
+
// let the job do the rest
|
|
159
|
+
const originalOrderPayment = await modules.orders.payments.findOrderPaymentByContextData({
|
|
160
|
+
context: {
|
|
161
|
+
'meta.transactionIdentifier': latestTransaction.original_transaction_id,
|
|
162
|
+
},
|
|
163
|
+
});
|
|
164
|
+
if (!originalOrderPayment) throw new Error('Could not find any matching order payment');
|
|
165
|
+
const originalOrder = await modules.orders.findOrder({
|
|
166
|
+
orderId: originalOrderPayment.orderId,
|
|
167
|
+
});
|
|
168
|
+
const enrollment = await modules.enrollments.findEnrollment({
|
|
169
|
+
orderId: originalOrder._id,
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
await services.payment.registerPaymentCredentials(
|
|
173
|
+
enrollment.payment.paymentProviderId,
|
|
129
174
|
{
|
|
130
175
|
transactionContext: {
|
|
131
176
|
receiptData: responseBody?.unified_receipt?.latest_receipt, // eslint-disable-line
|
|
@@ -133,97 +178,55 @@ useMiddlewareWithCurrentContext(APPLE_IAP_WEBHOOK_PATH, async (req, res) => {
|
|
|
133
178
|
},
|
|
134
179
|
resolvedContext,
|
|
135
180
|
);
|
|
136
|
-
|
|
137
|
-
const enrollment = await modules.enrollments.findEnrollment({
|
|
138
|
-
orderId,
|
|
139
|
-
});
|
|
181
|
+
|
|
140
182
|
await fixPeriods(
|
|
141
183
|
{
|
|
142
184
|
transactionId: latestTransaction.original_transaction_id,
|
|
143
185
|
transactions,
|
|
144
186
|
enrollmentId: enrollment._id,
|
|
145
|
-
orderId,
|
|
187
|
+
orderId: originalOrder._id,
|
|
146
188
|
},
|
|
147
189
|
resolvedContext,
|
|
148
190
|
);
|
|
149
191
|
|
|
150
|
-
logger.info(
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
}
|
|
154
|
-
} else {
|
|
155
|
-
// Just store payment credentials, use the enrollments paymentProvider reference and
|
|
156
|
-
// let the job do the rest
|
|
157
|
-
const originalOrderPayment = await modules.orders.payments.findOrderPaymentByContextData({
|
|
158
|
-
context: {
|
|
159
|
-
'meta.transactionIdentifier': latestTransaction.original_transaction_id,
|
|
160
|
-
},
|
|
161
|
-
});
|
|
162
|
-
if (!originalOrderPayment) throw new Error('Could not find any matching order payment');
|
|
163
|
-
const originalOrder = await modules.orders.findOrder({
|
|
164
|
-
orderId: originalOrderPayment.orderId,
|
|
165
|
-
});
|
|
166
|
-
const enrollment = await modules.enrollments.findEnrollment({
|
|
167
|
-
orderId: originalOrder._id,
|
|
168
|
-
});
|
|
169
|
-
|
|
170
|
-
await services.payment.registerPaymentCredentials(
|
|
171
|
-
enrollment.payment.paymentProviderId,
|
|
172
|
-
{
|
|
173
|
-
transactionContext: {
|
|
174
|
-
receiptData: responseBody?.unified_receipt?.latest_receipt, // eslint-disable-line
|
|
175
|
-
},
|
|
176
|
-
},
|
|
177
|
-
resolvedContext,
|
|
178
|
-
);
|
|
179
|
-
|
|
180
|
-
await fixPeriods(
|
|
181
|
-
{
|
|
182
|
-
transactionId: latestTransaction.original_transaction_id,
|
|
183
|
-
transactions,
|
|
184
|
-
enrollmentId: enrollment._id,
|
|
185
|
-
orderId: originalOrder._id,
|
|
186
|
-
},
|
|
187
|
-
resolvedContext,
|
|
188
|
-
);
|
|
189
|
-
|
|
190
|
-
logger.info(
|
|
191
|
-
`Apple IAP Webhook: Processed notification for ${latestTransaction.original_transaction_id} and type ${responseBody.notification_type}`,
|
|
192
|
-
);
|
|
192
|
+
logger.info(
|
|
193
|
+
`Apple IAP Webhook: Processed notification for ${latestTransaction.original_transaction_id} and type ${responseBody.notification_type}`,
|
|
194
|
+
);
|
|
193
195
|
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
196
|
+
if (responseBody.notification_type === AppleNotificationTypes.DID_RECOVER) {
|
|
197
|
+
if (
|
|
198
|
+
enrollment.status !== EnrollmentStatus.TERMINATED &&
|
|
199
|
+
responseBody.auto_renew_status === 'false'
|
|
200
|
+
) {
|
|
201
|
+
await modules.enrollments.terminateEnrollment(enrollment, {}, resolvedContext);
|
|
202
|
+
}
|
|
200
203
|
}
|
|
201
|
-
}
|
|
202
204
|
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
205
|
+
if (responseBody.notification_type === AppleNotificationTypes.DID_CHANGE_RENEWAL_STATUS) {
|
|
206
|
+
if (
|
|
207
|
+
enrollment.status !== EnrollmentStatus.TERMINATED &&
|
|
208
|
+
responseBody.auto_renew_status === 'false'
|
|
209
|
+
) {
|
|
210
|
+
await modules.enrollments.terminateEnrollment(enrollment, {}, resolvedContext);
|
|
211
|
+
}
|
|
209
212
|
}
|
|
213
|
+
logger.info(`Apple IAP Webhook: Updated enrollment from Apple`);
|
|
210
214
|
}
|
|
211
|
-
logger.info(`Apple IAP Webhook: Updated enrollment from Apple`);
|
|
212
|
-
}
|
|
213
215
|
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
216
|
+
res.writeHead(200);
|
|
217
|
+
res.end();
|
|
218
|
+
return;
|
|
219
|
+
} catch (e) {
|
|
220
|
+
logger.warn(`Apple IAP Webhook: ${e.message}`, e);
|
|
221
|
+
res.writeHead(503);
|
|
222
|
+
res.end(JSON.stringify(e));
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
222
225
|
}
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
}
|
|
226
|
+
res.writeHead(404);
|
|
227
|
+
res.end();
|
|
228
|
+
});
|
|
229
|
+
};
|
|
227
230
|
|
|
228
231
|
const AppleIAP: IPaymentAdapter = {
|
|
229
232
|
...PaymentAdapter,
|