@ercworldio/blockchain-shared 1.0.7 → 1.0.8
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/build/services/db/timelock/ScheduleTransactionService.d.ts +9 -1
- package/build/services/db/timelock/ScheduleTransactionService.d.ts.map +1 -1
- package/build/services/db/timelock/ScheduleTransactionService.js +47 -0
- package/build/services/types/db/timelock.d.ts +17 -0
- package/build/services/types/db/timelock.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -2,7 +2,8 @@ import { ScheduleJobStatus, ScheduleTransactionJob } from "../../../entities/Sch
|
|
|
2
2
|
import { ClaimJobLockMetadata } from "../../types";
|
|
3
3
|
import { Pool } from "pg";
|
|
4
4
|
import { OperationType } from "../../../contracts/types/escrow";
|
|
5
|
-
import {
|
|
5
|
+
import { BlockchainType } from "../../../interfaces";
|
|
6
|
+
import { MarkCompleteScheduleJob, ScheduleTransactionJobWithDetails, ScheduleJobFilters, ScheduleJobListItem, ScheduleJobHistoryFilters, ScheduleJobHistoryItem, ConfirmingScheduleJob } from "../../types/db";
|
|
6
7
|
import { Paginated } from "../../types/claim_job_service";
|
|
7
8
|
import { RequeueJobConfiguration } from "../../types/watchdog";
|
|
8
9
|
declare class ScheduleTransactionService {
|
|
@@ -11,6 +12,13 @@ declare class ScheduleTransactionService {
|
|
|
11
12
|
static get_and_lock_available_jobs_with_details: (pool: Pool, limit?: number, job_ttl_s?: number, lock_metadata?: ClaimJobLockMetadata) => Promise<ScheduleTransactionJobWithDetails[]>;
|
|
12
13
|
/** Locks and returns available jobs with full withdrawal details via DB function. */
|
|
13
14
|
static get_and_lock_available_jobs_with_details_depr: (pool: Pool, limit?: number, job_ttl_s?: number, lock_metadata?: ClaimJobLockMetadata) => Promise<ScheduleTransactionJobWithDetails[]>;
|
|
15
|
+
/**
|
|
16
|
+
* Locks and returns schedule-transaction jobs currently in the "confirming" status for the
|
|
17
|
+
* given blockchain. Unlike the "queued" lockers, this does NOT transition the job's status -
|
|
18
|
+
* the caller decides whether to mark it "completed" or requeue it for retry once the
|
|
19
|
+
* on-chain transaction has been checked.
|
|
20
|
+
*/
|
|
21
|
+
static get_and_lock_confirming_jobs_with_details: (pool: Pool, blockchain: BlockchainType, limit?: number, lock_minutes?: number, lock_metadata?: ClaimJobLockMetadata) => Promise<ConfirmingScheduleJob[]>;
|
|
14
22
|
/**
|
|
15
23
|
* Requeues all jobs in the given status to "queued"
|
|
16
24
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScheduleTransactionService.d.ts","sourceRoot":"","sources":["../../../../src/services/db/timelock/ScheduleTransactionService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAC;AACrG,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EACH,uBAAuB,EACvB,iCAAiC,EACjC,kBAAkB,EAClB,mBAAmB,EACnB,yBAAyB,EACzB,sBAAsB,
|
|
1
|
+
{"version":3,"file":"ScheduleTransactionService.d.ts","sourceRoot":"","sources":["../../../../src/services/db/timelock/ScheduleTransactionService.ts"],"names":[],"mappings":"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"}
|
|
@@ -173,6 +173,53 @@ ScheduleTransactionService.get_and_lock_available_jobs_with_details_depr = (pool
|
|
|
173
173
|
const result = yield pool.query(`SELECT multisig.fn_get_available_schedule_jobs_with_details($1::int, $2::int, $3::text, $4::text)`, [limit, job_ttl_s, lock_metadata.lock_owner, lock_metadata.lock_reason]);
|
|
174
174
|
return (_b = result.rows[0].fn_get_available_schedule_jobs_with_details) !== null && _b !== void 0 ? _b : [];
|
|
175
175
|
});
|
|
176
|
+
/**
|
|
177
|
+
* Locks and returns schedule-transaction jobs currently in the "confirming" status for the
|
|
178
|
+
* given blockchain. Unlike the "queued" lockers, this does NOT transition the job's status -
|
|
179
|
+
* the caller decides whether to mark it "completed" or requeue it for retry once the
|
|
180
|
+
* on-chain transaction has been checked.
|
|
181
|
+
*/
|
|
182
|
+
ScheduleTransactionService.get_and_lock_confirming_jobs_with_details = (pool_1, blockchain_1, ...args_1) => __awaiter(void 0, [pool_1, blockchain_1, ...args_1], void 0, function* (pool, blockchain, limit = 10, lock_minutes = 5, lock_metadata = { lock_owner: "schedule-tx-worker", lock_reason: "confirm-schedule-tx" }) {
|
|
183
|
+
const res = yield pool.query(`
|
|
184
|
+
WITH candidates AS (
|
|
185
|
+
SELECT j.id
|
|
186
|
+
FROM multisig.schedule_transaction_jobs j
|
|
187
|
+
JOIN multisig.schedule_job_statuses sjs ON sjs.id = j.status_id
|
|
188
|
+
WHERE sjs.status = 'confirming'
|
|
189
|
+
AND j.tx_hash IS NOT NULL
|
|
190
|
+
AND j.blockchain = $1
|
|
191
|
+
AND (j.lock_expires_at IS NULL OR j.lock_expires_at < NOW())
|
|
192
|
+
ORDER BY j.sent_at ASC NULLS LAST
|
|
193
|
+
LIMIT $2
|
|
194
|
+
FOR UPDATE SKIP LOCKED
|
|
195
|
+
)
|
|
196
|
+
UPDATE multisig.schedule_transaction_jobs j
|
|
197
|
+
SET
|
|
198
|
+
locked_at = NOW(),
|
|
199
|
+
lock_expires_at = NOW() + ($3 || ' minutes')::INTERVAL,
|
|
200
|
+
metadata = jsonb_set(
|
|
201
|
+
jsonb_set(
|
|
202
|
+
COALESCE(j.metadata, '{}'::jsonb),
|
|
203
|
+
'{lock_owner}', to_jsonb($4::text)
|
|
204
|
+
),
|
|
205
|
+
'{lock_reason}', to_jsonb($5::text)
|
|
206
|
+
),
|
|
207
|
+
updated_at = NOW()
|
|
208
|
+
FROM candidates c
|
|
209
|
+
WHERE j.id = c.id
|
|
210
|
+
RETURNING
|
|
211
|
+
j.id,
|
|
212
|
+
j.request_id AS "requestId",
|
|
213
|
+
j.operation_type AS "operationType",
|
|
214
|
+
j.blockchain,
|
|
215
|
+
j.chain_id AS "chainId",
|
|
216
|
+
j.tx_hash AS "txHash",
|
|
217
|
+
j.sent_at AS "sentAt",
|
|
218
|
+
j.updated_at AS "updatedAt",
|
|
219
|
+
j.retry_count AS "retryCount";
|
|
220
|
+
`, [blockchain, limit, lock_minutes, lock_metadata.lock_owner, lock_metadata.lock_reason]);
|
|
221
|
+
return res.rows;
|
|
222
|
+
});
|
|
176
223
|
/**
|
|
177
224
|
* Requeues all jobs in the given status to "queued"
|
|
178
225
|
*/
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { OperationType } from "../../../contracts/types/escrow";
|
|
2
2
|
import { WithdrawRequestDetails } from "../claim";
|
|
3
3
|
import { ScheduleJobStatus } from "../../../entities/ScheduleTransactionJob";
|
|
4
|
+
import { BlockchainType, ChainId } from "../../../interfaces";
|
|
4
5
|
export interface MarkCompleteScheduleJob {
|
|
5
6
|
requestId: number;
|
|
6
7
|
operationType: OperationType;
|
|
@@ -60,6 +61,22 @@ export interface ScheduleJobHistoryItem {
|
|
|
60
61
|
errorMessage: string | null;
|
|
61
62
|
createdAt: Date;
|
|
62
63
|
}
|
|
64
|
+
/**
|
|
65
|
+
* A schedule_transaction_jobs row locked for confirmation checking. Slimmer than
|
|
66
|
+
* ScheduleTransactionJobWithDetails - confirming a tx only needs enough to check the
|
|
67
|
+
* chain and report the outcome back for that request/operation.
|
|
68
|
+
*/
|
|
69
|
+
export interface ConfirmingScheduleJob {
|
|
70
|
+
id: number;
|
|
71
|
+
requestId: number;
|
|
72
|
+
operationType: OperationType;
|
|
73
|
+
blockchain: BlockchainType;
|
|
74
|
+
chainId: ChainId;
|
|
75
|
+
txHash: string;
|
|
76
|
+
sentAt: string | null;
|
|
77
|
+
updatedAt: string;
|
|
78
|
+
retryCount: number;
|
|
79
|
+
}
|
|
63
80
|
export interface ScheduleTransactionJobWithDetails {
|
|
64
81
|
id: number;
|
|
65
82
|
requestId: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timelock.d.ts","sourceRoot":"","sources":["../../../../src/services/types/db/timelock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;
|
|
1
|
+
{"version":3,"file":"timelock.d.ts","sourceRoot":"","sources":["../../../../src/services/types/db/timelock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9D,MAAM,WAAW,uBAAuB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,aAAa,CAAC;CAChC;AAED,4EAA4E;AAC5E,MAAM,WAAW,kBAAkB;IAC/B,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qFAAqF;AACrF,MAAM,WAAW,mBAAmB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,aAAa,CAAC;IAC7B,MAAM,EAAE,iBAAiB,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;IACtB,aAAa,EAAE,IAAI,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,IAAI,GAAG,IAAI,CAAC;IACpB,WAAW,EAAE,IAAI,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,IAAI,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACzC,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAEhB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,uEAAuE;AACvE,MAAM,WAAW,yBAAyB;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,mEAAmE;AACnE,MAAM,WAAW,sBAAsB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,aAAa,CAAC;IAC7B,MAAM,EAAE,iBAAiB,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,IAAI,CAAC;CACnB;AAED;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,aAAa,CAAC;IAC7B,UAAU,EAAE,cAAc,CAAC;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iCAAiC;IAC9C,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,aAAa,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,sBAAsB,GAAG,IAAI,CAAC;CACpD"}
|