lampamazaza-new-intents-sdk 0.47.1
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/LICENSE +21 -0
- package/README.md +1083 -0
- package/dist/_virtual/rolldown_runtime.cjs +29 -0
- package/dist/index.cjs +124 -0
- package/dist/index.d.cts +22 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.js +19 -0
- package/dist/src/bridges/aurora-engine-bridge/aurora-engine-bridge-constants.cjs +10 -0
- package/dist/src/bridges/aurora-engine-bridge/aurora-engine-bridge-constants.js +7 -0
- package/dist/src/bridges/aurora-engine-bridge/aurora-engine-bridge-utils.cjs +44 -0
- package/dist/src/bridges/aurora-engine-bridge/aurora-engine-bridge-utils.js +42 -0
- package/dist/src/bridges/aurora-engine-bridge/aurora-engine-bridge.cjs +111 -0
- package/dist/src/bridges/aurora-engine-bridge/aurora-engine-bridge.js +110 -0
- package/dist/src/bridges/direct-bridge/direct-bridge-constants.cjs +8 -0
- package/dist/src/bridges/direct-bridge/direct-bridge-constants.js +6 -0
- package/dist/src/bridges/direct-bridge/direct-bridge-utils.cjs +47 -0
- package/dist/src/bridges/direct-bridge/direct-bridge-utils.js +44 -0
- package/dist/src/bridges/direct-bridge/direct-bridge.cjs +155 -0
- package/dist/src/bridges/direct-bridge/direct-bridge.js +154 -0
- package/dist/src/bridges/direct-bridge/error.cjs +16 -0
- package/dist/src/bridges/direct-bridge/error.d.cts +12 -0
- package/dist/src/bridges/direct-bridge/error.d.ts +12 -0
- package/dist/src/bridges/direct-bridge/error.js +15 -0
- package/dist/src/bridges/hot-bridge/error.cjs +23 -0
- package/dist/src/bridges/hot-bridge/error.d.cts +19 -0
- package/dist/src/bridges/hot-bridge/error.d.ts +19 -0
- package/dist/src/bridges/hot-bridge/error.js +21 -0
- package/dist/src/bridges/hot-bridge/hot-bridge-chains.cjs +21 -0
- package/dist/src/bridges/hot-bridge/hot-bridge-chains.d.cts +6 -0
- package/dist/src/bridges/hot-bridge/hot-bridge-chains.d.ts +6 -0
- package/dist/src/bridges/hot-bridge/hot-bridge-chains.js +20 -0
- package/dist/src/bridges/hot-bridge/hot-bridge-constants.cjs +11 -0
- package/dist/src/bridges/hot-bridge/hot-bridge-constants.js +9 -0
- package/dist/src/bridges/hot-bridge/hot-bridge-utils.cjs +66 -0
- package/dist/src/bridges/hot-bridge/hot-bridge-utils.js +61 -0
- package/dist/src/bridges/hot-bridge/hot-bridge.cjs +241 -0
- package/dist/src/bridges/hot-bridge/hot-bridge.js +239 -0
- package/dist/src/bridges/intents-bridge/intents-bridge.cjs +59 -0
- package/dist/src/bridges/intents-bridge/intents-bridge.js +59 -0
- package/dist/src/bridges/omni-bridge/error.cjs +54 -0
- package/dist/src/bridges/omni-bridge/error.d.cts +41 -0
- package/dist/src/bridges/omni-bridge/error.d.ts +41 -0
- package/dist/src/bridges/omni-bridge/error.js +49 -0
- package/dist/src/bridges/omni-bridge/omni-bridge-constants.cjs +12 -0
- package/dist/src/bridges/omni-bridge/omni-bridge-constants.js +8 -0
- package/dist/src/bridges/omni-bridge/omni-bridge-utils.cjs +153 -0
- package/dist/src/bridges/omni-bridge/omni-bridge-utils.js +143 -0
- package/dist/src/bridges/omni-bridge/omni-bridge.cjs +316 -0
- package/dist/src/bridges/omni-bridge/omni-bridge.js +314 -0
- package/dist/src/bridges/poa-bridge/poa-bridge-utils.cjs +76 -0
- package/dist/src/bridges/poa-bridge/poa-bridge-utils.js +73 -0
- package/dist/src/bridges/poa-bridge/poa-bridge.cjs +175 -0
- package/dist/src/bridges/poa-bridge/poa-bridge.js +173 -0
- package/dist/src/bridges/poa-bridge/poa-constants.cjs +6 -0
- package/dist/src/bridges/poa-bridge/poa-constants.js +5 -0
- package/dist/src/classes/errors.cjs +87 -0
- package/dist/src/classes/errors.d.cts +48 -0
- package/dist/src/classes/errors.d.ts +48 -0
- package/dist/src/classes/errors.js +81 -0
- package/dist/src/constants/bridge-name-enum.cjs +11 -0
- package/dist/src/constants/bridge-name-enum.d.cts +11 -0
- package/dist/src/constants/bridge-name-enum.d.ts +11 -0
- package/dist/src/constants/bridge-name-enum.js +10 -0
- package/dist/src/constants/poa-tokens-routable-through-omni-bridge.cjs +17 -0
- package/dist/src/constants/poa-tokens-routable-through-omni-bridge.d.cts +12 -0
- package/dist/src/constants/poa-tokens-routable-through-omni-bridge.d.ts +12 -0
- package/dist/src/constants/poa-tokens-routable-through-omni-bridge.js +16 -0
- package/dist/src/constants/public-rpc-urls.cjs +25 -0
- package/dist/src/constants/public-rpc-urls.js +24 -0
- package/dist/src/constants/route-enum.cjs +13 -0
- package/dist/src/constants/route-enum.d.cts +13 -0
- package/dist/src/constants/route-enum.d.ts +13 -0
- package/dist/src/constants/route-enum.js +12 -0
- package/dist/src/constants/withdrawal-timing.cjs +68 -0
- package/dist/src/constants/withdrawal-timing.js +68 -0
- package/dist/src/core/withdrawal-watcher.cjs +86 -0
- package/dist/src/core/withdrawal-watcher.d.cts +18 -0
- package/dist/src/core/withdrawal-watcher.d.ts +19 -0
- package/dist/src/core/withdrawal-watcher.js +82 -0
- package/dist/src/intents/expirable-nonce.cjs +90 -0
- package/dist/src/intents/expirable-nonce.d.cts +44 -0
- package/dist/src/intents/expirable-nonce.d.ts +45 -0
- package/dist/src/intents/expirable-nonce.js +82 -0
- package/dist/src/intents/intent-executer-impl/intent-executer.cjs +85 -0
- package/dist/src/intents/intent-executer-impl/intent-executer.d.cts +20 -0
- package/dist/src/intents/intent-executer-impl/intent-executer.d.ts +24 -0
- package/dist/src/intents/intent-executer-impl/intent-executer.js +85 -0
- package/dist/src/intents/intent-hash.cjs +48 -0
- package/dist/src/intents/intent-hash.d.cts +8 -0
- package/dist/src/intents/intent-hash.d.ts +8 -0
- package/dist/src/intents/intent-hash.js +47 -0
- package/dist/src/intents/intent-hashes/erc191.cjs +38 -0
- package/dist/src/intents/intent-hashes/erc191.js +37 -0
- package/dist/src/intents/intent-hashes/nep413.cjs +23 -0
- package/dist/src/intents/intent-hashes/nep413.js +22 -0
- package/dist/src/intents/intent-hashes/raw-ed25519.cjs +26 -0
- package/dist/src/intents/intent-hashes/raw-ed25519.js +25 -0
- package/dist/src/intents/intent-hashes/sep53.cjs +36 -0
- package/dist/src/intents/intent-hashes/sep53.js +35 -0
- package/dist/src/intents/intent-hashes/tip191.cjs +39 -0
- package/dist/src/intents/intent-hashes/tip191.js +38 -0
- package/dist/src/intents/intent-hashes/ton-connect.cjs +105 -0
- package/dist/src/intents/intent-hashes/ton-connect.js +104 -0
- package/dist/src/intents/intent-hashes/webauthn.cjs +26 -0
- package/dist/src/intents/intent-hashes/webauthn.js +25 -0
- package/dist/src/intents/intent-payload-builder.cjs +208 -0
- package/dist/src/intents/intent-payload-builder.d.cts +161 -0
- package/dist/src/intents/intent-payload-builder.d.ts +161 -0
- package/dist/src/intents/intent-payload-builder.js +207 -0
- package/dist/src/intents/intent-payload-factory.cjs +23 -0
- package/dist/src/intents/intent-payload-factory.js +21 -0
- package/dist/src/intents/intent-relayer-impl/intent-relayer-public.cjs +43 -0
- package/dist/src/intents/intent-relayer-impl/intent-relayer-public.js +42 -0
- package/dist/src/intents/intent-signer-impl/factories.cjs +19 -0
- package/dist/src/intents/intent-signer-impl/factories.d.cts +11 -0
- package/dist/src/intents/intent-signer-impl/factories.d.ts +11 -0
- package/dist/src/intents/intent-signer-impl/factories.js +17 -0
- package/dist/src/intents/intent-signer-impl/intent-signer-near-keypair.cjs +22 -0
- package/dist/src/intents/intent-signer-impl/intent-signer-near-keypair.d.cts +15 -0
- package/dist/src/intents/intent-signer-impl/intent-signer-near-keypair.d.ts +16 -0
- package/dist/src/intents/intent-signer-impl/intent-signer-near-keypair.js +21 -0
- package/dist/src/intents/intent-signer-impl/intent-signer-nep413.cjs +37 -0
- package/dist/src/intents/intent-signer-impl/intent-signer-nep413.d.cts +14 -0
- package/dist/src/intents/intent-signer-impl/intent-signer-nep413.d.ts +14 -0
- package/dist/src/intents/intent-signer-impl/intent-signer-nep413.js +36 -0
- package/dist/src/intents/intent-signer-impl/intent-signer-noop.cjs +8 -0
- package/dist/src/intents/intent-signer-impl/intent-signer-noop.js +7 -0
- package/dist/src/intents/intent-signer-impl/intent-signer-viem.cjs +31 -0
- package/dist/src/intents/intent-signer-impl/intent-signer-viem.d.cts +17 -0
- package/dist/src/intents/intent-signer-impl/intent-signer-viem.d.ts +17 -0
- package/dist/src/intents/intent-signer-impl/intent-signer-viem.js +30 -0
- package/dist/src/intents/interfaces/intent-executer.d.ts +2 -0
- package/dist/src/intents/interfaces/intent-relayer.d.cts +43 -0
- package/dist/src/intents/interfaces/intent-relayer.d.ts +43 -0
- package/dist/src/intents/interfaces/intent-signer.d.cts +8 -0
- package/dist/src/intents/interfaces/intent-signer.d.ts +8 -0
- package/dist/src/intents/interfaces/salt-manager.d.cts +9 -0
- package/dist/src/intents/interfaces/salt-manager.d.ts +9 -0
- package/dist/src/intents/salt-manager.cjs +74 -0
- package/dist/src/intents/salt-manager.js +72 -0
- package/dist/src/intents/shared-types.d.cts +20 -0
- package/dist/src/intents/shared-types.d.ts +20 -0
- package/dist/src/lib/array.cjs +11 -0
- package/dist/src/lib/array.js +10 -0
- package/dist/src/lib/caip2.cjs +50 -0
- package/dist/src/lib/caip2.d.cts +38 -0
- package/dist/src/lib/caip2.d.ts +38 -0
- package/dist/src/lib/caip2.js +48 -0
- package/dist/src/lib/configure-rpc-config.cjs +20 -0
- package/dist/src/lib/configure-rpc-config.js +18 -0
- package/dist/src/lib/estimate-fee.cjs +96 -0
- package/dist/src/lib/estimate-fee.js +94 -0
- package/dist/src/lib/hex.cjs +11 -0
- package/dist/src/lib/hex.js +10 -0
- package/dist/src/lib/nep413.cjs +42 -0
- package/dist/src/lib/nep413.d.cts +14 -0
- package/dist/src/lib/nep413.d.ts +14 -0
- package/dist/src/lib/nep413.js +41 -0
- package/dist/src/lib/object.cjs +10 -0
- package/dist/src/lib/object.js +9 -0
- package/dist/src/lib/parse-defuse-asset-id.cjs +15 -0
- package/dist/src/lib/parse-defuse-asset-id.js +14 -0
- package/dist/src/lib/route-config-factory.cjs +43 -0
- package/dist/src/lib/route-config-factory.d.cts +13 -0
- package/dist/src/lib/route-config-factory.d.ts +13 -0
- package/dist/src/lib/route-config-factory.js +37 -0
- package/dist/src/lib/tokensUsdPricesHttpClient/apis.cjs +17 -0
- package/dist/src/lib/tokensUsdPricesHttpClient/apis.js +16 -0
- package/dist/src/lib/validateAddress.cjs +271 -0
- package/dist/src/lib/validateAddress.d.cts +14 -0
- package/dist/src/lib/validateAddress.d.ts +14 -0
- package/dist/src/lib/validateAddress.js +270 -0
- package/dist/src/sdk.cjs +435 -0
- package/dist/src/sdk.d.cts +231 -0
- package/dist/src/sdk.d.ts +231 -0
- package/dist/src/sdk.js +433 -0
- package/dist/src/shared-types.d.cts +378 -0
- package/dist/src/shared-types.d.ts +378 -0
- package/package.json +62 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { utils } from "lampamazaza-internal-utils";
|
|
2
|
+
|
|
3
|
+
//#region src/intents/intent-signer-impl/intent-signer-viem.ts
|
|
4
|
+
var IntentSignerViem = class {
|
|
5
|
+
constructor(config) {
|
|
6
|
+
this.config = config;
|
|
7
|
+
}
|
|
8
|
+
async signIntent(intent) {
|
|
9
|
+
const payload = JSON.stringify({
|
|
10
|
+
signer_id: intent.signer_id ?? this.config.accountId ?? utils.authHandleToIntentsUserId({
|
|
11
|
+
identifier: this.config.signer.address,
|
|
12
|
+
method: "evm"
|
|
13
|
+
}),
|
|
14
|
+
verifying_contract: intent.verifying_contract,
|
|
15
|
+
deadline: intent.deadline,
|
|
16
|
+
nonce: intent.nonce,
|
|
17
|
+
intents: intent.intents
|
|
18
|
+
});
|
|
19
|
+
const signature = await this.config.signer.signMessage?.({ message: payload });
|
|
20
|
+
if (signature == null) throw new Error("No signature is returned");
|
|
21
|
+
return {
|
|
22
|
+
standard: "erc191",
|
|
23
|
+
payload,
|
|
24
|
+
signature: utils.transformERC191Signature(signature)
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
//#endregion
|
|
30
|
+
export { IntentSignerViem };
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { MultiPayload, RelayParamsDefault } from "../shared-types.cjs";
|
|
2
|
+
import { NearTxInfo } from "../../shared-types.cjs";
|
|
3
|
+
import { ILogger } from "lampamazaza-internal-utils";
|
|
4
|
+
|
|
5
|
+
//#region src/intents/interfaces/intent-relayer.d.ts
|
|
6
|
+
interface IIntentRelayer<Ticket, RelayParams = RelayParamsDefault> {
|
|
7
|
+
/**
|
|
8
|
+
* Publishes a single intent to the relayer.
|
|
9
|
+
* @param params - The relay parameters including the signed multi-payload
|
|
10
|
+
* @param ctx - Optional context with logger
|
|
11
|
+
* @returns A ticket (typically an intent hash) for tracking the intent
|
|
12
|
+
*/
|
|
13
|
+
publishIntent(params: RelayParams, ctx?: {
|
|
14
|
+
logger?: ILogger;
|
|
15
|
+
}): Promise<Ticket>;
|
|
16
|
+
/**
|
|
17
|
+
* Publishes multiple intents atomically to the relayer.
|
|
18
|
+
* All intents will be executed together or not at all.
|
|
19
|
+
* @param params - Parameters including array of multi-payloads and quote hashes
|
|
20
|
+
* @param ctx - Optional context with logger
|
|
21
|
+
* @returns Array of tickets (typically intent hashes) for tracking the intents
|
|
22
|
+
*/
|
|
23
|
+
publishIntents(params: {
|
|
24
|
+
multiPayloads: MultiPayload[];
|
|
25
|
+
quoteHashes: string[];
|
|
26
|
+
}, ctx?: {
|
|
27
|
+
logger?: ILogger;
|
|
28
|
+
}): Promise<Ticket[]>;
|
|
29
|
+
/**
|
|
30
|
+
* Waits for an intent to be settled on-chain.
|
|
31
|
+
* @param ticket - The ticket returned from publishIntent
|
|
32
|
+
* @param ctx - Optional context with logger and signal
|
|
33
|
+
* @returns Transaction information once settled
|
|
34
|
+
*/
|
|
35
|
+
waitForSettlement(ticket: Ticket, ctx?: {
|
|
36
|
+
logger?: ILogger;
|
|
37
|
+
signal?: AbortSignal;
|
|
38
|
+
}): Promise<{
|
|
39
|
+
tx: NearTxInfo;
|
|
40
|
+
}>;
|
|
41
|
+
}
|
|
42
|
+
//#endregion
|
|
43
|
+
export { IIntentRelayer };
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { MultiPayload, RelayParamsDefault } from "../shared-types.js";
|
|
2
|
+
import { NearTxInfo } from "../../shared-types.js";
|
|
3
|
+
import { ILogger } from "lampamazaza-internal-utils";
|
|
4
|
+
|
|
5
|
+
//#region src/intents/interfaces/intent-relayer.d.ts
|
|
6
|
+
interface IIntentRelayer<Ticket, RelayParams = RelayParamsDefault> {
|
|
7
|
+
/**
|
|
8
|
+
* Publishes a single intent to the relayer.
|
|
9
|
+
* @param params - The relay parameters including the signed multi-payload
|
|
10
|
+
* @param ctx - Optional context with logger
|
|
11
|
+
* @returns A ticket (typically an intent hash) for tracking the intent
|
|
12
|
+
*/
|
|
13
|
+
publishIntent(params: RelayParams, ctx?: {
|
|
14
|
+
logger?: ILogger;
|
|
15
|
+
}): Promise<Ticket>;
|
|
16
|
+
/**
|
|
17
|
+
* Publishes multiple intents atomically to the relayer.
|
|
18
|
+
* All intents will be executed together or not at all.
|
|
19
|
+
* @param params - Parameters including array of multi-payloads and quote hashes
|
|
20
|
+
* @param ctx - Optional context with logger
|
|
21
|
+
* @returns Array of tickets (typically intent hashes) for tracking the intents
|
|
22
|
+
*/
|
|
23
|
+
publishIntents(params: {
|
|
24
|
+
multiPayloads: MultiPayload[];
|
|
25
|
+
quoteHashes: string[];
|
|
26
|
+
}, ctx?: {
|
|
27
|
+
logger?: ILogger;
|
|
28
|
+
}): Promise<Ticket[]>;
|
|
29
|
+
/**
|
|
30
|
+
* Waits for an intent to be settled on-chain.
|
|
31
|
+
* @param ticket - The ticket returned from publishIntent
|
|
32
|
+
* @param ctx - Optional context with logger and signal
|
|
33
|
+
* @returns Transaction information once settled
|
|
34
|
+
*/
|
|
35
|
+
waitForSettlement(ticket: Ticket, ctx?: {
|
|
36
|
+
logger?: ILogger;
|
|
37
|
+
signal?: AbortSignal;
|
|
38
|
+
}): Promise<{
|
|
39
|
+
tx: NearTxInfo;
|
|
40
|
+
}>;
|
|
41
|
+
}
|
|
42
|
+
//#endregion
|
|
43
|
+
export { IIntentRelayer };
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
|
|
2
|
+
let lampamazaza_internal_utils = require("lampamazaza-internal-utils");
|
|
3
|
+
let _scure_base = require("@scure/base");
|
|
4
|
+
let valibot = require("valibot");
|
|
5
|
+
valibot = require_rolldown_runtime.__toESM(valibot);
|
|
6
|
+
|
|
7
|
+
//#region src/intents/salt-manager.ts
|
|
8
|
+
const SALT_TTL_MS = 300 * 1e3;
|
|
9
|
+
var SaltManager = class {
|
|
10
|
+
constructor({ envConfig, nearProvider }) {
|
|
11
|
+
this.currentSalt = null;
|
|
12
|
+
this.fetchPromise = null;
|
|
13
|
+
this.lastFetchTime = 0;
|
|
14
|
+
this.intentsContract = envConfig.contractID;
|
|
15
|
+
this.nearProvider = nearProvider;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Returns the cached salt if it's valid, otherwise fetches a new one
|
|
19
|
+
* Deduplicates concurrent requests so only one fetch runs at a time
|
|
20
|
+
*/
|
|
21
|
+
async getCachedSalt() {
|
|
22
|
+
if (this.isCacheValid()) return this.currentSalt;
|
|
23
|
+
if (this.fetchPromise) return this.fetchPromise;
|
|
24
|
+
this.fetchPromise = this.fetchAndCache().finally(() => {
|
|
25
|
+
this.fetchPromise = null;
|
|
26
|
+
});
|
|
27
|
+
return this.fetchPromise;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Fetches a new salt from the contract and updates the cache
|
|
31
|
+
*/
|
|
32
|
+
async refresh() {
|
|
33
|
+
this.invalidateCache();
|
|
34
|
+
return this.getCachedSalt();
|
|
35
|
+
}
|
|
36
|
+
async fetchAndCache() {
|
|
37
|
+
try {
|
|
38
|
+
this.currentSalt = await fetchSalt(this.nearProvider, this.intentsContract);
|
|
39
|
+
this.lastFetchTime = Date.now();
|
|
40
|
+
return this.currentSalt;
|
|
41
|
+
} catch (err) {
|
|
42
|
+
this.fetchPromise = null;
|
|
43
|
+
throw new Error(`Failed to fetch salt`, { cause: err });
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
isCacheValid() {
|
|
47
|
+
return this.currentSalt != null && Date.now() - this.lastFetchTime < SALT_TTL_MS;
|
|
48
|
+
}
|
|
49
|
+
invalidateCache() {
|
|
50
|
+
this.currentSalt = null;
|
|
51
|
+
this.lastFetchTime = 0;
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Fetches the current salt from the NEAR contract
|
|
56
|
+
*
|
|
57
|
+
* @param nearProvider Near provider used for querying the contract
|
|
58
|
+
* @param contractId The NEAR contract ID to query
|
|
59
|
+
* @returns Promise resolving to the salt
|
|
60
|
+
*/
|
|
61
|
+
async function fetchSalt(nearProvider, contractId) {
|
|
62
|
+
const value = await lampamazaza_internal_utils.utils.queryContract({
|
|
63
|
+
contractId,
|
|
64
|
+
methodName: "current_salt",
|
|
65
|
+
args: {},
|
|
66
|
+
finality: "optimistic",
|
|
67
|
+
nearClient: nearProvider,
|
|
68
|
+
schema: valibot.string()
|
|
69
|
+
});
|
|
70
|
+
return _scure_base.hex.decode(value);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
//#endregion
|
|
74
|
+
exports.SaltManager = SaltManager;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { utils } from "lampamazaza-internal-utils";
|
|
2
|
+
import { hex } from "@scure/base";
|
|
3
|
+
import * as v from "valibot";
|
|
4
|
+
|
|
5
|
+
//#region src/intents/salt-manager.ts
|
|
6
|
+
const SALT_TTL_MS = 300 * 1e3;
|
|
7
|
+
var SaltManager = class {
|
|
8
|
+
constructor({ envConfig, nearProvider }) {
|
|
9
|
+
this.currentSalt = null;
|
|
10
|
+
this.fetchPromise = null;
|
|
11
|
+
this.lastFetchTime = 0;
|
|
12
|
+
this.intentsContract = envConfig.contractID;
|
|
13
|
+
this.nearProvider = nearProvider;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Returns the cached salt if it's valid, otherwise fetches a new one
|
|
17
|
+
* Deduplicates concurrent requests so only one fetch runs at a time
|
|
18
|
+
*/
|
|
19
|
+
async getCachedSalt() {
|
|
20
|
+
if (this.isCacheValid()) return this.currentSalt;
|
|
21
|
+
if (this.fetchPromise) return this.fetchPromise;
|
|
22
|
+
this.fetchPromise = this.fetchAndCache().finally(() => {
|
|
23
|
+
this.fetchPromise = null;
|
|
24
|
+
});
|
|
25
|
+
return this.fetchPromise;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Fetches a new salt from the contract and updates the cache
|
|
29
|
+
*/
|
|
30
|
+
async refresh() {
|
|
31
|
+
this.invalidateCache();
|
|
32
|
+
return this.getCachedSalt();
|
|
33
|
+
}
|
|
34
|
+
async fetchAndCache() {
|
|
35
|
+
try {
|
|
36
|
+
this.currentSalt = await fetchSalt(this.nearProvider, this.intentsContract);
|
|
37
|
+
this.lastFetchTime = Date.now();
|
|
38
|
+
return this.currentSalt;
|
|
39
|
+
} catch (err) {
|
|
40
|
+
this.fetchPromise = null;
|
|
41
|
+
throw new Error(`Failed to fetch salt`, { cause: err });
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
isCacheValid() {
|
|
45
|
+
return this.currentSalt != null && Date.now() - this.lastFetchTime < SALT_TTL_MS;
|
|
46
|
+
}
|
|
47
|
+
invalidateCache() {
|
|
48
|
+
this.currentSalt = null;
|
|
49
|
+
this.lastFetchTime = 0;
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* Fetches the current salt from the NEAR contract
|
|
54
|
+
*
|
|
55
|
+
* @param nearProvider Near provider used for querying the contract
|
|
56
|
+
* @param contractId The NEAR contract ID to query
|
|
57
|
+
* @returns Promise resolving to the salt
|
|
58
|
+
*/
|
|
59
|
+
async function fetchSalt(nearProvider, contractId) {
|
|
60
|
+
const value = await utils.queryContract({
|
|
61
|
+
contractId,
|
|
62
|
+
methodName: "current_salt",
|
|
63
|
+
args: {},
|
|
64
|
+
finality: "optimistic",
|
|
65
|
+
nearClient: nearProvider,
|
|
66
|
+
schema: v.string()
|
|
67
|
+
});
|
|
68
|
+
return hex.decode(value);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
//#endregion
|
|
72
|
+
export { SaltManager };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Intent, MultiPayload as MultiPayload$1 } from "lampamazaza-contract-types";
|
|
2
|
+
|
|
3
|
+
//#region src/intents/shared-types.d.ts
|
|
4
|
+
type IntentPrimitive = Intent;
|
|
5
|
+
interface IntentPayload {
|
|
6
|
+
verifying_contract: string;
|
|
7
|
+
deadline: string;
|
|
8
|
+
nonce: string;
|
|
9
|
+
intents: IntentPrimitive[];
|
|
10
|
+
signer_id: string | undefined;
|
|
11
|
+
}
|
|
12
|
+
type IntentPayloadFactory = (intentParams: IntentPayload) => Promise<Partial<IntentPayload>> | Partial<IntentPayload>;
|
|
13
|
+
type IntentHash = string;
|
|
14
|
+
interface RelayParamsDefault {
|
|
15
|
+
multiPayload: MultiPayload$1;
|
|
16
|
+
quoteHashes?: string[];
|
|
17
|
+
}
|
|
18
|
+
type IntentRelayParamsFactory<RelayParams = Omit<RelayParamsDefault, "multiPayload">> = () => RelayParams | Promise<RelayParams>;
|
|
19
|
+
//#endregion
|
|
20
|
+
export { IntentHash, IntentPayload, IntentPayloadFactory, IntentPrimitive, IntentRelayParamsFactory, type MultiPayload$1 as MultiPayload, RelayParamsDefault };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Intent, MultiPayload as MultiPayload$1 } from "lampamazaza-contract-types";
|
|
2
|
+
|
|
3
|
+
//#region src/intents/shared-types.d.ts
|
|
4
|
+
type IntentPrimitive = Intent;
|
|
5
|
+
interface IntentPayload {
|
|
6
|
+
verifying_contract: string;
|
|
7
|
+
deadline: string;
|
|
8
|
+
nonce: string;
|
|
9
|
+
intents: IntentPrimitive[];
|
|
10
|
+
signer_id: string | undefined;
|
|
11
|
+
}
|
|
12
|
+
type IntentPayloadFactory = (intentParams: IntentPayload) => Promise<Partial<IntentPayload>> | Partial<IntentPayload>;
|
|
13
|
+
type IntentHash = string;
|
|
14
|
+
interface RelayParamsDefault {
|
|
15
|
+
multiPayload: MultiPayload$1;
|
|
16
|
+
quoteHashes?: string[];
|
|
17
|
+
}
|
|
18
|
+
type IntentRelayParamsFactory<RelayParams = Omit<RelayParamsDefault, "multiPayload">> = () => RelayParams | Promise<RelayParams>;
|
|
19
|
+
//#endregion
|
|
20
|
+
export { IntentHash, IntentPayload, IntentPayloadFactory, IntentPrimitive, IntentRelayParamsFactory, type MultiPayload$1 as MultiPayload, RelayParamsDefault };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
|
|
2
|
+
let lampamazaza_internal_utils = require("lampamazaza-internal-utils");
|
|
3
|
+
|
|
4
|
+
//#region src/lib/array.ts
|
|
5
|
+
function zip(arr1, arr2) {
|
|
6
|
+
(0, lampamazaza_internal_utils.assert)(arr1.length === arr2.length, "Arrays must have the same length");
|
|
7
|
+
return arr1.map((v, i) => [v, arr2[i]]);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
//#endregion
|
|
11
|
+
exports.zip = zip;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { assert } from "lampamazaza-internal-utils";
|
|
2
|
+
|
|
3
|
+
//#region src/lib/array.ts
|
|
4
|
+
function zip(arr1, arr2) {
|
|
5
|
+
assert(arr1.length === arr2.length, "Arrays must have the same length");
|
|
6
|
+
return arr1.map((v, i) => [v, arr2[i]]);
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
//#endregion
|
|
10
|
+
export { zip };
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
|
|
2
|
+
let lampamazaza_internal_utils = require("lampamazaza-internal-utils");
|
|
3
|
+
|
|
4
|
+
//#region src/lib/caip2.ts
|
|
5
|
+
/**
|
|
6
|
+
* CAIP2 identifiers
|
|
7
|
+
*/
|
|
8
|
+
const Chains = {
|
|
9
|
+
Bitcoin: "bip122:000000000019d6689c085ae165831e93",
|
|
10
|
+
BitcoinCash: "bip122:000000000000000000651ef99cb9fcbe",
|
|
11
|
+
Zcash: "bip122:00040fe8ec8471911baa1db1266ea15d",
|
|
12
|
+
Dogecoin: "bip122:1a91e3dace36e2be3bf030a65679fe82",
|
|
13
|
+
Litecoin: "bip122:12a765e31ffd4059bada1e25190f6e98",
|
|
14
|
+
Ethereum: "eip155:1",
|
|
15
|
+
Optimism: "eip155:10",
|
|
16
|
+
BNB: "eip155:56",
|
|
17
|
+
Gnosis: "eip155:100",
|
|
18
|
+
Polygon: "eip155:137",
|
|
19
|
+
Monad: "eip155:143",
|
|
20
|
+
LayerX: "eip155:196",
|
|
21
|
+
Adi: "eip155:36900",
|
|
22
|
+
Base: "eip155:8453",
|
|
23
|
+
Arbitrum: "eip155:42161",
|
|
24
|
+
Avalanche: "eip155:43114",
|
|
25
|
+
Berachain: "eip155:80085",
|
|
26
|
+
Near: "near:mainnet",
|
|
27
|
+
Solana: "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
|
|
28
|
+
Tron: "tron:27Lqcw",
|
|
29
|
+
XRPL: "xrpl:0",
|
|
30
|
+
TON: "tvm:-239",
|
|
31
|
+
Sui: "sui:mainnet",
|
|
32
|
+
Aptos: "aptos:mainnet",
|
|
33
|
+
Stellar: "stellar:pubnet",
|
|
34
|
+
Cardano: "cip34:1-764824073",
|
|
35
|
+
Starknet: "starknet:SN_MAIN",
|
|
36
|
+
Plasma: "eip155:9745",
|
|
37
|
+
Scroll: "eip155:534352"
|
|
38
|
+
};
|
|
39
|
+
function getEIP155ChainId(chain) {
|
|
40
|
+
(0, lampamazaza_internal_utils.assert)(chain.startsWith("eip155:"), "Chain is not an EIP-155 chain");
|
|
41
|
+
const chainIdStr = chain.slice(7);
|
|
42
|
+
(0, lampamazaza_internal_utils.assert)(chainIdStr.length > 0, "Chain is not an EIP-155 chain");
|
|
43
|
+
const chainId = Number(chainIdStr);
|
|
44
|
+
(0, lampamazaza_internal_utils.assert)(!Number.isNaN(chainId), "Chain is not an EIP-155 chain");
|
|
45
|
+
return chainId;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
//#endregion
|
|
49
|
+
exports.Chains = Chains;
|
|
50
|
+
exports.getEIP155ChainId = getEIP155ChainId;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
//#region src/lib/caip2.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* CAIP2 identifiers
|
|
4
|
+
*/
|
|
5
|
+
declare const Chains: {
|
|
6
|
+
readonly Bitcoin: "bip122:000000000019d6689c085ae165831e93";
|
|
7
|
+
readonly BitcoinCash: "bip122:000000000000000000651ef99cb9fcbe";
|
|
8
|
+
readonly Zcash: "bip122:00040fe8ec8471911baa1db1266ea15d";
|
|
9
|
+
readonly Dogecoin: "bip122:1a91e3dace36e2be3bf030a65679fe82";
|
|
10
|
+
readonly Litecoin: "bip122:12a765e31ffd4059bada1e25190f6e98";
|
|
11
|
+
readonly Ethereum: "eip155:1";
|
|
12
|
+
readonly Optimism: "eip155:10";
|
|
13
|
+
readonly BNB: "eip155:56";
|
|
14
|
+
readonly Gnosis: "eip155:100";
|
|
15
|
+
readonly Polygon: "eip155:137";
|
|
16
|
+
readonly Monad: "eip155:143";
|
|
17
|
+
readonly LayerX: "eip155:196";
|
|
18
|
+
readonly Adi: "eip155:36900";
|
|
19
|
+
readonly Base: "eip155:8453";
|
|
20
|
+
readonly Arbitrum: "eip155:42161";
|
|
21
|
+
readonly Avalanche: "eip155:43114";
|
|
22
|
+
readonly Berachain: "eip155:80085";
|
|
23
|
+
readonly Near: "near:mainnet";
|
|
24
|
+
readonly Solana: "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp";
|
|
25
|
+
readonly Tron: "tron:27Lqcw";
|
|
26
|
+
readonly XRPL: "xrpl:0";
|
|
27
|
+
readonly TON: "tvm:-239";
|
|
28
|
+
readonly Sui: "sui:mainnet";
|
|
29
|
+
readonly Aptos: "aptos:mainnet";
|
|
30
|
+
readonly Stellar: "stellar:pubnet";
|
|
31
|
+
readonly Cardano: "cip34:1-764824073";
|
|
32
|
+
readonly Starknet: "starknet:SN_MAIN";
|
|
33
|
+
readonly Plasma: "eip155:9745";
|
|
34
|
+
readonly Scroll: "eip155:534352";
|
|
35
|
+
};
|
|
36
|
+
type Chain = (typeof Chains)[keyof typeof Chains];
|
|
37
|
+
//#endregion
|
|
38
|
+
export { Chain, Chains };
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
//#region src/lib/caip2.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* CAIP2 identifiers
|
|
4
|
+
*/
|
|
5
|
+
declare const Chains: {
|
|
6
|
+
readonly Bitcoin: "bip122:000000000019d6689c085ae165831e93";
|
|
7
|
+
readonly BitcoinCash: "bip122:000000000000000000651ef99cb9fcbe";
|
|
8
|
+
readonly Zcash: "bip122:00040fe8ec8471911baa1db1266ea15d";
|
|
9
|
+
readonly Dogecoin: "bip122:1a91e3dace36e2be3bf030a65679fe82";
|
|
10
|
+
readonly Litecoin: "bip122:12a765e31ffd4059bada1e25190f6e98";
|
|
11
|
+
readonly Ethereum: "eip155:1";
|
|
12
|
+
readonly Optimism: "eip155:10";
|
|
13
|
+
readonly BNB: "eip155:56";
|
|
14
|
+
readonly Gnosis: "eip155:100";
|
|
15
|
+
readonly Polygon: "eip155:137";
|
|
16
|
+
readonly Monad: "eip155:143";
|
|
17
|
+
readonly LayerX: "eip155:196";
|
|
18
|
+
readonly Adi: "eip155:36900";
|
|
19
|
+
readonly Base: "eip155:8453";
|
|
20
|
+
readonly Arbitrum: "eip155:42161";
|
|
21
|
+
readonly Avalanche: "eip155:43114";
|
|
22
|
+
readonly Berachain: "eip155:80085";
|
|
23
|
+
readonly Near: "near:mainnet";
|
|
24
|
+
readonly Solana: "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp";
|
|
25
|
+
readonly Tron: "tron:27Lqcw";
|
|
26
|
+
readonly XRPL: "xrpl:0";
|
|
27
|
+
readonly TON: "tvm:-239";
|
|
28
|
+
readonly Sui: "sui:mainnet";
|
|
29
|
+
readonly Aptos: "aptos:mainnet";
|
|
30
|
+
readonly Stellar: "stellar:pubnet";
|
|
31
|
+
readonly Cardano: "cip34:1-764824073";
|
|
32
|
+
readonly Starknet: "starknet:SN_MAIN";
|
|
33
|
+
readonly Plasma: "eip155:9745";
|
|
34
|
+
readonly Scroll: "eip155:534352";
|
|
35
|
+
};
|
|
36
|
+
type Chain = (typeof Chains)[keyof typeof Chains];
|
|
37
|
+
//#endregion
|
|
38
|
+
export { Chain, Chains };
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { assert } from "lampamazaza-internal-utils";
|
|
2
|
+
|
|
3
|
+
//#region src/lib/caip2.ts
|
|
4
|
+
/**
|
|
5
|
+
* CAIP2 identifiers
|
|
6
|
+
*/
|
|
7
|
+
const Chains = {
|
|
8
|
+
Bitcoin: "bip122:000000000019d6689c085ae165831e93",
|
|
9
|
+
BitcoinCash: "bip122:000000000000000000651ef99cb9fcbe",
|
|
10
|
+
Zcash: "bip122:00040fe8ec8471911baa1db1266ea15d",
|
|
11
|
+
Dogecoin: "bip122:1a91e3dace36e2be3bf030a65679fe82",
|
|
12
|
+
Litecoin: "bip122:12a765e31ffd4059bada1e25190f6e98",
|
|
13
|
+
Ethereum: "eip155:1",
|
|
14
|
+
Optimism: "eip155:10",
|
|
15
|
+
BNB: "eip155:56",
|
|
16
|
+
Gnosis: "eip155:100",
|
|
17
|
+
Polygon: "eip155:137",
|
|
18
|
+
Monad: "eip155:143",
|
|
19
|
+
LayerX: "eip155:196",
|
|
20
|
+
Adi: "eip155:36900",
|
|
21
|
+
Base: "eip155:8453",
|
|
22
|
+
Arbitrum: "eip155:42161",
|
|
23
|
+
Avalanche: "eip155:43114",
|
|
24
|
+
Berachain: "eip155:80085",
|
|
25
|
+
Near: "near:mainnet",
|
|
26
|
+
Solana: "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
|
|
27
|
+
Tron: "tron:27Lqcw",
|
|
28
|
+
XRPL: "xrpl:0",
|
|
29
|
+
TON: "tvm:-239",
|
|
30
|
+
Sui: "sui:mainnet",
|
|
31
|
+
Aptos: "aptos:mainnet",
|
|
32
|
+
Stellar: "stellar:pubnet",
|
|
33
|
+
Cardano: "cip34:1-764824073",
|
|
34
|
+
Starknet: "starknet:SN_MAIN",
|
|
35
|
+
Plasma: "eip155:9745",
|
|
36
|
+
Scroll: "eip155:534352"
|
|
37
|
+
};
|
|
38
|
+
function getEIP155ChainId(chain) {
|
|
39
|
+
assert(chain.startsWith("eip155:"), "Chain is not an EIP-155 chain");
|
|
40
|
+
const chainIdStr = chain.slice(7);
|
|
41
|
+
assert(chainIdStr.length > 0, "Chain is not an EIP-155 chain");
|
|
42
|
+
const chainId = Number(chainIdStr);
|
|
43
|
+
assert(!Number.isNaN(chainId), "Chain is not an EIP-155 chain");
|
|
44
|
+
return chainId;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
//#endregion
|
|
48
|
+
export { Chains, getEIP155ChainId };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
|
|
2
|
+
const require_caip2 = require('./caip2.cjs');
|
|
3
|
+
const require_object = require('./object.cjs');
|
|
4
|
+
let lampamazaza_internal_utils = require("lampamazaza-internal-utils");
|
|
5
|
+
|
|
6
|
+
//#region src/lib/configure-rpc-config.ts
|
|
7
|
+
function configureEvmRpcUrls(defaultRpcUrls, userRpcUrls, supportedChains) {
|
|
8
|
+
const evmRpcUrls = Object.fromEntries(Object.entries(require_object.pick(Object.assign({}, defaultRpcUrls, userRpcUrls ?? {}), supportedChains)).map(([caip2, urls]) => [require_caip2.getEIP155ChainId(caip2), urls]));
|
|
9
|
+
for (const [chainId, urls] of Object.entries(evmRpcUrls)) (0, lampamazaza_internal_utils.assert)(urls.length > 0, `EVM RPC URLs for chain ${chainId} are not provided`);
|
|
10
|
+
return evmRpcUrls;
|
|
11
|
+
}
|
|
12
|
+
function configureStellarRpcUrls(defaultRpcUrls, userRpcUrls) {
|
|
13
|
+
const stellarRpcUrls = Object.assign({}, defaultRpcUrls, userRpcUrls?.[require_caip2.Chains.Stellar] ?? {});
|
|
14
|
+
for (const [key, value] of Object.entries(stellarRpcUrls)) (0, lampamazaza_internal_utils.assert)(value.length > 0, `Stellar RPC URL for ${key} is not provided`);
|
|
15
|
+
return stellarRpcUrls;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
//#endregion
|
|
19
|
+
exports.configureEvmRpcUrls = configureEvmRpcUrls;
|
|
20
|
+
exports.configureStellarRpcUrls = configureStellarRpcUrls;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Chains, getEIP155ChainId } from "./caip2.js";
|
|
2
|
+
import { pick } from "./object.js";
|
|
3
|
+
import { assert } from "lampamazaza-internal-utils";
|
|
4
|
+
|
|
5
|
+
//#region src/lib/configure-rpc-config.ts
|
|
6
|
+
function configureEvmRpcUrls(defaultRpcUrls, userRpcUrls, supportedChains) {
|
|
7
|
+
const evmRpcUrls = Object.fromEntries(Object.entries(pick(Object.assign({}, defaultRpcUrls, userRpcUrls ?? {}), supportedChains)).map(([caip2, urls]) => [getEIP155ChainId(caip2), urls]));
|
|
8
|
+
for (const [chainId, urls] of Object.entries(evmRpcUrls)) assert(urls.length > 0, `EVM RPC URLs for chain ${chainId} are not provided`);
|
|
9
|
+
return evmRpcUrls;
|
|
10
|
+
}
|
|
11
|
+
function configureStellarRpcUrls(defaultRpcUrls, userRpcUrls) {
|
|
12
|
+
const stellarRpcUrls = Object.assign({}, defaultRpcUrls, userRpcUrls?.[Chains.Stellar] ?? {});
|
|
13
|
+
for (const [key, value] of Object.entries(stellarRpcUrls)) assert(value.length > 0, `Stellar RPC URL for ${key} is not provided`);
|
|
14
|
+
return stellarRpcUrls;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
//#endregion
|
|
18
|
+
export { configureEvmRpcUrls, configureStellarRpcUrls };
|