@layerzerolabs/gated-transaction 0.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/.turbo/turbo-build.log +46 -0
- package/.turbo/turbo-lint.log +4 -0
- package/.turbo/turbo-test.log +14 -0
- package/dist/5INFRBMB.js +14 -0
- package/dist/5INFRBMB.js.map +1 -0
- package/dist/AYIRG6WY.cjs +17 -0
- package/dist/AYIRG6WY.cjs.map +1 -0
- package/dist/BSVO6MXQ.cjs +84 -0
- package/dist/BSVO6MXQ.cjs.map +1 -0
- package/dist/GLQGPA3F.js +74 -0
- package/dist/GLQGPA3F.js.map +1 -0
- package/dist/PQPGPKJO.js +174 -0
- package/dist/PQPGPKJO.js.map +1 -0
- package/dist/UQ2RA5VK.cjs +181 -0
- package/dist/UQ2RA5VK.cjs.map +1 -0
- package/dist/VUOMXK5T.js +6 -0
- package/dist/VUOMXK5T.js.map +1 -0
- package/dist/YJF4D23A.cjs +8 -0
- package/dist/YJF4D23A.cjs.map +1 -0
- package/dist/gatedTx.cjs +17 -0
- package/dist/gatedTx.cjs.map +1 -0
- package/dist/gatedTx.d.ts +21 -0
- package/dist/gatedTx.d.ts.map +1 -0
- package/dist/gatedTx.js +4 -0
- package/dist/gatedTx.js.map +1 -0
- package/dist/index.cjs +47 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/resolver.cjs +19 -0
- package/dist/resolver.cjs.map +1 -0
- package/dist/resolver.d.ts +25 -0
- package/dist/resolver.d.ts.map +1 -0
- package/dist/resolver.js +6 -0
- package/dist/resolver.js.map +1 -0
- package/dist/types.cjs +29 -0
- package/dist/types.cjs.map +1 -0
- package/dist/types.d.ts +143 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +4 -0
- package/dist/types.js.map +1 -0
- package/package.json +45 -0
- package/src/gatedTx.ts +37 -0
- package/src/index.ts +3 -0
- package/src/resolver.ts +311 -0
- package/src/types.ts +213 -0
- package/test/resolver.test.ts +250 -0
- package/tsconfig.json +28 -0
- package/tsup.config.ts +8 -0
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
|
|
2
|
+
> @layerzerolabs/gated-transaction@0.0.0 build /home/runner/work/monorepo-internal/monorepo-internal/packages/gated-transaction
|
|
3
|
+
> tsup
|
|
4
|
+
|
|
5
|
+
[34mCLI[39m Building entry: src/gatedTx.ts, src/index.ts, src/resolver.ts, src/types.ts
|
|
6
|
+
[34mCLI[39m Using tsconfig: tsconfig.json
|
|
7
|
+
[34mCLI[39m tsup v8.4.0
|
|
8
|
+
[34mCLI[39m Using tsup config: /home/runner/work/monorepo-internal/monorepo-internal/packages/gated-transaction/tsup.config.ts
|
|
9
|
+
[34mCLI[39m Target: es2022
|
|
10
|
+
[34mCLI[39m Cleaning output folder
|
|
11
|
+
[34mCJS[39m Build start
|
|
12
|
+
[34mESM[39m Build start
|
|
13
|
+
[32mESM[39m [1mdist/gatedTx.js [22m[32m180.00 B[39m
|
|
14
|
+
[32mESM[39m [1mdist/index.js [22m[32m441.00 B[39m
|
|
15
|
+
[32mESM[39m [1mdist/5INFRBMB.js [22m[32m616.00 B[39m
|
|
16
|
+
[32mESM[39m [1mdist/resolver.js [22m[32m238.00 B[39m
|
|
17
|
+
[32mESM[39m [1mdist/types.js [22m[32m263.00 B[39m
|
|
18
|
+
[32mESM[39m [1mdist/VUOMXK5T.js [22m[32m222.00 B[39m
|
|
19
|
+
[32mESM[39m [1mdist/GLQGPA3F.js [22m[32m2.39 KB[39m
|
|
20
|
+
[32mESM[39m [1mdist/PQPGPKJO.js [22m[32m6.16 KB[39m
|
|
21
|
+
[32mESM[39m [1mdist/gatedTx.js.map [22m[32m71.00 B[39m
|
|
22
|
+
[32mESM[39m [1mdist/index.js.map [22m[32m69.00 B[39m
|
|
23
|
+
[32mESM[39m [1mdist/5INFRBMB.js.map [22m[32m1.97 KB[39m
|
|
24
|
+
[32mESM[39m [1mdist/resolver.js.map [22m[32m72.00 B[39m
|
|
25
|
+
[32mESM[39m [1mdist/types.js.map [22m[32m69.00 B[39m
|
|
26
|
+
[32mESM[39m [1mdist/VUOMXK5T.js.map [22m[32m72.00 B[39m
|
|
27
|
+
[32mESM[39m [1mdist/PQPGPKJO.js.map [22m[32m17.05 KB[39m
|
|
28
|
+
[32mESM[39m [1mdist/GLQGPA3F.js.map [22m[32m9.49 KB[39m
|
|
29
|
+
[32mESM[39m ⚡️ Build success in 204ms
|
|
30
|
+
[32mCJS[39m [1mdist/gatedTx.cjs [22m[32m474.00 B[39m
|
|
31
|
+
[32mCJS[39m [1mdist/index.cjs [22m[32m1.64 KB[39m
|
|
32
|
+
[32mCJS[39m [1mdist/resolver.cjs [22m[32m546.00 B[39m
|
|
33
|
+
[32mCJS[39m [1mdist/AYIRG6WY.cjs [22m[32m725.00 B[39m
|
|
34
|
+
[32mCJS[39m [1mdist/types.cjs [22m[32m950.00 B[39m
|
|
35
|
+
[32mCJS[39m [1mdist/BSVO6MXQ.cjs [22m[32m3.31 KB[39m
|
|
36
|
+
[32mCJS[39m [1mdist/UQ2RA5VK.cjs [22m[32m6.64 KB[39m
|
|
37
|
+
[32mCJS[39m [1mdist/YJF4D23A.cjs [22m[32m245.00 B[39m
|
|
38
|
+
[32mCJS[39m [1mdist/gatedTx.cjs.map [22m[32m72.00 B[39m
|
|
39
|
+
[32mCJS[39m [1mdist/index.cjs.map [22m[32m70.00 B[39m
|
|
40
|
+
[32mCJS[39m [1mdist/resolver.cjs.map [22m[32m73.00 B[39m
|
|
41
|
+
[32mCJS[39m [1mdist/AYIRG6WY.cjs.map [22m[32m1.98 KB[39m
|
|
42
|
+
[32mCJS[39m [1mdist/types.cjs.map [22m[32m70.00 B[39m
|
|
43
|
+
[32mCJS[39m [1mdist/BSVO6MXQ.cjs.map [22m[32m9.55 KB[39m
|
|
44
|
+
[32mCJS[39m [1mdist/UQ2RA5VK.cjs.map [22m[32m17.08 KB[39m
|
|
45
|
+
[32mCJS[39m [1mdist/YJF4D23A.cjs.map [22m[32m73.00 B[39m
|
|
46
|
+
[32mCJS[39m ⚡️ Build success in 205ms
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
|
|
2
|
+
> @layerzerolabs/gated-transaction@0.0.0 test /home/runner/work/monorepo-internal/monorepo-internal/packages/gated-transaction
|
|
3
|
+
> vitest --run --pass-with-no-tests
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
[1m[46m RUN [49m[22m [36mv3.2.3 [39m[90m/home/runner/work/monorepo-internal/monorepo-internal/packages/gated-transaction[39m
|
|
7
|
+
|
|
8
|
+
[32m✓[39m test/resolver.test.ts [2m([22m[2m7 tests[22m[2m)[22m[33m 311[2mms[22m[39m
|
|
9
|
+
|
|
10
|
+
[2m Test Files [22m [1m[32m1 passed[39m[22m[90m (1)[39m
|
|
11
|
+
[2m Tests [22m [1m[32m7 passed[39m[22m[90m (7)[39m
|
|
12
|
+
[2m Start at [22m 18:50:26
|
|
13
|
+
[2m Duration [22m 830ms[2m (transform 94ms, setup 0ms, collect 163ms, tests 311ms, environment 0ms, prepare 131ms)[22m
|
|
14
|
+
|
package/dist/5INFRBMB.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { __name } from './VUOMXK5T.js';
|
|
2
|
+
|
|
3
|
+
// src/gatedTx.ts
|
|
4
|
+
var constructGatedTransaction = /* @__PURE__ */ __name((gtx) => {
|
|
5
|
+
return gtx;
|
|
6
|
+
}, "constructGatedTransaction");
|
|
7
|
+
var getIdForGatedTransaction = /* @__PURE__ */ __name((gtx) => {
|
|
8
|
+
const serializedUniqueIdKeys = gtx.uniqueIdKeys ? Object.entries(gtx.uniqueIdKeys).map(([k, v]) => `${k}:${v}`).join("-") : "";
|
|
9
|
+
return `${gtx.name}-${gtx.transaction.chainName}-${serializedUniqueIdKeys}`;
|
|
10
|
+
}, "getIdForGatedTransaction");
|
|
11
|
+
|
|
12
|
+
export { constructGatedTransaction, getIdForGatedTransaction };
|
|
13
|
+
//# sourceMappingURL=5INFRBMB.js.map
|
|
14
|
+
//# sourceMappingURL=5INFRBMB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/gatedTx.ts"],"names":["constructGatedTransaction","gtx","getIdForGatedTransaction","serializedUniqueIdKeys","uniqueIdKeys","Object","entries","map","k","v","join","name","transaction","chainName"],"mappings":";;;AAQO,IAAMA,yBAAAA,2BAIXC,GAAAA,KAAAA;AAaE,EAAA,OAAOA,GAAAA;AACX,CAAA,EAlByC,2BAAA;AAoBlC,IAAMC,wBAAAA,2BAA4BD,GAAAA,KAAAA;AACrC,EAAA,MAAME,sBAAAA,GAAyBF,IAAIG,YAAAA,GAC7BC,MAAAA,CAAOC,QAAQL,GAAAA,CAAIG,YAAY,CAAA,CAC1BG,GAAAA,CAAI,CAAC,CAACC,GAAGC,CAAAA,CAAAA,KAAO,GAAGD,CAAAA,CAAAA,CAAAA,EAAKC,CAAAA,CAAAA,CAAG,CAAA,CAC3BC,IAAAA,CAAK,GAAA,CAAA,GACV,EAAA;AAEN,EAAA,OAAO,CAAA,EAAGT,IAAIU,IAAI,CAAA,CAAA,EAAIV,IAAIW,WAAAA,CAAYC,SAAS,IAAIV,sBAAAA,CAAAA,CAAAA;AACvD,CAAA,EARwC,0BAAA","file":"5INFRBMB.js","sourcesContent":["import type { Transaction } from '@layerzerolabs/common-chain-model';\nimport type { FunctionPointer } from '@layerzerolabs/common-utils';\n\nimport type { GatedTransaction, GatedTransactionId, OnChainDataComparison } from './types';\n\n/**\n * Builds a {@link GatedTransaction}\n */\nexport const constructGatedTransaction = <\n const Name extends string,\n Tx extends Transaction,\n Method extends (...args: any[]) => any,\n>(gtx: {\n name: Name;\n bundleName?: string;\n transaction: Tx;\n check: {\n functionPointer: FunctionPointer<Method>;\n params: Parameters<Method>;\n expectedResult: OnChainDataComparison<Awaited<ReturnType<Method>>>;\n };\n uniqueIdKeys?: Record<string, string | number | boolean>;\n cacheable?: boolean;\n dependencies?: GatedTransaction[];\n}): GatedTransaction<Name, Tx, Method> => {\n return gtx;\n};\n\nexport const getIdForGatedTransaction = (gtx: GatedTransaction): GatedTransactionId => {\n const serializedUniqueIdKeys = gtx.uniqueIdKeys\n ? Object.entries(gtx.uniqueIdKeys)\n .map(([k, v]) => `${k}:${v}`)\n .join('-')\n : '';\n\n return `${gtx.name}-${gtx.transaction.chainName}-${serializedUniqueIdKeys}`;\n};\n"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var YJF4D23A_cjs = require('./YJF4D23A.cjs');
|
|
4
|
+
|
|
5
|
+
// src/gatedTx.ts
|
|
6
|
+
var constructGatedTransaction = /* @__PURE__ */ YJF4D23A_cjs.__name((gtx) => {
|
|
7
|
+
return gtx;
|
|
8
|
+
}, "constructGatedTransaction");
|
|
9
|
+
var getIdForGatedTransaction = /* @__PURE__ */ YJF4D23A_cjs.__name((gtx) => {
|
|
10
|
+
const serializedUniqueIdKeys = gtx.uniqueIdKeys ? Object.entries(gtx.uniqueIdKeys).map(([k, v]) => `${k}:${v}`).join("-") : "";
|
|
11
|
+
return `${gtx.name}-${gtx.transaction.chainName}-${serializedUniqueIdKeys}`;
|
|
12
|
+
}, "getIdForGatedTransaction");
|
|
13
|
+
|
|
14
|
+
exports.constructGatedTransaction = constructGatedTransaction;
|
|
15
|
+
exports.getIdForGatedTransaction = getIdForGatedTransaction;
|
|
16
|
+
//# sourceMappingURL=AYIRG6WY.cjs.map
|
|
17
|
+
//# sourceMappingURL=AYIRG6WY.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/gatedTx.ts"],"names":["constructGatedTransaction","gtx","getIdForGatedTransaction","serializedUniqueIdKeys","uniqueIdKeys","Object","entries","map","k","v","join","name","transaction","chainName"],"mappings":";;;;;AAQO,IAAMA,yBAAAA,wCAIXC,GAAAA,KAAAA;AAaE,EAAA,OAAOA,GAAAA;AACX,CAAA,EAlByC,2BAAA;AAoBlC,IAAMC,wBAAAA,wCAA4BD,GAAAA,KAAAA;AACrC,EAAA,MAAME,sBAAAA,GAAyBF,IAAIG,YAAAA,GAC7BC,MAAAA,CAAOC,QAAQL,GAAAA,CAAIG,YAAY,CAAA,CAC1BG,GAAAA,CAAI,CAAC,CAACC,GAAGC,CAAAA,CAAAA,KAAO,GAAGD,CAAAA,CAAAA,CAAAA,EAAKC,CAAAA,CAAAA,CAAG,CAAA,CAC3BC,IAAAA,CAAK,GAAA,CAAA,GACV,EAAA;AAEN,EAAA,OAAO,CAAA,EAAGT,IAAIU,IAAI,CAAA,CAAA,EAAIV,IAAIW,WAAAA,CAAYC,SAAS,IAAIV,sBAAAA,CAAAA,CAAAA;AACvD,CAAA,EARwC,0BAAA","file":"AYIRG6WY.cjs","sourcesContent":["import type { Transaction } from '@layerzerolabs/common-chain-model';\nimport type { FunctionPointer } from '@layerzerolabs/common-utils';\n\nimport type { GatedTransaction, GatedTransactionId, OnChainDataComparison } from './types';\n\n/**\n * Builds a {@link GatedTransaction}\n */\nexport const constructGatedTransaction = <\n const Name extends string,\n Tx extends Transaction,\n Method extends (...args: any[]) => any,\n>(gtx: {\n name: Name;\n bundleName?: string;\n transaction: Tx;\n check: {\n functionPointer: FunctionPointer<Method>;\n params: Parameters<Method>;\n expectedResult: OnChainDataComparison<Awaited<ReturnType<Method>>>;\n };\n uniqueIdKeys?: Record<string, string | number | boolean>;\n cacheable?: boolean;\n dependencies?: GatedTransaction[];\n}): GatedTransaction<Name, Tx, Method> => {\n return gtx;\n};\n\nexport const getIdForGatedTransaction = (gtx: GatedTransaction): GatedTransactionId => {\n const serializedUniqueIdKeys = gtx.uniqueIdKeys\n ? Object.entries(gtx.uniqueIdKeys)\n .map(([k, v]) => `${k}:${v}`)\n .join('-')\n : '';\n\n return `${gtx.name}-${gtx.transaction.chainName}-${serializedUniqueIdKeys}`;\n};\n"]}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var YJF4D23A_cjs = require('./YJF4D23A.cjs');
|
|
4
|
+
var z = require('zod/v4');
|
|
5
|
+
var zodUtils = require('@layerzerolabs/zod-utils');
|
|
6
|
+
|
|
7
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
8
|
+
|
|
9
|
+
var z__default = /*#__PURE__*/_interopDefault(z);
|
|
10
|
+
|
|
11
|
+
var gatedTransactionSchema = /* @__PURE__ */ YJF4D23A_cjs.__name(({ transactionSchema, name }) => z__default.default.object({
|
|
12
|
+
name,
|
|
13
|
+
transaction: transactionSchema,
|
|
14
|
+
check: z__default.default.object({
|
|
15
|
+
functionPointer: z__default.default.any(),
|
|
16
|
+
params: z__default.default.array(z__default.default.any()),
|
|
17
|
+
expectedResult: z__default.default.object({
|
|
18
|
+
operator: z__default.default.custom(),
|
|
19
|
+
comparisonValue: z__default.default.any()
|
|
20
|
+
})
|
|
21
|
+
})
|
|
22
|
+
}), "gatedTransactionSchema");
|
|
23
|
+
var gatedTransactionResultSchema = /* @__PURE__ */ YJF4D23A_cjs.__name((transactionSchema, onchainDataSchema) => z__default.default.union([
|
|
24
|
+
z__default.default.object({
|
|
25
|
+
status: z__default.default.literal("no_op")
|
|
26
|
+
}),
|
|
27
|
+
z__default.default.object({
|
|
28
|
+
status: z__default.default.literal("success"),
|
|
29
|
+
submittedTransaction: transactionSchema
|
|
30
|
+
}),
|
|
31
|
+
z__default.default.object({
|
|
32
|
+
status: z__default.default.literal("transaction_failed"),
|
|
33
|
+
transactionError: z__default.default.any()
|
|
34
|
+
}),
|
|
35
|
+
z__default.default.object({
|
|
36
|
+
status: z__default.default.literal("final_check_failed"),
|
|
37
|
+
submittedTransaction: transactionSchema,
|
|
38
|
+
finalOnChainState: onchainDataSchema
|
|
39
|
+
}),
|
|
40
|
+
z__default.default.object({
|
|
41
|
+
status: z__default.default.literal("dependency_failed")
|
|
42
|
+
}),
|
|
43
|
+
z__default.default.object({
|
|
44
|
+
status: z__default.default.literal("denied")
|
|
45
|
+
})
|
|
46
|
+
]), "gatedTransactionResultSchema");
|
|
47
|
+
var processedGatedTransactionSchema = /* @__PURE__ */ YJF4D23A_cjs.__name(({ transactionSchema, onchainDataSchema, name }) => gatedTransactionSchema({
|
|
48
|
+
transactionSchema,
|
|
49
|
+
name
|
|
50
|
+
}).and(z__default.default.object({
|
|
51
|
+
result: gatedTransactionResultSchema(transactionSchema, onchainDataSchema)
|
|
52
|
+
})), "processedGatedTransactionSchema");
|
|
53
|
+
var GatedTransactionStatus = /* @__PURE__ */ function(GatedTransactionStatus2) {
|
|
54
|
+
GatedTransactionStatus2["NO_OP"] = "no_op";
|
|
55
|
+
GatedTransactionStatus2["SUCCESS"] = "success";
|
|
56
|
+
GatedTransactionStatus2["TRANSACTION_FAILED"] = "transaction_failed";
|
|
57
|
+
GatedTransactionStatus2["FINAL_CHECK_FAILED"] = "final_check_failed";
|
|
58
|
+
GatedTransactionStatus2["DEPENDENCY_FAILED"] = "dependency_failed";
|
|
59
|
+
GatedTransactionStatus2["DENIED"] = "denied";
|
|
60
|
+
return GatedTransactionStatus2;
|
|
61
|
+
}({});
|
|
62
|
+
var gatedTransactionCacheSchema = z__default.default.object({
|
|
63
|
+
getCachedTxCheckData: zodUtils.functionSchema({
|
|
64
|
+
input: z__default.default.tuple([
|
|
65
|
+
z__default.default.any()
|
|
66
|
+
]),
|
|
67
|
+
output: z__default.default.promise(z__default.default.any())
|
|
68
|
+
}),
|
|
69
|
+
cacheSuccessfulTxCheckData: zodUtils.functionSchema({
|
|
70
|
+
input: z__default.default.tuple([
|
|
71
|
+
z__default.default.any(),
|
|
72
|
+
z__default.default.any()
|
|
73
|
+
]),
|
|
74
|
+
output: z__default.default.promise(z__default.default.any())
|
|
75
|
+
})
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
exports.GatedTransactionStatus = GatedTransactionStatus;
|
|
79
|
+
exports.gatedTransactionCacheSchema = gatedTransactionCacheSchema;
|
|
80
|
+
exports.gatedTransactionResultSchema = gatedTransactionResultSchema;
|
|
81
|
+
exports.gatedTransactionSchema = gatedTransactionSchema;
|
|
82
|
+
exports.processedGatedTransactionSchema = processedGatedTransactionSchema;
|
|
83
|
+
//# sourceMappingURL=BSVO6MXQ.cjs.map
|
|
84
|
+
//# sourceMappingURL=BSVO6MXQ.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/types.ts"],"names":["gatedTransactionSchema","__name","transactionSchema","name","z","object","transaction","check","functionPointer","any","params","array","expectedResult","operator","custom","comparisonValue","gatedTransactionResultSchema","onchainDataSchema","union","status","literal","submittedTransaction","transactionError","finalOnChainState","processedGatedTransactionSchema","and","result","GatedTransactionStatus","gatedTransactionCacheSchema","getCachedTxCheckData","functionSchema","input","tuple","output","promise","cacheSuccessfulTxCheckData"],"mappings":"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","file":"BSVO6MXQ.cjs","sourcesContent":["import z from 'zod/v4';\n\nimport type {\n Transaction,\n transactionSchema as _transactionSchema,\n} from '@layerzerolabs/common-chain-model';\nimport type { FunctionPointer } from '@layerzerolabs/common-utils';\nimport { functionSchema } from '@layerzerolabs/zod-utils';\n\nexport type OnChainDataComparisonOperator<OnChainDataType> = OnChainDataType extends number\n ? '<' | '<=' | '=' | '!=' | '>' | '>='\n : '=' | '!=';\n\nexport type OnChainDataComparison<OnChainDataType> = {\n operator: OnChainDataComparisonOperator<OnChainDataType>;\n comparisonValue: OnChainDataType;\n};\n\nexport type GatedTransactionCheck<\n Method extends (...args: any[]) => any = (...args: any[]) => unknown,\n> = {\n functionPointer: FunctionPointer<Method>;\n params: any[];\n expectedResult: OnChainDataComparison<Awaited<ReturnType<Method>>>;\n};\n\nexport const gatedTransactionSchema = <TransactionSchema extends typeof _transactionSchema>({\n transactionSchema,\n name,\n}: {\n transactionSchema: TransactionSchema;\n name: z.ZodString | z.ZodLiteral<string>;\n}) =>\n z.object({\n name,\n transaction: transactionSchema,\n check: z.object({\n functionPointer: z.any(),\n params: z.array(z.any()),\n expectedResult: z.object({\n operator: z.custom<OnChainDataComparisonOperator<any>>(),\n comparisonValue: z.any(),\n }),\n }),\n });\n\n// Schema for gated transaction results\nexport const gatedTransactionResultSchema = <\n TransactionSchema extends typeof _transactionSchema,\n OnchainDataSchema extends z.ZodType,\n>(\n transactionSchema: TransactionSchema,\n onchainDataSchema: OnchainDataSchema,\n) =>\n z.union([\n z.object({\n status: z.literal(GatedTransactionStatus.NO_OP),\n }),\n z.object({\n status: z.literal(GatedTransactionStatus.SUCCESS),\n submittedTransaction: transactionSchema,\n }),\n z.object({\n status: z.literal(GatedTransactionStatus.TRANSACTION_FAILED),\n transactionError: z.any(),\n }),\n z.object({\n status: z.literal(GatedTransactionStatus.FINAL_CHECK_FAILED),\n submittedTransaction: transactionSchema,\n finalOnChainState: onchainDataSchema,\n }),\n z.object({\n status: z.literal(GatedTransactionStatus.DEPENDENCY_FAILED),\n }),\n z.object({\n status: z.literal(GatedTransactionStatus.DENIED),\n }),\n ]);\n\n// Schema for processed gated transactions (with results)\nexport const processedGatedTransactionSchema = <\n TransactionSchema extends typeof _transactionSchema,\n OnchainDataSchema extends z.ZodType,\n>({\n transactionSchema,\n onchainDataSchema,\n name,\n}: {\n transactionSchema: TransactionSchema;\n onchainDataSchema: OnchainDataSchema;\n name: z.ZodString | z.ZodLiteral<string>;\n}) =>\n gatedTransactionSchema({\n transactionSchema,\n name,\n }).and(\n z.object({\n result: gatedTransactionResultSchema(transactionSchema, onchainDataSchema),\n }),\n );\n\ntype GatedTransactionDependencies = GatedTransaction[];\n\nexport type GatedTransaction<\n Name extends string = string,\n TxType extends Transaction = Transaction,\n CheckMethod extends (...args: any[]) => any = (...args: any[]) => any,\n Dependencies extends GatedTransactionDependencies = GatedTransactionDependencies,\n> = {\n bundleName?: string;\n name: Name;\n transaction: TxType;\n check: GatedTransactionCheck<CheckMethod>;\n cacheable?: boolean;\n uniqueIdKeys?: Record<string, string | number | boolean>;\n dependencies?: Dependencies;\n};\n\nexport type ProcessedGatedTransaction<\n Name extends string = string,\n TxType extends Transaction = Transaction,\n CheckMethod extends (...args: any[]) => any = (...args: any[]) => any,\n> = GatedTransaction<Name, TxType, CheckMethod> & {\n result: GatedTransactionResult<GatedTransaction<Name, TxType, CheckMethod>, TxType>;\n};\n\nexport type InferOnChainDataTypeFromGatedTransaction<GatedTx extends GatedTransaction> =\n GatedTx extends GatedTransaction<any, any, infer Check> ? Awaited<ReturnType<Check>> : unknown;\n\nexport enum GatedTransactionStatus {\n NO_OP = 'no_op',\n SUCCESS = 'success',\n TRANSACTION_FAILED = 'transaction_failed',\n FINAL_CHECK_FAILED = 'final_check_failed',\n DEPENDENCY_FAILED = 'dependency_failed',\n DENIED = 'denied',\n}\n\ntype NoOpGatedTransaction = {\n status: GatedTransactionStatus.NO_OP;\n};\n\ntype SuccessfulGatedTransaction<ProcessedTx extends Transaction> = {\n status: GatedTransactionStatus.SUCCESS;\n submittedTransaction: ProcessedTx;\n};\n\ntype TxFailedGatedTransaction = {\n status: GatedTransactionStatus.TRANSACTION_FAILED;\n transactionError: any;\n};\n\ntype CheckFailedGatedTransaction<ProcessedTx extends Transaction, State> = {\n status: GatedTransactionStatus.FINAL_CHECK_FAILED;\n submittedTransaction: ProcessedTx;\n finalOnChainState: State;\n};\n\ntype DependencyFailedGatedTransaction = {\n status: GatedTransactionStatus.DEPENDENCY_FAILED;\n};\n\ntype DeniedGatedTransaction = {\n status: GatedTransactionStatus.DENIED;\n};\n\nexport type GatedTransactionResult<\n GatedTx extends GatedTransaction = GatedTransaction,\n ProcessedTxType extends Transaction = Transaction,\n> =\n | NoOpGatedTransaction\n | SuccessfulGatedTransaction<ProcessedTxType>\n | TxFailedGatedTransaction\n | CheckFailedGatedTransaction<\n ProcessedTxType,\n InferOnChainDataTypeFromGatedTransaction<GatedTx>\n >\n | DependencyFailedGatedTransaction\n | DeniedGatedTransaction;\n\nexport const gatedTransactionCacheSchema = z.object({\n getCachedTxCheckData: functionSchema({\n input: z.tuple([z.any()]),\n output: z.promise(z.any()),\n }) as z.ZodType<\n <GatedTx extends GatedTransaction>(\n gtx: GatedTx,\n ) => Promise<InferOnChainDataTypeFromGatedTransaction<GatedTx> | undefined>\n >,\n cacheSuccessfulTxCheckData: functionSchema({\n input: z.tuple([z.any(), z.any()]),\n output: z.promise(z.any()),\n }) as z.ZodType<\n <GatedTx extends GatedTransaction>(\n gtx: GatedTx,\n data: InferOnChainDataTypeFromGatedTransaction<GatedTx>,\n ) => Promise<void>\n >,\n});\n\nexport type IGatedTransactionCache = z.infer<typeof gatedTransactionCacheSchema>;\n\n/**\n * name-chain-uniqueIdKeys\n *\n * E.g., setDelegate-ethereum-oAppAddress:0xMY_OAPP\n */\nexport type GatedTransactionId = `${string}-${string}-${string}`;\n\nexport type UserInteractionCallbacks = {\n confirmationCallback?: (gtx: GatedTransaction) => Promise<boolean>;\n onResultCallback?: (result: GatedTransaction & { result: GatedTransactionResult }) => void;\n};\n"]}
|
package/dist/GLQGPA3F.js
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { __name } from './VUOMXK5T.js';
|
|
2
|
+
import z from 'zod/v4';
|
|
3
|
+
import { functionSchema } from '@layerzerolabs/zod-utils';
|
|
4
|
+
|
|
5
|
+
var gatedTransactionSchema = /* @__PURE__ */ __name(({ transactionSchema, name }) => z.object({
|
|
6
|
+
name,
|
|
7
|
+
transaction: transactionSchema,
|
|
8
|
+
check: z.object({
|
|
9
|
+
functionPointer: z.any(),
|
|
10
|
+
params: z.array(z.any()),
|
|
11
|
+
expectedResult: z.object({
|
|
12
|
+
operator: z.custom(),
|
|
13
|
+
comparisonValue: z.any()
|
|
14
|
+
})
|
|
15
|
+
})
|
|
16
|
+
}), "gatedTransactionSchema");
|
|
17
|
+
var gatedTransactionResultSchema = /* @__PURE__ */ __name((transactionSchema, onchainDataSchema) => z.union([
|
|
18
|
+
z.object({
|
|
19
|
+
status: z.literal("no_op")
|
|
20
|
+
}),
|
|
21
|
+
z.object({
|
|
22
|
+
status: z.literal("success"),
|
|
23
|
+
submittedTransaction: transactionSchema
|
|
24
|
+
}),
|
|
25
|
+
z.object({
|
|
26
|
+
status: z.literal("transaction_failed"),
|
|
27
|
+
transactionError: z.any()
|
|
28
|
+
}),
|
|
29
|
+
z.object({
|
|
30
|
+
status: z.literal("final_check_failed"),
|
|
31
|
+
submittedTransaction: transactionSchema,
|
|
32
|
+
finalOnChainState: onchainDataSchema
|
|
33
|
+
}),
|
|
34
|
+
z.object({
|
|
35
|
+
status: z.literal("dependency_failed")
|
|
36
|
+
}),
|
|
37
|
+
z.object({
|
|
38
|
+
status: z.literal("denied")
|
|
39
|
+
})
|
|
40
|
+
]), "gatedTransactionResultSchema");
|
|
41
|
+
var processedGatedTransactionSchema = /* @__PURE__ */ __name(({ transactionSchema, onchainDataSchema, name }) => gatedTransactionSchema({
|
|
42
|
+
transactionSchema,
|
|
43
|
+
name
|
|
44
|
+
}).and(z.object({
|
|
45
|
+
result: gatedTransactionResultSchema(transactionSchema, onchainDataSchema)
|
|
46
|
+
})), "processedGatedTransactionSchema");
|
|
47
|
+
var GatedTransactionStatus = /* @__PURE__ */ function(GatedTransactionStatus2) {
|
|
48
|
+
GatedTransactionStatus2["NO_OP"] = "no_op";
|
|
49
|
+
GatedTransactionStatus2["SUCCESS"] = "success";
|
|
50
|
+
GatedTransactionStatus2["TRANSACTION_FAILED"] = "transaction_failed";
|
|
51
|
+
GatedTransactionStatus2["FINAL_CHECK_FAILED"] = "final_check_failed";
|
|
52
|
+
GatedTransactionStatus2["DEPENDENCY_FAILED"] = "dependency_failed";
|
|
53
|
+
GatedTransactionStatus2["DENIED"] = "denied";
|
|
54
|
+
return GatedTransactionStatus2;
|
|
55
|
+
}({});
|
|
56
|
+
var gatedTransactionCacheSchema = z.object({
|
|
57
|
+
getCachedTxCheckData: functionSchema({
|
|
58
|
+
input: z.tuple([
|
|
59
|
+
z.any()
|
|
60
|
+
]),
|
|
61
|
+
output: z.promise(z.any())
|
|
62
|
+
}),
|
|
63
|
+
cacheSuccessfulTxCheckData: functionSchema({
|
|
64
|
+
input: z.tuple([
|
|
65
|
+
z.any(),
|
|
66
|
+
z.any()
|
|
67
|
+
]),
|
|
68
|
+
output: z.promise(z.any())
|
|
69
|
+
})
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
export { GatedTransactionStatus, gatedTransactionCacheSchema, gatedTransactionResultSchema, gatedTransactionSchema, processedGatedTransactionSchema };
|
|
73
|
+
//# sourceMappingURL=GLQGPA3F.js.map
|
|
74
|
+
//# sourceMappingURL=GLQGPA3F.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/types.ts"],"names":["gatedTransactionSchema","transactionSchema","name","z","object","transaction","check","functionPointer","any","params","array","expectedResult","operator","custom","comparisonValue","gatedTransactionResultSchema","onchainDataSchema","union","status","literal","submittedTransaction","transactionError","finalOnChainState","processedGatedTransactionSchema","and","result","GatedTransactionStatus","gatedTransactionCacheSchema","getCachedTxCheckData","functionSchema","input","tuple","output","promise","cacheSuccessfulTxCheckData"],"mappings":"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","file":"GLQGPA3F.js","sourcesContent":["import z from 'zod/v4';\n\nimport type {\n Transaction,\n transactionSchema as _transactionSchema,\n} from '@layerzerolabs/common-chain-model';\nimport type { FunctionPointer } from '@layerzerolabs/common-utils';\nimport { functionSchema } from '@layerzerolabs/zod-utils';\n\nexport type OnChainDataComparisonOperator<OnChainDataType> = OnChainDataType extends number\n ? '<' | '<=' | '=' | '!=' | '>' | '>='\n : '=' | '!=';\n\nexport type OnChainDataComparison<OnChainDataType> = {\n operator: OnChainDataComparisonOperator<OnChainDataType>;\n comparisonValue: OnChainDataType;\n};\n\nexport type GatedTransactionCheck<\n Method extends (...args: any[]) => any = (...args: any[]) => unknown,\n> = {\n functionPointer: FunctionPointer<Method>;\n params: any[];\n expectedResult: OnChainDataComparison<Awaited<ReturnType<Method>>>;\n};\n\nexport const gatedTransactionSchema = <TransactionSchema extends typeof _transactionSchema>({\n transactionSchema,\n name,\n}: {\n transactionSchema: TransactionSchema;\n name: z.ZodString | z.ZodLiteral<string>;\n}) =>\n z.object({\n name,\n transaction: transactionSchema,\n check: z.object({\n functionPointer: z.any(),\n params: z.array(z.any()),\n expectedResult: z.object({\n operator: z.custom<OnChainDataComparisonOperator<any>>(),\n comparisonValue: z.any(),\n }),\n }),\n });\n\n// Schema for gated transaction results\nexport const gatedTransactionResultSchema = <\n TransactionSchema extends typeof _transactionSchema,\n OnchainDataSchema extends z.ZodType,\n>(\n transactionSchema: TransactionSchema,\n onchainDataSchema: OnchainDataSchema,\n) =>\n z.union([\n z.object({\n status: z.literal(GatedTransactionStatus.NO_OP),\n }),\n z.object({\n status: z.literal(GatedTransactionStatus.SUCCESS),\n submittedTransaction: transactionSchema,\n }),\n z.object({\n status: z.literal(GatedTransactionStatus.TRANSACTION_FAILED),\n transactionError: z.any(),\n }),\n z.object({\n status: z.literal(GatedTransactionStatus.FINAL_CHECK_FAILED),\n submittedTransaction: transactionSchema,\n finalOnChainState: onchainDataSchema,\n }),\n z.object({\n status: z.literal(GatedTransactionStatus.DEPENDENCY_FAILED),\n }),\n z.object({\n status: z.literal(GatedTransactionStatus.DENIED),\n }),\n ]);\n\n// Schema for processed gated transactions (with results)\nexport const processedGatedTransactionSchema = <\n TransactionSchema extends typeof _transactionSchema,\n OnchainDataSchema extends z.ZodType,\n>({\n transactionSchema,\n onchainDataSchema,\n name,\n}: {\n transactionSchema: TransactionSchema;\n onchainDataSchema: OnchainDataSchema;\n name: z.ZodString | z.ZodLiteral<string>;\n}) =>\n gatedTransactionSchema({\n transactionSchema,\n name,\n }).and(\n z.object({\n result: gatedTransactionResultSchema(transactionSchema, onchainDataSchema),\n }),\n );\n\ntype GatedTransactionDependencies = GatedTransaction[];\n\nexport type GatedTransaction<\n Name extends string = string,\n TxType extends Transaction = Transaction,\n CheckMethod extends (...args: any[]) => any = (...args: any[]) => any,\n Dependencies extends GatedTransactionDependencies = GatedTransactionDependencies,\n> = {\n bundleName?: string;\n name: Name;\n transaction: TxType;\n check: GatedTransactionCheck<CheckMethod>;\n cacheable?: boolean;\n uniqueIdKeys?: Record<string, string | number | boolean>;\n dependencies?: Dependencies;\n};\n\nexport type ProcessedGatedTransaction<\n Name extends string = string,\n TxType extends Transaction = Transaction,\n CheckMethod extends (...args: any[]) => any = (...args: any[]) => any,\n> = GatedTransaction<Name, TxType, CheckMethod> & {\n result: GatedTransactionResult<GatedTransaction<Name, TxType, CheckMethod>, TxType>;\n};\n\nexport type InferOnChainDataTypeFromGatedTransaction<GatedTx extends GatedTransaction> =\n GatedTx extends GatedTransaction<any, any, infer Check> ? Awaited<ReturnType<Check>> : unknown;\n\nexport enum GatedTransactionStatus {\n NO_OP = 'no_op',\n SUCCESS = 'success',\n TRANSACTION_FAILED = 'transaction_failed',\n FINAL_CHECK_FAILED = 'final_check_failed',\n DEPENDENCY_FAILED = 'dependency_failed',\n DENIED = 'denied',\n}\n\ntype NoOpGatedTransaction = {\n status: GatedTransactionStatus.NO_OP;\n};\n\ntype SuccessfulGatedTransaction<ProcessedTx extends Transaction> = {\n status: GatedTransactionStatus.SUCCESS;\n submittedTransaction: ProcessedTx;\n};\n\ntype TxFailedGatedTransaction = {\n status: GatedTransactionStatus.TRANSACTION_FAILED;\n transactionError: any;\n};\n\ntype CheckFailedGatedTransaction<ProcessedTx extends Transaction, State> = {\n status: GatedTransactionStatus.FINAL_CHECK_FAILED;\n submittedTransaction: ProcessedTx;\n finalOnChainState: State;\n};\n\ntype DependencyFailedGatedTransaction = {\n status: GatedTransactionStatus.DEPENDENCY_FAILED;\n};\n\ntype DeniedGatedTransaction = {\n status: GatedTransactionStatus.DENIED;\n};\n\nexport type GatedTransactionResult<\n GatedTx extends GatedTransaction = GatedTransaction,\n ProcessedTxType extends Transaction = Transaction,\n> =\n | NoOpGatedTransaction\n | SuccessfulGatedTransaction<ProcessedTxType>\n | TxFailedGatedTransaction\n | CheckFailedGatedTransaction<\n ProcessedTxType,\n InferOnChainDataTypeFromGatedTransaction<GatedTx>\n >\n | DependencyFailedGatedTransaction\n | DeniedGatedTransaction;\n\nexport const gatedTransactionCacheSchema = z.object({\n getCachedTxCheckData: functionSchema({\n input: z.tuple([z.any()]),\n output: z.promise(z.any()),\n }) as z.ZodType<\n <GatedTx extends GatedTransaction>(\n gtx: GatedTx,\n ) => Promise<InferOnChainDataTypeFromGatedTransaction<GatedTx> | undefined>\n >,\n cacheSuccessfulTxCheckData: functionSchema({\n input: z.tuple([z.any(), z.any()]),\n output: z.promise(z.any()),\n }) as z.ZodType<\n <GatedTx extends GatedTransaction>(\n gtx: GatedTx,\n data: InferOnChainDataTypeFromGatedTransaction<GatedTx>,\n ) => Promise<void>\n >,\n});\n\nexport type IGatedTransactionCache = z.infer<typeof gatedTransactionCacheSchema>;\n\n/**\n * name-chain-uniqueIdKeys\n *\n * E.g., setDelegate-ethereum-oAppAddress:0xMY_OAPP\n */\nexport type GatedTransactionId = `${string}-${string}-${string}`;\n\nexport type UserInteractionCallbacks = {\n confirmationCallback?: (gtx: GatedTransaction) => Promise<boolean>;\n onResultCallback?: (result: GatedTransaction & { result: GatedTransactionResult }) => void;\n};\n"]}
|
package/dist/PQPGPKJO.js
ADDED
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { getIdForGatedTransaction } from './5INFRBMB.js';
|
|
2
|
+
import { GatedTransactionStatus } from './GLQGPA3F.js';
|
|
3
|
+
import { __name } from './VUOMXK5T.js';
|
|
4
|
+
import isEqual from 'lodash.isequal';
|
|
5
|
+
|
|
6
|
+
var checkGatedTransaction = /* @__PURE__ */ __name(async ({ registry, gatedTransaction, cachedCheckResult, processedTransaction }) => {
|
|
7
|
+
let onChainData;
|
|
8
|
+
if (cachedCheckResult !== void 0) {
|
|
9
|
+
onChainData = cachedCheckResult;
|
|
10
|
+
} else {
|
|
11
|
+
let params = gatedTransaction.check.params;
|
|
12
|
+
if (processedTransaction !== void 0) {
|
|
13
|
+
params = [
|
|
14
|
+
...gatedTransaction.check.params,
|
|
15
|
+
processedTransaction
|
|
16
|
+
];
|
|
17
|
+
}
|
|
18
|
+
onChainData = await registry.callByPointer(gatedTransaction.check.functionPointer, params);
|
|
19
|
+
}
|
|
20
|
+
let expectationMet;
|
|
21
|
+
switch (gatedTransaction.check.expectedResult.operator) {
|
|
22
|
+
case "=":
|
|
23
|
+
expectationMet = isEqual(onChainData, gatedTransaction.check.expectedResult.comparisonValue);
|
|
24
|
+
break;
|
|
25
|
+
case "!=":
|
|
26
|
+
expectationMet = !isEqual(onChainData, gatedTransaction.check.expectedResult.comparisonValue);
|
|
27
|
+
break;
|
|
28
|
+
case ">":
|
|
29
|
+
expectationMet = onChainData > gatedTransaction.check.expectedResult.comparisonValue;
|
|
30
|
+
break;
|
|
31
|
+
case ">=":
|
|
32
|
+
expectationMet = onChainData >= gatedTransaction.check.expectedResult.comparisonValue;
|
|
33
|
+
break;
|
|
34
|
+
case "<":
|
|
35
|
+
expectationMet = onChainData < gatedTransaction.check.expectedResult.comparisonValue;
|
|
36
|
+
break;
|
|
37
|
+
case "<=":
|
|
38
|
+
expectationMet = onChainData <= gatedTransaction.check.expectedResult.comparisonValue;
|
|
39
|
+
break;
|
|
40
|
+
default:
|
|
41
|
+
throw new Error(`Gated transaction operator "${gatedTransaction.check.expectedResult.operator}" is not supported`);
|
|
42
|
+
}
|
|
43
|
+
return {
|
|
44
|
+
expectationMet,
|
|
45
|
+
onChainData
|
|
46
|
+
};
|
|
47
|
+
}, "checkGatedTransaction");
|
|
48
|
+
var resolveGatedTransaction = /* @__PURE__ */ __name(async ({ activityRegistry, gatedTx, isTransactionSuccessful, processTx, confirmationCallback, fn, cache }) => {
|
|
49
|
+
const dependencyIds = (gatedTx.dependencies ?? []).map((tx) => getIdForGatedTransaction(tx));
|
|
50
|
+
const dependenciesAreAllProcessed = /* @__PURE__ */ __name(() => dependencyIds.every((id) => isTransactionSuccessful(id) != null), "dependenciesAreAllProcessed");
|
|
51
|
+
await fn.condition(dependenciesAreAllProcessed);
|
|
52
|
+
const dependenciesWereSuccessful = dependencyIds.every((id) => isTransactionSuccessful(id));
|
|
53
|
+
if (!dependenciesWereSuccessful) {
|
|
54
|
+
return {
|
|
55
|
+
...gatedTx,
|
|
56
|
+
result: {
|
|
57
|
+
status: GatedTransactionStatus.DEPENDENCY_FAILED
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
const initialCheckResult = await checkGatedTransaction({
|
|
62
|
+
gatedTransaction: gatedTx,
|
|
63
|
+
registry: activityRegistry,
|
|
64
|
+
cachedCheckResult: await cache?.getCachedTxCheckData?.(gatedTx)
|
|
65
|
+
});
|
|
66
|
+
await cache?.cacheSuccessfulTxCheckData?.(gatedTx, initialCheckResult.onChainData);
|
|
67
|
+
if (initialCheckResult.expectationMet) {
|
|
68
|
+
return {
|
|
69
|
+
...gatedTx,
|
|
70
|
+
result: {
|
|
71
|
+
status: GatedTransactionStatus.NO_OP
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
const confirmation = await confirmationCallback(gatedTx);
|
|
76
|
+
if (!confirmation) {
|
|
77
|
+
return {
|
|
78
|
+
...gatedTx,
|
|
79
|
+
result: {
|
|
80
|
+
status: GatedTransactionStatus.DENIED
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
try {
|
|
85
|
+
const processed = await processTx(gatedTx.transaction);
|
|
86
|
+
const finalCheckResult = await checkGatedTransaction({
|
|
87
|
+
registry: activityRegistry,
|
|
88
|
+
gatedTransaction: gatedTx,
|
|
89
|
+
processedTransaction: processed
|
|
90
|
+
});
|
|
91
|
+
await cache?.cacheSuccessfulTxCheckData?.(gatedTx, finalCheckResult.onChainData);
|
|
92
|
+
if (finalCheckResult.expectationMet) {
|
|
93
|
+
return {
|
|
94
|
+
...gatedTx,
|
|
95
|
+
result: {
|
|
96
|
+
status: GatedTransactionStatus.SUCCESS,
|
|
97
|
+
submittedTransaction: processed
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
} else {
|
|
101
|
+
return {
|
|
102
|
+
...gatedTx,
|
|
103
|
+
result: {
|
|
104
|
+
status: GatedTransactionStatus.FINAL_CHECK_FAILED,
|
|
105
|
+
submittedTransaction: processed,
|
|
106
|
+
finalOnChainState: finalCheckResult.onChainData
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
} catch (e) {
|
|
111
|
+
return {
|
|
112
|
+
...gatedTx,
|
|
113
|
+
result: {
|
|
114
|
+
status: GatedTransactionStatus.TRANSACTION_FAILED,
|
|
115
|
+
transactionError: e
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
}, "resolveGatedTransaction");
|
|
120
|
+
var resolveGatedTransactions = /* @__PURE__ */ __name(async ({ activityRegistry, gatedTxes, processTx, fn, cache, userInteractionCallbacks }) => {
|
|
121
|
+
const allInternalIds = gatedTxes.map((tx) => getIdForGatedTransaction(tx));
|
|
122
|
+
const allDeps = gatedTxes.flatMap((tx) => tx.dependencies ?? []);
|
|
123
|
+
const allExternalDeps = allDeps.filter((tx) => !allInternalIds.includes(getIdForGatedTransaction(tx)));
|
|
124
|
+
const results = Object.fromEntries(await Promise.all(allExternalDeps.map(async (tx) => {
|
|
125
|
+
const checkResult = await checkGatedTransaction({
|
|
126
|
+
gatedTransaction: tx,
|
|
127
|
+
registry: activityRegistry,
|
|
128
|
+
cachedCheckResult: await cache?.getCachedTxCheckData?.(tx)
|
|
129
|
+
});
|
|
130
|
+
return [
|
|
131
|
+
getIdForGatedTransaction(tx),
|
|
132
|
+
checkResult.expectationMet
|
|
133
|
+
];
|
|
134
|
+
})));
|
|
135
|
+
const isTransactionSuccessful = /* @__PURE__ */ __name((gtxId) => results[gtxId], "isTransactionSuccessful");
|
|
136
|
+
const txFunctions = gatedTxes.map((tx) => async () => {
|
|
137
|
+
const res = await resolveGatedTransaction({
|
|
138
|
+
gatedTx: tx,
|
|
139
|
+
activityRegistry,
|
|
140
|
+
isTransactionSuccessful,
|
|
141
|
+
processTx,
|
|
142
|
+
confirmationCallback: userInteractionCallbacks?.confirmationCallback ?? (async () => true),
|
|
143
|
+
fn,
|
|
144
|
+
cache
|
|
145
|
+
});
|
|
146
|
+
const resId = getIdForGatedTransaction(res);
|
|
147
|
+
results[resId] = [
|
|
148
|
+
GatedTransactionStatus.SUCCESS,
|
|
149
|
+
GatedTransactionStatus.NO_OP
|
|
150
|
+
].includes(res.result.status);
|
|
151
|
+
userInteractionCallbacks?.onResultCallback?.(res);
|
|
152
|
+
return res;
|
|
153
|
+
});
|
|
154
|
+
return await Promise.all(txFunctions.map((func) => func()));
|
|
155
|
+
}, "resolveGatedTransactions");
|
|
156
|
+
var resolveSequencedGatedTransactions = /* @__PURE__ */ __name(async ({ activityRegistry, gatedTxes, processTx, cache, userInteractionCallbacks, fn }) => {
|
|
157
|
+
const results = [];
|
|
158
|
+
for (const seq of gatedTxes) {
|
|
159
|
+
const result = await resolveGatedTransactions({
|
|
160
|
+
gatedTxes: seq,
|
|
161
|
+
activityRegistry,
|
|
162
|
+
processTx,
|
|
163
|
+
cache,
|
|
164
|
+
userInteractionCallbacks,
|
|
165
|
+
fn
|
|
166
|
+
});
|
|
167
|
+
results.push(result);
|
|
168
|
+
}
|
|
169
|
+
return results;
|
|
170
|
+
}, "resolveSequencedGatedTransactions");
|
|
171
|
+
|
|
172
|
+
export { resolveGatedTransactions, resolveSequencedGatedTransactions };
|
|
173
|
+
//# sourceMappingURL=PQPGPKJO.js.map
|
|
174
|
+
//# sourceMappingURL=PQPGPKJO.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/resolver.ts"],"names":["checkGatedTransaction","registry","gatedTransaction","cachedCheckResult","processedTransaction","onChainData","undefined","params","check","callByPointer","functionPointer","expectationMet","expectedResult","operator","isEqual","comparisonValue","Error","resolveGatedTransaction","activityRegistry","gatedTx","isTransactionSuccessful","processTx","confirmationCallback","fn","cache","dependencyIds","dependencies","map","tx","getIdForGatedTransaction","dependenciesAreAllProcessed","every","id","condition","dependenciesWereSuccessful","result","status","GatedTransactionStatus","DEPENDENCY_FAILED","initialCheckResult","getCachedTxCheckData","cacheSuccessfulTxCheckData","NO_OP","confirmation","DENIED","processed","transaction","finalCheckResult","SUCCESS","submittedTransaction","FINAL_CHECK_FAILED","finalOnChainState","e","TRANSACTION_FAILED","transactionError","resolveGatedTransactions","gatedTxes","userInteractionCallbacks","allInternalIds","allDeps","flatMap","allExternalDeps","filter","includes","results","Object","fromEntries","Promise","all","checkResult","gtxId","txFunctions","res","resId","onResultCallback","func","resolveSequencedGatedTransactions","seq","push"],"mappings":"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","file":"PQPGPKJO.js","sourcesContent":["import isEqual from 'lodash.isequal';\n\nimport type { ActivityRegistry } from '@layerzerolabs/common-activities';\nimport type { Transaction } from '@layerzerolabs/common-chain-model';\nimport type { WorkflowFunctions } from '@layerzerolabs/common-workflow';\n\nimport { getIdForGatedTransaction } from './gatedTx';\nimport type {\n GatedTransaction,\n GatedTransactionId,\n GatedTransactionResult,\n IGatedTransactionCache,\n InferOnChainDataTypeFromGatedTransaction,\n UserInteractionCallbacks,\n} from './types';\nimport { GatedTransactionStatus } from './types';\n\ntype OnChainCheckResult<DataType = any> = {\n expectationMet: boolean;\n onChainData: DataType;\n};\n\nconst checkGatedTransaction = async <GatedTx extends GatedTransaction>({\n registry,\n gatedTransaction,\n cachedCheckResult,\n processedTransaction,\n}: {\n registry: ActivityRegistry;\n gatedTransaction: GatedTx;\n cachedCheckResult?: InferOnChainDataTypeFromGatedTransaction<GatedTx>;\n processedTransaction?: any;\n}): Promise<OnChainCheckResult<InferOnChainDataTypeFromGatedTransaction<GatedTx>>> => {\n let onChainData: InferOnChainDataTypeFromGatedTransaction<GatedTx>;\n if (cachedCheckResult !== undefined) {\n onChainData = cachedCheckResult;\n } else {\n // Always inject the processed transaction as the last parameter when available\n let params = gatedTransaction.check.params;\n if (processedTransaction !== undefined) {\n params = [...gatedTransaction.check.params, processedTransaction];\n }\n\n onChainData = await registry.callByPointer(gatedTransaction.check.functionPointer, params);\n }\n\n let expectationMet: boolean;\n\n switch (gatedTransaction.check.expectedResult.operator) {\n case '=':\n expectationMet = isEqual(\n onChainData,\n gatedTransaction.check.expectedResult.comparisonValue,\n );\n break;\n case '!=':\n expectationMet = !isEqual(\n onChainData,\n gatedTransaction.check.expectedResult.comparisonValue,\n );\n break;\n case '>':\n expectationMet =\n (onChainData as number) >\n (gatedTransaction.check.expectedResult.comparisonValue as number);\n break;\n case '>=':\n expectationMet =\n (onChainData as number) >=\n (gatedTransaction.check.expectedResult.comparisonValue as number);\n break;\n case '<':\n expectationMet =\n (onChainData as number) <\n (gatedTransaction.check.expectedResult.comparisonValue as number);\n break;\n case '<=':\n expectationMet =\n (onChainData as number) <=\n (gatedTransaction.check.expectedResult.comparisonValue as number);\n break;\n default:\n throw new Error(\n `Gated transaction operator \"${gatedTransaction.check.expectedResult.operator}\" is not supported`,\n );\n }\n\n return {\n expectationMet,\n onChainData,\n };\n};\n\nconst resolveGatedTransaction = async <\n TxType extends Transaction,\n ProcessedTxType extends Transaction,\n GatedTx extends GatedTransaction<string, TxType, any>,\n ProcessTx extends (transaction: TxType) => Promise<ProcessedTxType>,\n>({\n activityRegistry,\n gatedTx,\n isTransactionSuccessful,\n processTx,\n confirmationCallback,\n fn,\n cache,\n}: {\n activityRegistry: ActivityRegistry;\n gatedTx: GatedTx;\n processTx: ProcessTx;\n isTransactionSuccessful: (gtxId: GatedTransactionId) => boolean | undefined;\n confirmationCallback: NonNullable<UserInteractionCallbacks['confirmationCallback']>;\n fn: WorkflowFunctions;\n cache?: IGatedTransactionCache;\n}): Promise<GatedTx & { result: GatedTransactionResult<GatedTx, ProcessedTxType> }> => {\n const dependencyIds = (gatedTx.dependencies ?? []).map((tx) => getIdForGatedTransaction(tx));\n\n const dependenciesAreAllProcessed = () =>\n dependencyIds.every((id) => isTransactionSuccessful(id) != null);\n\n await fn.condition(dependenciesAreAllProcessed);\n\n //check that the dependencies succeeded\n const dependenciesWereSuccessful = dependencyIds.every((id) => isTransactionSuccessful(id));\n\n if (!dependenciesWereSuccessful) {\n return {\n ...gatedTx,\n result: {\n status: GatedTransactionStatus.DEPENDENCY_FAILED,\n },\n };\n }\n\n const initialCheckResult = await checkGatedTransaction({\n gatedTransaction: gatedTx,\n registry: activityRegistry,\n cachedCheckResult: await cache?.getCachedTxCheckData?.(gatedTx),\n });\n\n await cache?.cacheSuccessfulTxCheckData?.(gatedTx, initialCheckResult.onChainData);\n\n if (initialCheckResult.expectationMet) {\n //already met\n return {\n ...gatedTx,\n result: {\n status: GatedTransactionStatus.NO_OP,\n },\n };\n }\n\n //get confirmation before sending\n const confirmation = await confirmationCallback(gatedTx);\n if (!confirmation) {\n return {\n ...gatedTx,\n result: {\n status: GatedTransactionStatus.DENIED,\n },\n };\n }\n\n //send the tx\n try {\n const processed = await processTx(gatedTx.transaction);\n const finalCheckResult = await checkGatedTransaction({\n registry: activityRegistry,\n gatedTransaction: gatedTx,\n processedTransaction: processed,\n });\n\n await cache?.cacheSuccessfulTxCheckData?.(gatedTx, finalCheckResult.onChainData);\n\n if (finalCheckResult.expectationMet) {\n //sent and successful\n return {\n ...gatedTx,\n result: {\n status: GatedTransactionStatus.SUCCESS,\n submittedTransaction: processed,\n },\n };\n } else {\n //sent and unsuccessful\n return {\n ...gatedTx,\n result: {\n status: GatedTransactionStatus.FINAL_CHECK_FAILED,\n submittedTransaction: processed,\n finalOnChainState: finalCheckResult.onChainData,\n },\n };\n }\n } catch (e) {\n //sent and failed\n return {\n ...gatedTx,\n result: {\n status: GatedTransactionStatus.TRANSACTION_FAILED,\n transactionError: e,\n },\n };\n }\n};\n\nexport const resolveGatedTransactions = async <\n TxType extends Transaction,\n ProcessedTxType extends Transaction,\n GatedTx extends GatedTransaction<string, TxType, any>,\n ProcessTx extends (transaction: TxType) => Promise<ProcessedTxType>,\n>({\n activityRegistry,\n gatedTxes,\n processTx,\n fn,\n cache,\n userInteractionCallbacks,\n}: {\n activityRegistry: ActivityRegistry;\n gatedTxes: GatedTx[];\n processTx: ProcessTx;\n fn: WorkflowFunctions;\n cache?: IGatedTransactionCache;\n userInteractionCallbacks?: UserInteractionCallbacks;\n}): Promise<(GatedTx & { result: GatedTransactionResult })[]> => {\n //compute deps\n const allInternalIds = gatedTxes.map((tx) => getIdForGatedTransaction(tx));\n const allDeps = gatedTxes.flatMap((tx) => tx.dependencies ?? []);\n const allExternalDeps = allDeps.filter(\n (tx) => !allInternalIds.includes(getIdForGatedTransaction(tx)),\n );\n\n //prepopulate results for external dependencies\n //this map is only used for internal status tracking\n //map id -> was successful\n const results: Record<GatedTransactionId, boolean> = Object.fromEntries(\n await Promise.all(\n allExternalDeps.map(async (tx) => {\n const checkResult = await checkGatedTransaction({\n gatedTransaction: tx,\n registry: activityRegistry,\n cachedCheckResult: await cache?.getCachedTxCheckData?.(tx),\n });\n\n return [getIdForGatedTransaction(tx), checkResult.expectationMet];\n }),\n ),\n );\n\n const isTransactionSuccessful = (gtxId: GatedTransactionId) => results[gtxId];\n\n const txFunctions = gatedTxes.map((tx) => async () => {\n const res = await resolveGatedTransaction<TxType, ProcessedTxType, GatedTx, ProcessTx>({\n gatedTx: tx,\n activityRegistry,\n isTransactionSuccessful,\n processTx,\n confirmationCallback:\n userInteractionCallbacks?.confirmationCallback ?? (async () => true),\n fn,\n cache,\n });\n\n const resId = getIdForGatedTransaction(res);\n results[resId] = [GatedTransactionStatus.SUCCESS, GatedTransactionStatus.NO_OP].includes(\n res.result.status,\n );\n\n userInteractionCallbacks?.onResultCallback?.(res);\n return res;\n });\n\n return await Promise.all(txFunctions.map((func) => func()));\n};\n\nexport const resolveSequencedGatedTransactions = async <\n TxType extends Transaction,\n ProcessedTxType extends Transaction,\n GatedTx extends GatedTransaction<string, TxType, any>,\n ProcessTx extends (transaction: TxType) => Promise<ProcessedTxType>,\n>({\n activityRegistry,\n gatedTxes,\n processTx,\n cache,\n userInteractionCallbacks,\n fn,\n}: {\n activityRegistry: ActivityRegistry;\n gatedTxes: GatedTx[][];\n processTx: ProcessTx;\n fn: WorkflowFunctions;\n cache?: IGatedTransactionCache;\n userInteractionCallbacks?: UserInteractionCallbacks;\n}) => {\n const results = [];\n for (const seq of gatedTxes) {\n const result = await resolveGatedTransactions<TxType, ProcessedTxType, GatedTx, ProcessTx>({\n gatedTxes: seq,\n activityRegistry,\n processTx,\n cache,\n userInteractionCallbacks,\n fn,\n });\n results.push(result);\n }\n\n return results;\n};\n"]}
|