@social-mail/social-mail-web-server 1.7.320 → 1.7.321
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/server/model/entities/StorePaymentAttempt.d.ts +1 -0
- package/dist/server/model/entities/StorePaymentAttempt.d.ts.map +1 -1
- package/dist/server/model/entities/StorePaymentAttempt.js +15 -1
- package/dist/server/model/entities/StorePaymentAttempt.js.map +1 -1
- package/dist/server/services/store/StorePaymentGatewayService.d.ts.map +1 -1
- package/dist/server/services/store/StorePaymentGatewayService.js +0 -5
- package/dist/server/services/store/StorePaymentGatewayService.js.map +1 -1
- package/dist/server/workflows/daily/DailyWorkflow.d.ts.map +1 -1
- package/dist/server/workflows/daily/DailyWorkflow.js +4 -0
- package/dist/server/workflows/daily/DailyWorkflow.js.map +1 -1
- package/dist/server/workflows/store/FetchCheckoutResultWorkflow.d.ts +3 -4
- package/dist/server/workflows/store/FetchCheckoutResultWorkflow.d.ts.map +1 -1
- package/dist/server/workflows/store/FetchCheckoutResultWorkflow.js +36 -11
- package/dist/server/workflows/store/FetchCheckoutResultWorkflow.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/server/model/entities/StorePaymentAttempt.ts +13 -0
- package/src/server/services/store/StorePaymentGatewayService.ts +0 -5
- package/src/server/workflows/daily/DailyWorkflow.ts +5 -0
- package/src/server/workflows/store/FetchCheckoutResultWorkflow.ts +36 -11
package/package.json
CHANGED
|
@@ -6,8 +6,18 @@ import DateTime from "@entity-access/entity-access/dist/types/DateTime.js";
|
|
|
6
6
|
import { StoreAccount } from "./StoreAccount.js";
|
|
7
7
|
import Sql from "@entity-access/entity-access/dist/sql/Sql.js";
|
|
8
8
|
import StorePaymentGateway from "./StorePaymentGateway.js";
|
|
9
|
+
import Index from "@entity-access/entity-access/dist/decorators/Index.js";
|
|
9
10
|
|
|
10
11
|
@Table("StorePaymentAttempt")
|
|
12
|
+
@Index({
|
|
13
|
+
name: "IX_StorePaymentAttempt_Pending",
|
|
14
|
+
columns: [
|
|
15
|
+
{ name: (x) => x.attemptID, descending: false },
|
|
16
|
+
{ name: (x) => x.timedout, descending: false },
|
|
17
|
+
{ name: (x) => x.success, descending: false }
|
|
18
|
+
],
|
|
19
|
+
filter: (x) => x.timedout === false && x.success === false
|
|
20
|
+
})
|
|
11
21
|
export default class StorePaymentAttempt {
|
|
12
22
|
|
|
13
23
|
@Column({ dataType: "BigInt", key: true, generated: "identity"})
|
|
@@ -47,6 +57,9 @@ export default class StorePaymentAttempt {
|
|
|
47
57
|
@Column({ dataType: "Boolean", default: () => false})
|
|
48
58
|
success: boolean;
|
|
49
59
|
|
|
60
|
+
@Column({ dataType: "Boolean", default: () => false})
|
|
61
|
+
timedout: boolean;
|
|
62
|
+
|
|
50
63
|
order: StoreJournal;
|
|
51
64
|
|
|
52
65
|
gateway: StorePaymentGateway;
|
|
@@ -61,11 +61,6 @@ export default class StorePaymentGatewayService {
|
|
|
61
61
|
|
|
62
62
|
const pg = await LedgerPaymentGateway.for(this, gateway.paymentGateway);
|
|
63
63
|
|
|
64
|
-
await this.context.queue(FetchCheckoutResultWorkflow, { paymentID: pa.attemptID }, {
|
|
65
|
-
id: `fetch-payment-${pa.attemptID}`,
|
|
66
|
-
eta: DateTime.now.addSeconds(60)
|
|
67
|
-
});
|
|
68
|
-
|
|
69
64
|
return await pg.createPayment( host, gateway, order, pa);
|
|
70
65
|
}
|
|
71
66
|
|
|
@@ -12,6 +12,7 @@ import DbLockService from "../../services/db-lock/DbLockService.js";
|
|
|
12
12
|
import PendingPostReceiveWorkflow from "../pending/PendingPostReceiveWorkflow.js";
|
|
13
13
|
import PendingReferencesWorkflow from "../pending/PendingReferencesWorkflow.js";
|
|
14
14
|
import MessagingService from "../../services/message-events/MessagingService.js";
|
|
15
|
+
import FetchCheckoutResultWorkflow from "../store/FetchCheckoutResultWorkflow.js";
|
|
15
16
|
|
|
16
17
|
export default class DailyWorkflow extends Workflow<any,any> {
|
|
17
18
|
|
|
@@ -63,6 +64,10 @@ export default class DailyWorkflow extends Workflow<any,any> {
|
|
|
63
64
|
await SyncMailboxWorkflow.startSyncing(this.context, iterator.syncTargetID);
|
|
64
65
|
}
|
|
65
66
|
|
|
67
|
+
await this.context.queue(FetchCheckoutResultWorkflow, null , {
|
|
68
|
+
id: `fetch-checkout-result-${Date.now()}`
|
|
69
|
+
});
|
|
70
|
+
|
|
66
71
|
// const mbs = await db.mailboxes.where({}, (p) => (x) => x.indexAttachments === true)
|
|
67
72
|
// .select({}, (p) => ({ mailboxID}) => ({ mailboxID }))
|
|
68
73
|
// .toArray();
|
|
@@ -3,28 +3,53 @@ import Workflow, { UniqueActivity } from "@entity-access/entity-access/dist/work
|
|
|
3
3
|
import SocialMailContext from "../../model/SocialMailContext.js";
|
|
4
4
|
import TimeSpan from "@entity-access/entity-access/dist/types/TimeSpan.js";
|
|
5
5
|
import StorePaymentGatewayService from "../../services/store/StorePaymentGatewayService.js";
|
|
6
|
+
import DateTime from "@entity-access/entity-access/dist/types/DateTime.js";
|
|
6
7
|
|
|
7
|
-
export default class FetchCheckoutResultWorkflow extends Workflow
|
|
8
|
+
export default class FetchCheckoutResultWorkflow extends Workflow {
|
|
8
9
|
|
|
9
10
|
async run() {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
this.preserveTime = TimeSpan.fromMinutes(5);
|
|
12
|
+
let start = 0;
|
|
13
|
+
for(;;) {
|
|
14
|
+
start = await this.fetchResult(start);
|
|
15
|
+
if (!BigInt(start)) {
|
|
16
|
+
break;
|
|
14
17
|
}
|
|
15
|
-
await this.delay(TimeSpan.fromSeconds((index + 1) * 5));
|
|
16
18
|
}
|
|
17
19
|
}
|
|
18
20
|
|
|
19
21
|
@UniqueActivity
|
|
20
22
|
async fetchResult(
|
|
21
|
-
|
|
23
|
+
start: number,
|
|
24
|
+
@Inject db?: SocialMailContext,
|
|
22
25
|
@Inject spg?: StorePaymentGatewayService
|
|
23
26
|
) {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
+
for (let index = 0; index < 100; index++) {
|
|
28
|
+
const items = await db.storePaymentAttempts.where({ start }, (p) => (x) => x.attemptID > p.start
|
|
29
|
+
&& x.success === false
|
|
30
|
+
&& x.timedout === false)
|
|
31
|
+
.orderBy(void 0, (p) => (x) => x.attemptID)
|
|
32
|
+
.limit(10)
|
|
33
|
+
.toArray();
|
|
34
|
+
|
|
35
|
+
if (!items.length) {
|
|
36
|
+
return 0;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
for (const item of items) {
|
|
40
|
+
start = item.attemptID;
|
|
41
|
+
const pmt = await spg.checkoutResult(this.input.paymentID);
|
|
42
|
+
if (pmt.success) {
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
const started = DateTime.from(item.dateCreated);
|
|
46
|
+
const yesterday = DateTime.now.addDays(-1);
|
|
47
|
+
if (started.msSinceEpoch < yesterday.msSinceEpoch) {
|
|
48
|
+
await db.storePaymentAttempts.statements.update({ timedout: true }, { attemptID: start });
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
db.changeSet.clear();
|
|
27
52
|
}
|
|
28
|
-
return
|
|
53
|
+
return start;
|
|
29
54
|
}
|
|
30
55
|
}
|