sablier 3.5.0 → 3.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +17 -0
- package/dist/cjs/evm/helpers.js +2 -1
- package/dist/cjs/evm/helpers.js.map +1 -1
- package/dist/cjs/evm/releases/features.js +34 -21
- package/dist/cjs/evm/releases/features.js.map +1 -1
- package/dist/esm/evm/helpers.js +1 -1
- package/dist/esm/evm/helpers.js.map +1 -1
- package/dist/esm/evm/releases/features.js +30 -17
- package/dist/esm/evm/releases/features.js.map +1 -1
- package/dist/types/evm/helpers.d.ts +1 -1
- package/dist/types/evm/helpers.d.ts.map +1 -1
- package/dist/types/evm/releases/features.d.ts +10 -9
- package/dist/types/evm/releases/features.d.ts.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -9,6 +9,7 @@ The format is based on [Common Changelog](https://common-changelog.org/).
|
|
|
9
9
|
> Starting with v2.0.0, this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). In v1.x, it
|
|
10
10
|
> did not always follow Semantic Versioning.
|
|
11
11
|
|
|
12
|
+
[3.6.0]: https://github.com/sablier-labs/sdk/releases/tag/v3.6.0
|
|
12
13
|
[3.5.0]: https://github.com/sablier-labs/sdk/releases/tag/v3.5.0
|
|
13
14
|
[3.4.0]: https://github.com/sablier-labs/sdk/releases/tag/v3.4.0
|
|
14
15
|
[3.3.5]: https://github.com/sablier-labs/sdk/releases/tag/v3.3.5
|
|
@@ -41,6 +42,22 @@ The format is based on [Common Changelog](https://common-changelog.org/).
|
|
|
41
42
|
[1.1.0]: https://github.com/sablier-labs/sdk/releases/tag/v1.1.0
|
|
42
43
|
[1.0.0]: https://github.com/sablier-labs/sdk/releases/tag/v1.0.0
|
|
43
44
|
|
|
45
|
+
## [3.6.0] - 2026-04-09
|
|
46
|
+
|
|
47
|
+
### Changed
|
|
48
|
+
|
|
49
|
+
- Widen feature helper input types from protocol-specific version enums to `EVM.Version`, returning `undefined` or
|
|
50
|
+
`false` for non-matching protocols ([`718f465`](https://github.com/sablier-labs/sdk/commit/718f465))
|
|
51
|
+
- Rename `usesLockupSplit` to `hasSplitLockupArchitecture`
|
|
52
|
+
([`66598d7`](https://github.com/sablier-labs/sdk/commit/66598d7))
|
|
53
|
+
- Deprecate `usesLockupSplit` in favor of `hasSplitLockupArchitecture`
|
|
54
|
+
([`66598d7`](https://github.com/sablier-labs/sdk/commit/66598d7))
|
|
55
|
+
|
|
56
|
+
### Added
|
|
57
|
+
|
|
58
|
+
- Export `hasSplitLockupArchitecture` from `sablier/evm/helpers`
|
|
59
|
+
([`66598d7`](https://github.com/sablier-labs/sdk/commit/66598d7))
|
|
60
|
+
|
|
44
61
|
## [3.5.0] - 2026-04-07
|
|
45
62
|
|
|
46
63
|
### Added
|
package/dist/cjs/evm/helpers.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.usesLockupSplit = exports.supportsLockupShape = exports.supportsLockupPrbProxy = exports.supportsLockupBatch = exports.isEvmReleasePayable = exports.hasSponsor = exports.hasClaimTo = exports.getLockupReleaseFeatures = exports.getFlowReleaseFeatures = exports.getAirdropsReleaseFeatures = void 0;
|
|
3
|
+
exports.usesLockupSplit = exports.supportsLockupShape = exports.supportsLockupPrbProxy = exports.supportsLockupBatch = exports.isEvmReleasePayable = exports.hasSponsor = exports.hasSplitLockupArchitecture = exports.hasClaimTo = exports.getLockupReleaseFeatures = exports.getFlowReleaseFeatures = exports.getAirdropsReleaseFeatures = void 0;
|
|
4
4
|
exports.getContractExplorerURL = getContractExplorerURL;
|
|
5
5
|
exports.resolveEvmStreamId = resolveEvmStreamId;
|
|
6
6
|
exports.resolveEvmContractByAlias = resolveEvmContractByAlias;
|
|
@@ -13,6 +13,7 @@ Object.defineProperty(exports, "getAirdropsReleaseFeatures", { enumerable: true,
|
|
|
13
13
|
Object.defineProperty(exports, "getFlowReleaseFeatures", { enumerable: true, get: function () { return features_js_1.getFlowReleaseFeatures; } });
|
|
14
14
|
Object.defineProperty(exports, "getLockupReleaseFeatures", { enumerable: true, get: function () { return features_js_1.getLockupReleaseFeatures; } });
|
|
15
15
|
Object.defineProperty(exports, "hasClaimTo", { enumerable: true, get: function () { return features_js_1.hasClaimTo; } });
|
|
16
|
+
Object.defineProperty(exports, "hasSplitLockupArchitecture", { enumerable: true, get: function () { return features_js_1.hasSplitLockupArchitecture; } });
|
|
16
17
|
Object.defineProperty(exports, "hasSponsor", { enumerable: true, get: function () { return features_js_1.hasSponsor; } });
|
|
17
18
|
Object.defineProperty(exports, "isEvmReleasePayable", { enumerable: true, get: function () { return features_js_1.isEvmReleasePayable; } });
|
|
18
19
|
Object.defineProperty(exports, "supportsLockupBatch", { enumerable: true, get: function () { return features_js_1.supportsLockupBatch; } });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/evm/helpers.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/evm/helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import { getContractExplorerURL as getContractExplorerURLInternal } from \"@/src/internal/utils/explorer-url.js\";\nimport type { Sablier, TruncateAddressOptions } from \"@/src/types.js\";\nimport { getAliasCatalog } from \"./contracts/alias-catalog.js\";\nimport { Protocol } from \"./enums.js\";\n\nexport type { PayableEvmProtocol } from \"./releases/features.js\";\nexport {\n getAirdropsReleaseFeatures,\n getFlowReleaseFeatures,\n getLockupReleaseFeatures,\n hasClaimTo,\n hasSplitLockupArchitecture,\n hasSponsor,\n isEvmReleasePayable,\n supportsLockupBatch,\n supportsLockupPrbProxy,\n supportsLockupShape,\n usesLockupSplit,\n} from \"./releases/features.js\";\n\n/**\n * Get the explorer URL for a contract. Compatible with Etherscan, Blockscout, etc.\n * @param explorerURL - The base explorer URL, e.g. https://etherscan.io\n * @param contractAddress - The contract object\n * @returns The explorer URL for the contract, e.g. https://etherscan.io/address/0x123...\n */\nexport function getContractExplorerURL(explorerURL: string, contractAddress: Sablier.EVM.Address) {\n return getContractExplorerURLInternal(explorerURL, contractAddress);\n}\n\n/**\n * Constructs a stream/airdrop entity ID for EVM chains in the format used by Sablier indexers.\n * Format: `{contractAddress}-{chainId}-{tokenId}`\n *\n * The contract address is lowercased for normalization, as EVM addresses are case-insensitive.\n *\n * @param opts - Configuration object\n * @param opts.alias - Contract alias (e.g., \"LL2\", \"LK2\", \"FL2\")\n * @param opts.chainId - Chain ID where the contract is deployed\n * @param opts.tokenId - Stream/airdrop token ID\n * @param opts.protocol - Optional protocol to disambiguate aliases\n * @returns Stream ID in format \"0xabc...-1-123\"\n * @example\n * resolveEvmStreamId({ alias: \"LL2\", chainId: 1, tokenId: 123n })\n * // => \"0xabc...-1-123\"\n */\nexport function resolveEvmStreamId(opts: {\n alias: string;\n chainId: number;\n tokenId: bigint | string | number;\n protocol?: Sablier.EVM.Protocol;\n}): string {\n const { alias, chainId, tokenId, protocol } = opts;\n\n const contract = resolveEvmContractByAlias({ alias, chainId, protocol });\n return `${contract.address.toLowerCase()}-${chainId}-${tokenId}`;\n}\n\n/**\n * Resolves an EVM contract by its alias from the alias catalog.\n *\n * @param opts - Configuration object\n * @param opts.alias - Contract alias (e.g., \"LL2\", \"LK2\", \"FL2\")\n * @param opts.chainId - Chain ID where the contract is deployed\n * @param opts.protocol - Optional protocol to disambiguate aliases that exist in multiple protocols\n * @returns The resolved contract\n * @throws Error if alias is not found or is ambiguous without protocol specified\n * @example\n * resolveEvmContractByAlias({ alias: \"LL2\", chainId: 1 })\n * // => { address: \"0x...\", name: \"SablierLockupLinear\", ... }\n */\nexport function resolveEvmContractByAlias(opts: {\n alias: string;\n chainId: number;\n protocol?: Sablier.EVM.Protocol;\n}): Sablier.EVM.Contract {\n const { alias, chainId, protocol } = opts;\n const aliasCatalog = getAliasCatalog();\n\n if (protocol) {\n const contract = aliasCatalog[protocol]?.[chainId]?.[alias];\n if (!contract) {\n throw new Error(\n `Sablier SDK: Unknown EVM contract alias \"${alias}\" on chain ${chainId} for protocol \"${protocol}\"`\n );\n }\n return contract;\n }\n\n const protocols: Sablier.EVM.Protocol[] = [\n Protocol.Airdrops,\n Protocol.Bob,\n Protocol.Flow,\n Protocol.Legacy,\n Protocol.Lockup,\n ];\n\n const matches = protocols\n .map((p) => aliasCatalog[p]?.[chainId]?.[alias])\n .filter(Boolean) as Sablier.EVM.Contract[];\n\n if (matches.length === 0) {\n throw new Error(`Sablier SDK: Unknown EVM contract alias \"${alias}\" on chain ${chainId}`);\n }\n\n if (matches.length > 1) {\n throw new Error(\n `Sablier SDK: Ambiguous EVM contract alias \"${alias}\" on chain ${chainId}; specify protocol`\n );\n }\n\n return matches[0];\n}\n\n/**\n * Truncate an Ethereum address for display purposes.\n * @param address - The Ethereum address to truncate (0x-prefixed)\n * @param options - Truncation options with start/end character counts (default: 4 each, must be >= 1)\n * @returns Truncated address in format \"0xcafe...beef\" or original if too short\n * @example\n * truncateEvmAddress(\"0x1234567890abcdef1234567890abcdef12345678\") // \"0x1234...5678\"\n * truncateEvmAddress(\"0x1234567890abcdef1234567890abcdef12345678\", { start: 6, end: 6 }) // \"0x123456...345678\"\n * truncateEvmAddress(\"0x1234567890abcdef1234567890abcdef12345678\", { start: 2, end: 6 }) // \"0x12...345678\"\n * truncateEvmAddress(\"0x123\") // \"0x123\" (too short, returns original)\n */\nexport function truncateEvmAddress(\n address: Sablier.EVM.Address,\n options?: TruncateAddressOptions\n): string {\n if (!address) {\n return address;\n }\n\n const start = options?.start ?? 4;\n const end = options?.end ?? 4;\n const minLength = 2 + start + end;\n\n if (address.length <= minLength) {\n return address;\n }\n\n const prefix = address.slice(0, 2 + start);\n const suffix = end === 0 ? \"\" : address.slice(-end);\n\n return `${prefix}...${suffix}`;\n}\n"]}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.evmReleaseFeatures = void 0;
|
|
4
|
-
exports.getEvmReleaseFeatures = getEvmReleaseFeatures;
|
|
3
|
+
exports.usesLockupSplit = exports.evmReleaseFeatures = void 0;
|
|
5
4
|
exports.getAirdropsReleaseFeatures = getAirdropsReleaseFeatures;
|
|
5
|
+
exports.getEvmReleaseFeatures = getEvmReleaseFeatures;
|
|
6
6
|
exports.getFlowReleaseFeatures = getFlowReleaseFeatures;
|
|
7
7
|
exports.getLockupReleaseFeatures = getLockupReleaseFeatures;
|
|
8
|
-
exports.isEvmReleasePayable = isEvmReleasePayable;
|
|
9
8
|
exports.hasClaimTo = hasClaimTo;
|
|
10
9
|
exports.hasSponsor = hasSponsor;
|
|
10
|
+
exports.hasSplitLockupArchitecture = hasSplitLockupArchitecture;
|
|
11
|
+
exports.isEvmReleasePayable = isEvmReleasePayable;
|
|
11
12
|
exports.supportsLockupBatch = supportsLockupBatch;
|
|
12
13
|
exports.supportsLockupPrbProxy = supportsLockupPrbProxy;
|
|
13
|
-
exports.usesLockupSplit = usesLockupSplit;
|
|
14
14
|
exports.supportsLockupShape = supportsLockupShape;
|
|
15
15
|
const enums_js_1 = require("../../evm/enums.js");
|
|
16
16
|
function deepFreeze(value) {
|
|
@@ -110,18 +110,40 @@ function normalizePayableReleaseInput(releaseOrProtocol, version) {
|
|
|
110
110
|
}
|
|
111
111
|
return { protocol: releaseOrProtocol, version };
|
|
112
112
|
}
|
|
113
|
+
function getAirdropsReleaseFeatures(version) {
|
|
114
|
+
const registry = exports.evmReleaseFeatures[enums_js_1.Protocol.Airdrops];
|
|
115
|
+
if (!(version in registry)) {
|
|
116
|
+
return undefined;
|
|
117
|
+
}
|
|
118
|
+
return registry[version];
|
|
119
|
+
}
|
|
113
120
|
function getEvmReleaseFeatures(protocol, version) {
|
|
114
121
|
return evmReleaseFeatureRegistry[protocol][version];
|
|
115
122
|
}
|
|
116
|
-
function getAirdropsReleaseFeatures(version) {
|
|
117
|
-
return getEvmReleaseFeatures(enums_js_1.Protocol.Airdrops, version);
|
|
118
|
-
}
|
|
119
123
|
function getFlowReleaseFeatures(version) {
|
|
120
|
-
|
|
124
|
+
const registry = exports.evmReleaseFeatures[enums_js_1.Protocol.Flow];
|
|
125
|
+
if (!(version in registry)) {
|
|
126
|
+
return undefined;
|
|
127
|
+
}
|
|
128
|
+
return registry[version];
|
|
121
129
|
}
|
|
122
130
|
function getLockupReleaseFeatures(version) {
|
|
123
|
-
|
|
131
|
+
const registry = exports.evmReleaseFeatures[enums_js_1.Protocol.Lockup];
|
|
132
|
+
if (!(version in registry)) {
|
|
133
|
+
return undefined;
|
|
134
|
+
}
|
|
135
|
+
return registry[version];
|
|
124
136
|
}
|
|
137
|
+
function hasClaimTo(version) {
|
|
138
|
+
return getAirdropsReleaseFeatures(version)?.claimTo ?? false;
|
|
139
|
+
}
|
|
140
|
+
function hasSponsor(version) {
|
|
141
|
+
return getAirdropsReleaseFeatures(version)?.sponsor ?? false;
|
|
142
|
+
}
|
|
143
|
+
function hasSplitLockupArchitecture(version) {
|
|
144
|
+
return getLockupReleaseFeatures(version)?.legacyAbi ?? false;
|
|
145
|
+
}
|
|
146
|
+
exports.usesLockupSplit = hasSplitLockupArchitecture;
|
|
125
147
|
function isEvmReleasePayable(releaseOrProtocol, version) {
|
|
126
148
|
const release = normalizePayableReleaseInput(releaseOrProtocol, version);
|
|
127
149
|
if (!isPayableEvmRelease(release)) {
|
|
@@ -137,22 +159,13 @@ function isEvmReleasePayable(releaseOrProtocol, version) {
|
|
|
137
159
|
}
|
|
138
160
|
return releaseFeatures.payable;
|
|
139
161
|
}
|
|
140
|
-
function hasClaimTo(version) {
|
|
141
|
-
return getAirdropsReleaseFeatures(version).claimTo;
|
|
142
|
-
}
|
|
143
|
-
function hasSponsor(version) {
|
|
144
|
-
return getAirdropsReleaseFeatures(version).sponsor;
|
|
145
|
-
}
|
|
146
162
|
function supportsLockupBatch(version) {
|
|
147
|
-
return getLockupReleaseFeatures(version)
|
|
163
|
+
return getLockupReleaseFeatures(version)?.batch ?? false;
|
|
148
164
|
}
|
|
149
165
|
function supportsLockupPrbProxy(version) {
|
|
150
|
-
return getLockupReleaseFeatures(version)
|
|
151
|
-
}
|
|
152
|
-
function usesLockupSplit(version) {
|
|
153
|
-
return getLockupReleaseFeatures(version).legacyAbi;
|
|
166
|
+
return getLockupReleaseFeatures(version)?.prbProxy ?? false;
|
|
154
167
|
}
|
|
155
168
|
function supportsLockupShape(version) {
|
|
156
|
-
return getLockupReleaseFeatures(version)
|
|
169
|
+
return getLockupReleaseFeatures(version)?.shape ?? false;
|
|
157
170
|
}
|
|
158
171
|
//# sourceMappingURL=features.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features.js","sourceRoot":"","sources":["../../../../src/evm/releases/features.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @file Canonical capability registry for every shipped EVM release.\n *\n * Release builders attach these feature bags to exported release objects, and\n * helper functions read from the same registry so version-dependent behavior\n * stays defined in one place.\n */\nimport { Protocol, Version } from \"@/src/evm/enums.js\";\nimport type { Sablier } from \"@/src/types.js\";\n\n/* -------------------------------------------------------------------------- */\n/* TYPES */\n/* -------------------------------------------------------------------------- */\n\nexport type EvmReleaseVersionByProtocol = {\n airdrops: Sablier.EVM.Version.Airdrops;\n bob: Sablier.EVM.Version.Bob;\n flow: Sablier.EVM.Version.Flow;\n legacy: Sablier.EVM.Version.Legacy;\n lockup: Sablier.EVM.Version.Lockup;\n};\n\nexport type EvmReleaseFeatureSetByProtocol = {\n airdrops: Sablier.EVM.AirdropsReleaseFeatures;\n bob: Sablier.EVM.EmptyReleaseFeatures;\n flow: Sablier.EVM.FlowReleaseFeatures;\n legacy: Sablier.EVM.EmptyReleaseFeatures;\n lockup: Sablier.EVM.LockupReleaseFeatures;\n};\n\ntype EvmReleaseFeatureRegistry = {\n [TProtocol in keyof EvmReleaseVersionByProtocol]: Record<\n EvmReleaseVersionByProtocol[TProtocol],\n EvmReleaseFeatureSetByProtocol[TProtocol]\n >;\n};\n\nexport type ReleaseFeaturesForProtocol<TProtocol extends keyof EvmReleaseFeatureSetByProtocol> =\n EvmReleaseFeatureSetByProtocol[TProtocol];\n\ntype ProtocolFeatureSet<TProtocol extends keyof EvmReleaseFeatureSetByProtocol> =\n EvmReleaseFeatureSetByProtocol[TProtocol];\n\ntype ProtocolWithBooleanFeature<TFeature extends PropertyKey> = {\n [TProtocol in keyof EvmReleaseFeatureSetByProtocol]: ProtocolFeatureSet<TProtocol> extends Record<\n TFeature,\n boolean\n >\n ? TProtocol\n : never;\n}[keyof EvmReleaseFeatureSetByProtocol];\n\ntype EvmReleaseReference = Pick<Sablier.EVM.Release, \"protocol\" | \"version\">;\ntype PayableEvmReleaseReference = {\n [TProtocol in PayableEvmProtocol]: {\n protocol: TProtocol;\n version: EvmReleaseVersionByProtocol[TProtocol];\n };\n}[PayableEvmProtocol];\n\nfunction deepFreeze<T>(value: T): T {\n if (typeof value !== \"object\" || value === null || Object.isFrozen(value)) {\n return value;\n }\n\n for (const nestedValue of Object.values(value as Record<string, unknown>)) {\n deepFreeze(nestedValue);\n }\n\n return Object.freeze(value);\n}\n\nconst emptyReleaseFeatures = deepFreeze({} as const satisfies Sablier.EVM.EmptyReleaseFeatures);\n\n/**\n * Protocol/version feature matrix used by both release resolvers and public helpers.\n */\nexport const evmReleaseFeatures = deepFreeze({\n [Protocol.Airdrops]: {\n [Version.Airdrops.V1_1]: { claimTo: false, payable: false, sponsor: false },\n [Version.Airdrops.V1_2]: { claimTo: false, payable: false, sponsor: false },\n [Version.Airdrops.V1_3]: { claimTo: false, payable: true, sponsor: false },\n [Version.Airdrops.V2_0]: { claimTo: true, payable: true, sponsor: false },\n [Version.Airdrops.V3_0]: { claimTo: true, payable: true, sponsor: true },\n },\n [Protocol.Bob]: {\n [Version.Bob.V1_0]: emptyReleaseFeatures,\n },\n [Protocol.Flow]: {\n [Version.Flow.V1_0]: { payable: false },\n [Version.Flow.V1_1]: { payable: true },\n [Version.Flow.V2_0]: { payable: true },\n [Version.Flow.V3_0]: { payable: true },\n },\n [Protocol.Legacy]: {\n [Version.Legacy.V1_0]: emptyReleaseFeatures,\n [Version.Legacy.V1_1]: emptyReleaseFeatures,\n },\n [Protocol.Lockup]: {\n [Version.Lockup.V1_0]: {\n batch: false,\n legacyAbi: true,\n payable: false,\n prbProxy: true,\n shape: false,\n },\n [Version.Lockup.V1_1]: {\n batch: false,\n legacyAbi: true,\n payable: false,\n prbProxy: false,\n shape: false,\n },\n [Version.Lockup.V1_2]: {\n batch: false,\n legacyAbi: false,\n payable: false,\n prbProxy: false,\n shape: false,\n },\n [Version.Lockup.V2_0]: {\n batch: true,\n legacyAbi: false,\n payable: true,\n prbProxy: false,\n shape: true,\n },\n [Version.Lockup.V3_0]: {\n batch: true,\n legacyAbi: false,\n payable: true,\n prbProxy: false,\n shape: true,\n },\n [Version.Lockup.V4_0]: {\n batch: true,\n legacyAbi: false,\n payable: true,\n prbProxy: false,\n shape: true,\n },\n },\n} as const satisfies EvmReleaseFeatureRegistry);\n\nexport type PayableEvmProtocol = ProtocolWithBooleanFeature<\"payable\">;\n\n/* -------------------------------------------------------------------------- */\n/* PRIVATE HELPERS */\n/* -------------------------------------------------------------------------- */\n\nconst evmReleaseFeatureRegistry: EvmReleaseFeatureRegistry = evmReleaseFeatures;\n\ntype PayableReleaseFeatureRegistry = {\n [TProtocol in PayableEvmProtocol]: Record<\n EvmReleaseVersionByProtocol[TProtocol],\n Pick<ProtocolFeatureSet<TProtocol>, \"payable\">\n >;\n};\n\nconst payableReleaseFeatureRegistry = deepFreeze({\n [Protocol.Airdrops]: evmReleaseFeatures[Protocol.Airdrops],\n [Protocol.Flow]: evmReleaseFeatures[Protocol.Flow],\n [Protocol.Lockup]: evmReleaseFeatures[Protocol.Lockup],\n} satisfies PayableReleaseFeatureRegistry);\n\n/**\n * Narrows protocol checks for helpers that only apply to fee-charging releases.\n */\nfunction isPayableEvmProtocol(protocol: Sablier.EVM.Protocol): protocol is PayableEvmProtocol {\n return protocol in payableReleaseFeatureRegistry;\n}\n\n/**\n * Narrows a release descriptor to protocols whose feature bag includes a payable flag.\n */\nfunction isPayableEvmRelease(release: EvmReleaseReference): release is PayableEvmReleaseReference {\n return isPayableEvmProtocol(release.protocol);\n}\n\n/**\n * Normalizes the supported payable helper overloads to the canonical release shape.\n */\nfunction normalizePayableReleaseInput(\n releaseOrProtocol: EvmReleaseReference | Sablier.EVM.Protocol,\n version?: Sablier.EVM.Version\n): EvmReleaseReference {\n if (typeof releaseOrProtocol !== \"string\") {\n return releaseOrProtocol;\n }\n\n if (!version) {\n throw new Error('Sablier SDK: Missing \"version\" for isEvmReleasePayable(protocol, version)');\n }\n\n return { protocol: releaseOrProtocol, version };\n}\n\n/* -------------------------------------------------------------------------- */\n/* FEATURES */\n/* -------------------------------------------------------------------------- */\n\n/**\n * Returns the protocol-specific feature bag for a single EVM release.\n */\nexport function getEvmReleaseFeatures<TProtocol extends keyof EvmReleaseFeatureSetByProtocol>(\n protocol: TProtocol,\n version: EvmReleaseVersionByProtocol[TProtocol]\n): ReleaseFeaturesForProtocol<TProtocol> {\n return evmReleaseFeatureRegistry[protocol][version] as ReleaseFeaturesForProtocol<TProtocol>;\n}\n\n/**\n * Reads the airdrops capability matrix for one released version.\n */\nexport function getAirdropsReleaseFeatures(\n version: Sablier.EVM.Version.Airdrops\n): Sablier.EVM.AirdropsReleaseFeatures {\n return getEvmReleaseFeatures(Protocol.Airdrops, version);\n}\n\n/**\n * Reads the flow capability matrix for one released version.\n */\nexport function getFlowReleaseFeatures(\n version: Sablier.EVM.Version.Flow\n): Sablier.EVM.FlowReleaseFeatures {\n return getEvmReleaseFeatures(Protocol.Flow, version);\n}\n\n/**\n * Reads the lockup capability matrix for one released version.\n */\nexport function getLockupReleaseFeatures(\n version: Sablier.EVM.Version.Lockup\n): Sablier.EVM.LockupReleaseFeatures {\n return getEvmReleaseFeatures(Protocol.Lockup, version);\n}\n\n/**\n * Returns whether a release charges native-token fees on claim or withdraw operations.\n */\nexport function isEvmReleasePayable(release: EvmReleaseReference): boolean;\n/**\n * @deprecated Pass a release object instead. This overload will be removed in the next major version (v4).\n */\nexport function isEvmReleasePayable(\n protocol: Sablier.EVM.Protocol,\n version: Sablier.EVM.Version\n): boolean;\nexport function isEvmReleasePayable(\n releaseOrProtocol: EvmReleaseReference | Sablier.EVM.Protocol,\n version?: Sablier.EVM.Version\n): boolean {\n const release = normalizePayableReleaseInput(releaseOrProtocol, version);\n\n if (!isPayableEvmRelease(release)) {\n return false;\n }\n\n const protocolRegistry = payableReleaseFeatureRegistry[release.protocol] as\n | Record<Sablier.EVM.Version, { payable: boolean }>\n | undefined;\n\n if (!protocolRegistry) {\n return false;\n }\n\n const releaseFeatures = protocolRegistry[release.version];\n\n if (!releaseFeatures) {\n return false;\n }\n\n return releaseFeatures.payable;\n}\n\n/**\n * Returns whether the airdrops release supports the `claimTo` function for claiming to a third-party address.\n */\nexport function hasClaimTo(version: Sablier.EVM.Version.Airdrops): boolean {\n return getAirdropsReleaseFeatures(version).claimTo;\n}\n\n/**\n * Returns whether the airdrops release supports sponsor-driven claims.\n */\nexport function hasSponsor(version: Sablier.EVM.Version.Airdrops): boolean {\n return getAirdropsReleaseFeatures(version).sponsor;\n}\n\n/**\n * Returns whether the lockup release exposes batch create or withdraw flows.\n */\nexport function supportsLockupBatch(version: Sablier.EVM.Version.Lockup): boolean {\n return getLockupReleaseFeatures(version).batch;\n}\n\n/**\n * Returns whether the lockup release integrates with PRBProxy.\n */\nexport function supportsLockupPrbProxy(version: Sablier.EVM.Version.Lockup): boolean {\n return getLockupReleaseFeatures(version).prbProxy;\n}\n\n/**\n * Returns whether the lockup release uses the split ABI layout.\n */\nexport function usesLockupSplit(version: Sablier.EVM.Version.Lockup): boolean {\n return getLockupReleaseFeatures(version).legacyAbi;\n}\n\n/**\n * Returns whether the lockup release stores shape as an on-chain parameter.\n */\nexport function supportsLockupShape(version: Sablier.EVM.Version.Lockup): boolean {\n return getLockupReleaseFeatures(version).shape;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"features.js","sourceRoot":"","sources":["../../../../src/evm/releases/features.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @file Canonical capability registry for every shipped EVM release.\n *\n * Release builders attach these feature bags to exported release objects, and\n * helper functions read from the same registry so version-dependent behavior\n * stays defined in one place.\n */\nimport { Protocol, Version } from \"@/src/evm/enums.js\";\nimport type { Sablier } from \"@/src/types.js\";\n\n/* -------------------------------------------------------------------------- */\n/* TYPES */\n/* -------------------------------------------------------------------------- */\n\nexport type EvmReleaseVersionByProtocol = {\n airdrops: Sablier.EVM.Version.Airdrops;\n bob: Sablier.EVM.Version.Bob;\n flow: Sablier.EVM.Version.Flow;\n legacy: Sablier.EVM.Version.Legacy;\n lockup: Sablier.EVM.Version.Lockup;\n};\n\nexport type EvmReleaseFeatureSetByProtocol = {\n airdrops: Sablier.EVM.AirdropsReleaseFeatures;\n bob: Sablier.EVM.EmptyReleaseFeatures;\n flow: Sablier.EVM.FlowReleaseFeatures;\n legacy: Sablier.EVM.EmptyReleaseFeatures;\n lockup: Sablier.EVM.LockupReleaseFeatures;\n};\n\ntype EvmReleaseFeatureRegistry = {\n [TProtocol in keyof EvmReleaseVersionByProtocol]: Record<\n EvmReleaseVersionByProtocol[TProtocol],\n EvmReleaseFeatureSetByProtocol[TProtocol]\n >;\n};\n\nexport type ReleaseFeaturesForProtocol<TProtocol extends keyof EvmReleaseFeatureSetByProtocol> =\n EvmReleaseFeatureSetByProtocol[TProtocol];\n\ntype ProtocolFeatureSet<TProtocol extends keyof EvmReleaseFeatureSetByProtocol> =\n EvmReleaseFeatureSetByProtocol[TProtocol];\n\ntype ProtocolWithBooleanFeature<TFeature extends PropertyKey> = {\n [TProtocol in keyof EvmReleaseFeatureSetByProtocol]: ProtocolFeatureSet<TProtocol> extends Record<\n TFeature,\n boolean\n >\n ? TProtocol\n : never;\n}[keyof EvmReleaseFeatureSetByProtocol];\n\ntype EvmReleaseReference = Pick<Sablier.EVM.Release, \"protocol\" | \"version\">;\ntype PayableEvmReleaseReference = {\n [TProtocol in PayableEvmProtocol]: {\n protocol: TProtocol;\n version: EvmReleaseVersionByProtocol[TProtocol];\n };\n}[PayableEvmProtocol];\n\nfunction deepFreeze<T>(value: T): T {\n if (typeof value !== \"object\" || value === null || Object.isFrozen(value)) {\n return value;\n }\n\n for (const nestedValue of Object.values(value as Record<string, unknown>)) {\n deepFreeze(nestedValue);\n }\n\n return Object.freeze(value);\n}\n\nconst emptyReleaseFeatures = deepFreeze({} as const satisfies Sablier.EVM.EmptyReleaseFeatures);\n\n/**\n * Protocol/version feature matrix used by both release resolvers and public helpers.\n */\nexport const evmReleaseFeatures = deepFreeze({\n [Protocol.Airdrops]: {\n [Version.Airdrops.V1_1]: { claimTo: false, payable: false, sponsor: false },\n [Version.Airdrops.V1_2]: { claimTo: false, payable: false, sponsor: false },\n [Version.Airdrops.V1_3]: { claimTo: false, payable: true, sponsor: false },\n [Version.Airdrops.V2_0]: { claimTo: true, payable: true, sponsor: false },\n [Version.Airdrops.V3_0]: { claimTo: true, payable: true, sponsor: true },\n },\n [Protocol.Bob]: {\n [Version.Bob.V1_0]: emptyReleaseFeatures,\n },\n [Protocol.Flow]: {\n [Version.Flow.V1_0]: { payable: false },\n [Version.Flow.V1_1]: { payable: true },\n [Version.Flow.V2_0]: { payable: true },\n [Version.Flow.V3_0]: { payable: true },\n },\n [Protocol.Legacy]: {\n [Version.Legacy.V1_0]: emptyReleaseFeatures,\n [Version.Legacy.V1_1]: emptyReleaseFeatures,\n },\n [Protocol.Lockup]: {\n [Version.Lockup.V1_0]: {\n batch: false,\n legacyAbi: true,\n payable: false,\n prbProxy: true,\n shape: false,\n },\n [Version.Lockup.V1_1]: {\n batch: false,\n legacyAbi: true,\n payable: false,\n prbProxy: false,\n shape: false,\n },\n [Version.Lockup.V1_2]: {\n batch: false,\n legacyAbi: false,\n payable: false,\n prbProxy: false,\n shape: false,\n },\n [Version.Lockup.V2_0]: {\n batch: true,\n legacyAbi: false,\n payable: true,\n prbProxy: false,\n shape: true,\n },\n [Version.Lockup.V3_0]: {\n batch: true,\n legacyAbi: false,\n payable: true,\n prbProxy: false,\n shape: true,\n },\n [Version.Lockup.V4_0]: {\n batch: true,\n legacyAbi: false,\n payable: true,\n prbProxy: false,\n shape: true,\n },\n },\n} as const satisfies EvmReleaseFeatureRegistry);\n\nexport type PayableEvmProtocol = ProtocolWithBooleanFeature<\"payable\">;\n\n/* -------------------------------------------------------------------------- */\n/* PRIVATE HELPERS */\n/* -------------------------------------------------------------------------- */\n\nconst evmReleaseFeatureRegistry: EvmReleaseFeatureRegistry = evmReleaseFeatures;\n\ntype PayableReleaseFeatureRegistry = {\n [TProtocol in PayableEvmProtocol]: Record<\n EvmReleaseVersionByProtocol[TProtocol],\n Pick<ProtocolFeatureSet<TProtocol>, \"payable\">\n >;\n};\n\nconst payableReleaseFeatureRegistry = deepFreeze({\n [Protocol.Airdrops]: evmReleaseFeatures[Protocol.Airdrops],\n [Protocol.Flow]: evmReleaseFeatures[Protocol.Flow],\n [Protocol.Lockup]: evmReleaseFeatures[Protocol.Lockup],\n} satisfies PayableReleaseFeatureRegistry);\n\n/**\n * Narrows protocol checks for helpers that only apply to fee-charging releases.\n */\nfunction isPayableEvmProtocol(protocol: Sablier.EVM.Protocol): protocol is PayableEvmProtocol {\n return protocol in payableReleaseFeatureRegistry;\n}\n\n/**\n * Narrows a release descriptor to protocols whose feature bag includes a payable flag.\n */\nfunction isPayableEvmRelease(release: EvmReleaseReference): release is PayableEvmReleaseReference {\n return isPayableEvmProtocol(release.protocol);\n}\n\n/**\n * Normalizes the supported payable helper overloads to the canonical release shape.\n */\nfunction normalizePayableReleaseInput(\n releaseOrProtocol: EvmReleaseReference | Sablier.EVM.Protocol,\n version?: Sablier.EVM.Version\n): EvmReleaseReference {\n if (typeof releaseOrProtocol !== \"string\") {\n return releaseOrProtocol;\n }\n\n if (!version) {\n throw new Error('Sablier SDK: Missing \"version\" for isEvmReleasePayable(protocol, version)');\n }\n\n return { protocol: releaseOrProtocol, version };\n}\n\n/* -------------------------------------------------------------------------- */\n/* FEATURES */\n/* -------------------------------------------------------------------------- */\n\n/**\n * Reads the airdrops capability matrix for one released version.\n * Returns `undefined` when the version does not belong to the Airdrops protocol.\n */\nexport function getAirdropsReleaseFeatures(\n version: Sablier.EVM.Version\n): Sablier.EVM.AirdropsReleaseFeatures | undefined {\n const registry = evmReleaseFeatures[Protocol.Airdrops];\n if (!(version in registry)) {\n return undefined;\n }\n return registry[version as Sablier.EVM.Version.Airdrops];\n}\n\n/**\n * Returns the protocol-specific feature bag for a single EVM release.\n */\nexport function getEvmReleaseFeatures<TProtocol extends keyof EvmReleaseFeatureSetByProtocol>(\n protocol: TProtocol,\n version: EvmReleaseVersionByProtocol[TProtocol]\n): ReleaseFeaturesForProtocol<TProtocol> {\n return evmReleaseFeatureRegistry[protocol][version] as ReleaseFeaturesForProtocol<TProtocol>;\n}\n\n/**\n * Reads the flow capability matrix for one released version.\n * Returns `undefined` when the version does not belong to the Flow protocol.\n */\nexport function getFlowReleaseFeatures(\n version: Sablier.EVM.Version\n): Sablier.EVM.FlowReleaseFeatures | undefined {\n const registry = evmReleaseFeatures[Protocol.Flow];\n if (!(version in registry)) {\n return undefined;\n }\n return registry[version as Sablier.EVM.Version.Flow];\n}\n\n/**\n * Reads the lockup capability matrix for one released version.\n * Returns `undefined` when the version does not belong to the Lockup protocol.\n */\nexport function getLockupReleaseFeatures(\n version: Sablier.EVM.Version\n): Sablier.EVM.LockupReleaseFeatures | undefined {\n const registry = evmReleaseFeatures[Protocol.Lockup];\n if (!(version in registry)) {\n return undefined;\n }\n return registry[version as Sablier.EVM.Version.Lockup];\n}\n\n/**\n * Returns whether the airdrops release supports the `claimTo` function for claiming to a third-party address.\n * Returns `false` for non-Airdrops versions.\n */\nexport function hasClaimTo(version: Sablier.EVM.Version): boolean {\n return getAirdropsReleaseFeatures(version)?.claimTo ?? false;\n}\n\n/**\n * Returns whether the airdrops release supports sponsor-driven claims.\n * Returns `false` for non-Airdrops versions.\n */\nexport function hasSponsor(version: Sablier.EVM.Version): boolean {\n return getAirdropsReleaseFeatures(version)?.sponsor ?? false;\n}\n\n/**\n * Returns whether the lockup release uses the split ABI layout.\n * Returns `false` for non-Lockup versions.\n */\nexport function hasSplitLockupArchitecture(version: Sablier.EVM.Version): boolean {\n return getLockupReleaseFeatures(version)?.legacyAbi ?? false;\n}\n\n/** @deprecated Use {@link hasSplitLockupArchitecture} instead. */\nexport const usesLockupSplit = hasSplitLockupArchitecture;\n\n/**\n * Returns whether a release charges native-token fees on claim or withdraw operations.\n */\nexport function isEvmReleasePayable(release: EvmReleaseReference): boolean;\n/**\n * @deprecated Pass a release object instead. This overload will be removed in the next major version (v4).\n */\nexport function isEvmReleasePayable(\n protocol: Sablier.EVM.Protocol,\n version: Sablier.EVM.Version\n): boolean;\nexport function isEvmReleasePayable(\n releaseOrProtocol: EvmReleaseReference | Sablier.EVM.Protocol,\n version?: Sablier.EVM.Version\n): boolean {\n const release = normalizePayableReleaseInput(releaseOrProtocol, version);\n\n if (!isPayableEvmRelease(release)) {\n return false;\n }\n\n const protocolRegistry = payableReleaseFeatureRegistry[release.protocol] as\n | Record<Sablier.EVM.Version, { payable: boolean }>\n | undefined;\n\n if (!protocolRegistry) {\n return false;\n }\n\n const releaseFeatures = protocolRegistry[release.version];\n\n if (!releaseFeatures) {\n return false;\n }\n\n return releaseFeatures.payable;\n}\n\n/**\n * Returns whether the lockup release exposes batch create or withdraw flows.\n * Returns `false` for non-Lockup versions.\n */\nexport function supportsLockupBatch(version: Sablier.EVM.Version): boolean {\n return getLockupReleaseFeatures(version)?.batch ?? false;\n}\n\n/**\n * Returns whether the lockup release integrates with PRBProxy.\n * Returns `false` for non-Lockup versions.\n */\nexport function supportsLockupPrbProxy(version: Sablier.EVM.Version): boolean {\n return getLockupReleaseFeatures(version)?.prbProxy ?? false;\n}\n\n/**\n * Returns whether the lockup release stores shape as an on-chain parameter.\n * Returns `false` for non-Lockup versions.\n */\nexport function supportsLockupShape(version: Sablier.EVM.Version): boolean {\n return getLockupReleaseFeatures(version)?.shape ?? false;\n}\n"]}
|
package/dist/esm/evm/helpers.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { getContractExplorerURL as getContractExplorerURLInternal } from "../internal/utils/explorer-url.js";
|
|
2
2
|
import { getAliasCatalog } from "./contracts/alias-catalog.js";
|
|
3
3
|
import { Protocol } from "./enums.js";
|
|
4
|
-
export { getAirdropsReleaseFeatures, getFlowReleaseFeatures, getLockupReleaseFeatures, hasClaimTo, hasSponsor, isEvmReleasePayable, supportsLockupBatch, supportsLockupPrbProxy, supportsLockupShape, usesLockupSplit, } from "./releases/features.js";
|
|
4
|
+
export { getAirdropsReleaseFeatures, getFlowReleaseFeatures, getLockupReleaseFeatures, hasClaimTo, hasSplitLockupArchitecture, hasSponsor, isEvmReleasePayable, supportsLockupBatch, supportsLockupPrbProxy, supportsLockupShape, usesLockupSplit, } from "./releases/features.js";
|
|
5
5
|
export function getContractExplorerURL(explorerURL, contractAddress) {
|
|
6
6
|
return getContractExplorerURLInternal(explorerURL, contractAddress);
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/evm/helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import { getContractExplorerURL as getContractExplorerURLInternal } from \"@/src/internal/utils/explorer-url.js\";\nimport type { Sablier, TruncateAddressOptions } from \"@/src/types.js\";\nimport { getAliasCatalog } from \"./contracts/alias-catalog.js\";\nimport { Protocol } from \"./enums.js\";\n\nexport type { PayableEvmProtocol } from \"./releases/features.js\";\nexport {\n getAirdropsReleaseFeatures,\n getFlowReleaseFeatures,\n getLockupReleaseFeatures,\n hasClaimTo,\n hasSponsor,\n isEvmReleasePayable,\n supportsLockupBatch,\n supportsLockupPrbProxy,\n supportsLockupShape,\n usesLockupSplit,\n} from \"./releases/features.js\";\n\n/**\n * Get the explorer URL for a contract. Compatible with Etherscan, Blockscout, etc.\n * @param explorerURL - The base explorer URL, e.g. https://etherscan.io\n * @param contractAddress - The contract object\n * @returns The explorer URL for the contract, e.g. https://etherscan.io/address/0x123...\n */\nexport function getContractExplorerURL(explorerURL: string, contractAddress: Sablier.EVM.Address) {\n return getContractExplorerURLInternal(explorerURL, contractAddress);\n}\n\n/**\n * Constructs a stream/airdrop entity ID for EVM chains in the format used by Sablier indexers.\n * Format: `{contractAddress}-{chainId}-{tokenId}`\n *\n * The contract address is lowercased for normalization, as EVM addresses are case-insensitive.\n *\n * @param opts - Configuration object\n * @param opts.alias - Contract alias (e.g., \"LL2\", \"LK2\", \"FL2\")\n * @param opts.chainId - Chain ID where the contract is deployed\n * @param opts.tokenId - Stream/airdrop token ID\n * @param opts.protocol - Optional protocol to disambiguate aliases\n * @returns Stream ID in format \"0xabc...-1-123\"\n * @example\n * resolveEvmStreamId({ alias: \"LL2\", chainId: 1, tokenId: 123n })\n * // => \"0xabc...-1-123\"\n */\nexport function resolveEvmStreamId(opts: {\n alias: string;\n chainId: number;\n tokenId: bigint | string | number;\n protocol?: Sablier.EVM.Protocol;\n}): string {\n const { alias, chainId, tokenId, protocol } = opts;\n\n const contract = resolveEvmContractByAlias({ alias, chainId, protocol });\n return `${contract.address.toLowerCase()}-${chainId}-${tokenId}`;\n}\n\n/**\n * Resolves an EVM contract by its alias from the alias catalog.\n *\n * @param opts - Configuration object\n * @param opts.alias - Contract alias (e.g., \"LL2\", \"LK2\", \"FL2\")\n * @param opts.chainId - Chain ID where the contract is deployed\n * @param opts.protocol - Optional protocol to disambiguate aliases that exist in multiple protocols\n * @returns The resolved contract\n * @throws Error if alias is not found or is ambiguous without protocol specified\n * @example\n * resolveEvmContractByAlias({ alias: \"LL2\", chainId: 1 })\n * // => { address: \"0x...\", name: \"SablierLockupLinear\", ... }\n */\nexport function resolveEvmContractByAlias(opts: {\n alias: string;\n chainId: number;\n protocol?: Sablier.EVM.Protocol;\n}): Sablier.EVM.Contract {\n const { alias, chainId, protocol } = opts;\n const aliasCatalog = getAliasCatalog();\n\n if (protocol) {\n const contract = aliasCatalog[protocol]?.[chainId]?.[alias];\n if (!contract) {\n throw new Error(\n `Sablier SDK: Unknown EVM contract alias \"${alias}\" on chain ${chainId} for protocol \"${protocol}\"`\n );\n }\n return contract;\n }\n\n const protocols: Sablier.EVM.Protocol[] = [\n Protocol.Airdrops,\n Protocol.Bob,\n Protocol.Flow,\n Protocol.Legacy,\n Protocol.Lockup,\n ];\n\n const matches = protocols\n .map((p) => aliasCatalog[p]?.[chainId]?.[alias])\n .filter(Boolean) as Sablier.EVM.Contract[];\n\n if (matches.length === 0) {\n throw new Error(`Sablier SDK: Unknown EVM contract alias \"${alias}\" on chain ${chainId}`);\n }\n\n if (matches.length > 1) {\n throw new Error(\n `Sablier SDK: Ambiguous EVM contract alias \"${alias}\" on chain ${chainId}; specify protocol`\n );\n }\n\n return matches[0];\n}\n\n/**\n * Truncate an Ethereum address for display purposes.\n * @param address - The Ethereum address to truncate (0x-prefixed)\n * @param options - Truncation options with start/end character counts (default: 4 each, must be >= 1)\n * @returns Truncated address in format \"0xcafe...beef\" or original if too short\n * @example\n * truncateEvmAddress(\"0x1234567890abcdef1234567890abcdef12345678\") // \"0x1234...5678\"\n * truncateEvmAddress(\"0x1234567890abcdef1234567890abcdef12345678\", { start: 6, end: 6 }) // \"0x123456...345678\"\n * truncateEvmAddress(\"0x1234567890abcdef1234567890abcdef12345678\", { start: 2, end: 6 }) // \"0x12...345678\"\n * truncateEvmAddress(\"0x123\") // \"0x123\" (too short, returns original)\n */\nexport function truncateEvmAddress(\n address: Sablier.EVM.Address,\n options?: TruncateAddressOptions\n): string {\n if (!address) {\n return address;\n }\n\n const start = options?.start ?? 4;\n const end = options?.end ?? 4;\n const minLength = 2 + start + end;\n\n if (address.length <= minLength) {\n return address;\n }\n\n const prefix = address.slice(0, 2 + start);\n const suffix = end === 0 ? \"\" : address.slice(-end);\n\n return `${prefix}...${suffix}`;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/evm/helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import { getContractExplorerURL as getContractExplorerURLInternal } from \"@/src/internal/utils/explorer-url.js\";\nimport type { Sablier, TruncateAddressOptions } from \"@/src/types.js\";\nimport { getAliasCatalog } from \"./contracts/alias-catalog.js\";\nimport { Protocol } from \"./enums.js\";\n\nexport type { PayableEvmProtocol } from \"./releases/features.js\";\nexport {\n getAirdropsReleaseFeatures,\n getFlowReleaseFeatures,\n getLockupReleaseFeatures,\n hasClaimTo,\n hasSplitLockupArchitecture,\n hasSponsor,\n isEvmReleasePayable,\n supportsLockupBatch,\n supportsLockupPrbProxy,\n supportsLockupShape,\n usesLockupSplit,\n} from \"./releases/features.js\";\n\n/**\n * Get the explorer URL for a contract. Compatible with Etherscan, Blockscout, etc.\n * @param explorerURL - The base explorer URL, e.g. https://etherscan.io\n * @param contractAddress - The contract object\n * @returns The explorer URL for the contract, e.g. https://etherscan.io/address/0x123...\n */\nexport function getContractExplorerURL(explorerURL: string, contractAddress: Sablier.EVM.Address) {\n return getContractExplorerURLInternal(explorerURL, contractAddress);\n}\n\n/**\n * Constructs a stream/airdrop entity ID for EVM chains in the format used by Sablier indexers.\n * Format: `{contractAddress}-{chainId}-{tokenId}`\n *\n * The contract address is lowercased for normalization, as EVM addresses are case-insensitive.\n *\n * @param opts - Configuration object\n * @param opts.alias - Contract alias (e.g., \"LL2\", \"LK2\", \"FL2\")\n * @param opts.chainId - Chain ID where the contract is deployed\n * @param opts.tokenId - Stream/airdrop token ID\n * @param opts.protocol - Optional protocol to disambiguate aliases\n * @returns Stream ID in format \"0xabc...-1-123\"\n * @example\n * resolveEvmStreamId({ alias: \"LL2\", chainId: 1, tokenId: 123n })\n * // => \"0xabc...-1-123\"\n */\nexport function resolveEvmStreamId(opts: {\n alias: string;\n chainId: number;\n tokenId: bigint | string | number;\n protocol?: Sablier.EVM.Protocol;\n}): string {\n const { alias, chainId, tokenId, protocol } = opts;\n\n const contract = resolveEvmContractByAlias({ alias, chainId, protocol });\n return `${contract.address.toLowerCase()}-${chainId}-${tokenId}`;\n}\n\n/**\n * Resolves an EVM contract by its alias from the alias catalog.\n *\n * @param opts - Configuration object\n * @param opts.alias - Contract alias (e.g., \"LL2\", \"LK2\", \"FL2\")\n * @param opts.chainId - Chain ID where the contract is deployed\n * @param opts.protocol - Optional protocol to disambiguate aliases that exist in multiple protocols\n * @returns The resolved contract\n * @throws Error if alias is not found or is ambiguous without protocol specified\n * @example\n * resolveEvmContractByAlias({ alias: \"LL2\", chainId: 1 })\n * // => { address: \"0x...\", name: \"SablierLockupLinear\", ... }\n */\nexport function resolveEvmContractByAlias(opts: {\n alias: string;\n chainId: number;\n protocol?: Sablier.EVM.Protocol;\n}): Sablier.EVM.Contract {\n const { alias, chainId, protocol } = opts;\n const aliasCatalog = getAliasCatalog();\n\n if (protocol) {\n const contract = aliasCatalog[protocol]?.[chainId]?.[alias];\n if (!contract) {\n throw new Error(\n `Sablier SDK: Unknown EVM contract alias \"${alias}\" on chain ${chainId} for protocol \"${protocol}\"`\n );\n }\n return contract;\n }\n\n const protocols: Sablier.EVM.Protocol[] = [\n Protocol.Airdrops,\n Protocol.Bob,\n Protocol.Flow,\n Protocol.Legacy,\n Protocol.Lockup,\n ];\n\n const matches = protocols\n .map((p) => aliasCatalog[p]?.[chainId]?.[alias])\n .filter(Boolean) as Sablier.EVM.Contract[];\n\n if (matches.length === 0) {\n throw new Error(`Sablier SDK: Unknown EVM contract alias \"${alias}\" on chain ${chainId}`);\n }\n\n if (matches.length > 1) {\n throw new Error(\n `Sablier SDK: Ambiguous EVM contract alias \"${alias}\" on chain ${chainId}; specify protocol`\n );\n }\n\n return matches[0];\n}\n\n/**\n * Truncate an Ethereum address for display purposes.\n * @param address - The Ethereum address to truncate (0x-prefixed)\n * @param options - Truncation options with start/end character counts (default: 4 each, must be >= 1)\n * @returns Truncated address in format \"0xcafe...beef\" or original if too short\n * @example\n * truncateEvmAddress(\"0x1234567890abcdef1234567890abcdef12345678\") // \"0x1234...5678\"\n * truncateEvmAddress(\"0x1234567890abcdef1234567890abcdef12345678\", { start: 6, end: 6 }) // \"0x123456...345678\"\n * truncateEvmAddress(\"0x1234567890abcdef1234567890abcdef12345678\", { start: 2, end: 6 }) // \"0x12...345678\"\n * truncateEvmAddress(\"0x123\") // \"0x123\" (too short, returns original)\n */\nexport function truncateEvmAddress(\n address: Sablier.EVM.Address,\n options?: TruncateAddressOptions\n): string {\n if (!address) {\n return address;\n }\n\n const start = options?.start ?? 4;\n const end = options?.end ?? 4;\n const minLength = 2 + start + end;\n\n if (address.length <= minLength) {\n return address;\n }\n\n const prefix = address.slice(0, 2 + start);\n const suffix = end === 0 ? \"\" : address.slice(-end);\n\n return `${prefix}...${suffix}`;\n}\n"]}
|
|
@@ -96,18 +96,40 @@ function normalizePayableReleaseInput(releaseOrProtocol, version) {
|
|
|
96
96
|
}
|
|
97
97
|
return { protocol: releaseOrProtocol, version };
|
|
98
98
|
}
|
|
99
|
+
export function getAirdropsReleaseFeatures(version) {
|
|
100
|
+
const registry = evmReleaseFeatures[Protocol.Airdrops];
|
|
101
|
+
if (!(version in registry)) {
|
|
102
|
+
return undefined;
|
|
103
|
+
}
|
|
104
|
+
return registry[version];
|
|
105
|
+
}
|
|
99
106
|
export function getEvmReleaseFeatures(protocol, version) {
|
|
100
107
|
return evmReleaseFeatureRegistry[protocol][version];
|
|
101
108
|
}
|
|
102
|
-
export function getAirdropsReleaseFeatures(version) {
|
|
103
|
-
return getEvmReleaseFeatures(Protocol.Airdrops, version);
|
|
104
|
-
}
|
|
105
109
|
export function getFlowReleaseFeatures(version) {
|
|
106
|
-
|
|
110
|
+
const registry = evmReleaseFeatures[Protocol.Flow];
|
|
111
|
+
if (!(version in registry)) {
|
|
112
|
+
return undefined;
|
|
113
|
+
}
|
|
114
|
+
return registry[version];
|
|
107
115
|
}
|
|
108
116
|
export function getLockupReleaseFeatures(version) {
|
|
109
|
-
|
|
117
|
+
const registry = evmReleaseFeatures[Protocol.Lockup];
|
|
118
|
+
if (!(version in registry)) {
|
|
119
|
+
return undefined;
|
|
120
|
+
}
|
|
121
|
+
return registry[version];
|
|
122
|
+
}
|
|
123
|
+
export function hasClaimTo(version) {
|
|
124
|
+
return getAirdropsReleaseFeatures(version)?.claimTo ?? false;
|
|
110
125
|
}
|
|
126
|
+
export function hasSponsor(version) {
|
|
127
|
+
return getAirdropsReleaseFeatures(version)?.sponsor ?? false;
|
|
128
|
+
}
|
|
129
|
+
export function hasSplitLockupArchitecture(version) {
|
|
130
|
+
return getLockupReleaseFeatures(version)?.legacyAbi ?? false;
|
|
131
|
+
}
|
|
132
|
+
export const usesLockupSplit = hasSplitLockupArchitecture;
|
|
111
133
|
export function isEvmReleasePayable(releaseOrProtocol, version) {
|
|
112
134
|
const release = normalizePayableReleaseInput(releaseOrProtocol, version);
|
|
113
135
|
if (!isPayableEvmRelease(release)) {
|
|
@@ -123,22 +145,13 @@ export function isEvmReleasePayable(releaseOrProtocol, version) {
|
|
|
123
145
|
}
|
|
124
146
|
return releaseFeatures.payable;
|
|
125
147
|
}
|
|
126
|
-
export function hasClaimTo(version) {
|
|
127
|
-
return getAirdropsReleaseFeatures(version).claimTo;
|
|
128
|
-
}
|
|
129
|
-
export function hasSponsor(version) {
|
|
130
|
-
return getAirdropsReleaseFeatures(version).sponsor;
|
|
131
|
-
}
|
|
132
148
|
export function supportsLockupBatch(version) {
|
|
133
|
-
return getLockupReleaseFeatures(version)
|
|
149
|
+
return getLockupReleaseFeatures(version)?.batch ?? false;
|
|
134
150
|
}
|
|
135
151
|
export function supportsLockupPrbProxy(version) {
|
|
136
|
-
return getLockupReleaseFeatures(version)
|
|
137
|
-
}
|
|
138
|
-
export function usesLockupSplit(version) {
|
|
139
|
-
return getLockupReleaseFeatures(version).legacyAbi;
|
|
152
|
+
return getLockupReleaseFeatures(version)?.prbProxy ?? false;
|
|
140
153
|
}
|
|
141
154
|
export function supportsLockupShape(version) {
|
|
142
|
-
return getLockupReleaseFeatures(version)
|
|
155
|
+
return getLockupReleaseFeatures(version)?.shape ?? false;
|
|
143
156
|
}
|
|
144
157
|
//# sourceMappingURL=features.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features.js","sourceRoot":"","sources":["../../../../src/evm/releases/features.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @file Canonical capability registry for every shipped EVM release.\n *\n * Release builders attach these feature bags to exported release objects, and\n * helper functions read from the same registry so version-dependent behavior\n * stays defined in one place.\n */\nimport { Protocol, Version } from \"@/src/evm/enums.js\";\nimport type { Sablier } from \"@/src/types.js\";\n\n/* -------------------------------------------------------------------------- */\n/* TYPES */\n/* -------------------------------------------------------------------------- */\n\nexport type EvmReleaseVersionByProtocol = {\n airdrops: Sablier.EVM.Version.Airdrops;\n bob: Sablier.EVM.Version.Bob;\n flow: Sablier.EVM.Version.Flow;\n legacy: Sablier.EVM.Version.Legacy;\n lockup: Sablier.EVM.Version.Lockup;\n};\n\nexport type EvmReleaseFeatureSetByProtocol = {\n airdrops: Sablier.EVM.AirdropsReleaseFeatures;\n bob: Sablier.EVM.EmptyReleaseFeatures;\n flow: Sablier.EVM.FlowReleaseFeatures;\n legacy: Sablier.EVM.EmptyReleaseFeatures;\n lockup: Sablier.EVM.LockupReleaseFeatures;\n};\n\ntype EvmReleaseFeatureRegistry = {\n [TProtocol in keyof EvmReleaseVersionByProtocol]: Record<\n EvmReleaseVersionByProtocol[TProtocol],\n EvmReleaseFeatureSetByProtocol[TProtocol]\n >;\n};\n\nexport type ReleaseFeaturesForProtocol<TProtocol extends keyof EvmReleaseFeatureSetByProtocol> =\n EvmReleaseFeatureSetByProtocol[TProtocol];\n\ntype ProtocolFeatureSet<TProtocol extends keyof EvmReleaseFeatureSetByProtocol> =\n EvmReleaseFeatureSetByProtocol[TProtocol];\n\ntype ProtocolWithBooleanFeature<TFeature extends PropertyKey> = {\n [TProtocol in keyof EvmReleaseFeatureSetByProtocol]: ProtocolFeatureSet<TProtocol> extends Record<\n TFeature,\n boolean\n >\n ? TProtocol\n : never;\n}[keyof EvmReleaseFeatureSetByProtocol];\n\ntype EvmReleaseReference = Pick<Sablier.EVM.Release, \"protocol\" | \"version\">;\ntype PayableEvmReleaseReference = {\n [TProtocol in PayableEvmProtocol]: {\n protocol: TProtocol;\n version: EvmReleaseVersionByProtocol[TProtocol];\n };\n}[PayableEvmProtocol];\n\nfunction deepFreeze<T>(value: T): T {\n if (typeof value !== \"object\" || value === null || Object.isFrozen(value)) {\n return value;\n }\n\n for (const nestedValue of Object.values(value as Record<string, unknown>)) {\n deepFreeze(nestedValue);\n }\n\n return Object.freeze(value);\n}\n\nconst emptyReleaseFeatures = deepFreeze({} as const satisfies Sablier.EVM.EmptyReleaseFeatures);\n\n/**\n * Protocol/version feature matrix used by both release resolvers and public helpers.\n */\nexport const evmReleaseFeatures = deepFreeze({\n [Protocol.Airdrops]: {\n [Version.Airdrops.V1_1]: { claimTo: false, payable: false, sponsor: false },\n [Version.Airdrops.V1_2]: { claimTo: false, payable: false, sponsor: false },\n [Version.Airdrops.V1_3]: { claimTo: false, payable: true, sponsor: false },\n [Version.Airdrops.V2_0]: { claimTo: true, payable: true, sponsor: false },\n [Version.Airdrops.V3_0]: { claimTo: true, payable: true, sponsor: true },\n },\n [Protocol.Bob]: {\n [Version.Bob.V1_0]: emptyReleaseFeatures,\n },\n [Protocol.Flow]: {\n [Version.Flow.V1_0]: { payable: false },\n [Version.Flow.V1_1]: { payable: true },\n [Version.Flow.V2_0]: { payable: true },\n [Version.Flow.V3_0]: { payable: true },\n },\n [Protocol.Legacy]: {\n [Version.Legacy.V1_0]: emptyReleaseFeatures,\n [Version.Legacy.V1_1]: emptyReleaseFeatures,\n },\n [Protocol.Lockup]: {\n [Version.Lockup.V1_0]: {\n batch: false,\n legacyAbi: true,\n payable: false,\n prbProxy: true,\n shape: false,\n },\n [Version.Lockup.V1_1]: {\n batch: false,\n legacyAbi: true,\n payable: false,\n prbProxy: false,\n shape: false,\n },\n [Version.Lockup.V1_2]: {\n batch: false,\n legacyAbi: false,\n payable: false,\n prbProxy: false,\n shape: false,\n },\n [Version.Lockup.V2_0]: {\n batch: true,\n legacyAbi: false,\n payable: true,\n prbProxy: false,\n shape: true,\n },\n [Version.Lockup.V3_0]: {\n batch: true,\n legacyAbi: false,\n payable: true,\n prbProxy: false,\n shape: true,\n },\n [Version.Lockup.V4_0]: {\n batch: true,\n legacyAbi: false,\n payable: true,\n prbProxy: false,\n shape: true,\n },\n },\n} as const satisfies EvmReleaseFeatureRegistry);\n\nexport type PayableEvmProtocol = ProtocolWithBooleanFeature<\"payable\">;\n\n/* -------------------------------------------------------------------------- */\n/* PRIVATE HELPERS */\n/* -------------------------------------------------------------------------- */\n\nconst evmReleaseFeatureRegistry: EvmReleaseFeatureRegistry = evmReleaseFeatures;\n\ntype PayableReleaseFeatureRegistry = {\n [TProtocol in PayableEvmProtocol]: Record<\n EvmReleaseVersionByProtocol[TProtocol],\n Pick<ProtocolFeatureSet<TProtocol>, \"payable\">\n >;\n};\n\nconst payableReleaseFeatureRegistry = deepFreeze({\n [Protocol.Airdrops]: evmReleaseFeatures[Protocol.Airdrops],\n [Protocol.Flow]: evmReleaseFeatures[Protocol.Flow],\n [Protocol.Lockup]: evmReleaseFeatures[Protocol.Lockup],\n} satisfies PayableReleaseFeatureRegistry);\n\n/**\n * Narrows protocol checks for helpers that only apply to fee-charging releases.\n */\nfunction isPayableEvmProtocol(protocol: Sablier.EVM.Protocol): protocol is PayableEvmProtocol {\n return protocol in payableReleaseFeatureRegistry;\n}\n\n/**\n * Narrows a release descriptor to protocols whose feature bag includes a payable flag.\n */\nfunction isPayableEvmRelease(release: EvmReleaseReference): release is PayableEvmReleaseReference {\n return isPayableEvmProtocol(release.protocol);\n}\n\n/**\n * Normalizes the supported payable helper overloads to the canonical release shape.\n */\nfunction normalizePayableReleaseInput(\n releaseOrProtocol: EvmReleaseReference | Sablier.EVM.Protocol,\n version?: Sablier.EVM.Version\n): EvmReleaseReference {\n if (typeof releaseOrProtocol !== \"string\") {\n return releaseOrProtocol;\n }\n\n if (!version) {\n throw new Error('Sablier SDK: Missing \"version\" for isEvmReleasePayable(protocol, version)');\n }\n\n return { protocol: releaseOrProtocol, version };\n}\n\n/* -------------------------------------------------------------------------- */\n/* FEATURES */\n/* -------------------------------------------------------------------------- */\n\n/**\n * Returns the protocol-specific feature bag for a single EVM release.\n */\nexport function getEvmReleaseFeatures<TProtocol extends keyof EvmReleaseFeatureSetByProtocol>(\n protocol: TProtocol,\n version: EvmReleaseVersionByProtocol[TProtocol]\n): ReleaseFeaturesForProtocol<TProtocol> {\n return evmReleaseFeatureRegistry[protocol][version] as ReleaseFeaturesForProtocol<TProtocol>;\n}\n\n/**\n * Reads the airdrops capability matrix for one released version.\n */\nexport function getAirdropsReleaseFeatures(\n version: Sablier.EVM.Version.Airdrops\n): Sablier.EVM.AirdropsReleaseFeatures {\n return getEvmReleaseFeatures(Protocol.Airdrops, version);\n}\n\n/**\n * Reads the flow capability matrix for one released version.\n */\nexport function getFlowReleaseFeatures(\n version: Sablier.EVM.Version.Flow\n): Sablier.EVM.FlowReleaseFeatures {\n return getEvmReleaseFeatures(Protocol.Flow, version);\n}\n\n/**\n * Reads the lockup capability matrix for one released version.\n */\nexport function getLockupReleaseFeatures(\n version: Sablier.EVM.Version.Lockup\n): Sablier.EVM.LockupReleaseFeatures {\n return getEvmReleaseFeatures(Protocol.Lockup, version);\n}\n\n/**\n * Returns whether a release charges native-token fees on claim or withdraw operations.\n */\nexport function isEvmReleasePayable(release: EvmReleaseReference): boolean;\n/**\n * @deprecated Pass a release object instead. This overload will be removed in the next major version (v4).\n */\nexport function isEvmReleasePayable(\n protocol: Sablier.EVM.Protocol,\n version: Sablier.EVM.Version\n): boolean;\nexport function isEvmReleasePayable(\n releaseOrProtocol: EvmReleaseReference | Sablier.EVM.Protocol,\n version?: Sablier.EVM.Version\n): boolean {\n const release = normalizePayableReleaseInput(releaseOrProtocol, version);\n\n if (!isPayableEvmRelease(release)) {\n return false;\n }\n\n const protocolRegistry = payableReleaseFeatureRegistry[release.protocol] as\n | Record<Sablier.EVM.Version, { payable: boolean }>\n | undefined;\n\n if (!protocolRegistry) {\n return false;\n }\n\n const releaseFeatures = protocolRegistry[release.version];\n\n if (!releaseFeatures) {\n return false;\n }\n\n return releaseFeatures.payable;\n}\n\n/**\n * Returns whether the airdrops release supports the `claimTo` function for claiming to a third-party address.\n */\nexport function hasClaimTo(version: Sablier.EVM.Version.Airdrops): boolean {\n return getAirdropsReleaseFeatures(version).claimTo;\n}\n\n/**\n * Returns whether the airdrops release supports sponsor-driven claims.\n */\nexport function hasSponsor(version: Sablier.EVM.Version.Airdrops): boolean {\n return getAirdropsReleaseFeatures(version).sponsor;\n}\n\n/**\n * Returns whether the lockup release exposes batch create or withdraw flows.\n */\nexport function supportsLockupBatch(version: Sablier.EVM.Version.Lockup): boolean {\n return getLockupReleaseFeatures(version).batch;\n}\n\n/**\n * Returns whether the lockup release integrates with PRBProxy.\n */\nexport function supportsLockupPrbProxy(version: Sablier.EVM.Version.Lockup): boolean {\n return getLockupReleaseFeatures(version).prbProxy;\n}\n\n/**\n * Returns whether the lockup release uses the split ABI layout.\n */\nexport function usesLockupSplit(version: Sablier.EVM.Version.Lockup): boolean {\n return getLockupReleaseFeatures(version).legacyAbi;\n}\n\n/**\n * Returns whether the lockup release stores shape as an on-chain parameter.\n */\nexport function supportsLockupShape(version: Sablier.EVM.Version.Lockup): boolean {\n return getLockupReleaseFeatures(version).shape;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"features.js","sourceRoot":"","sources":["../../../../src/evm/releases/features.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @file Canonical capability registry for every shipped EVM release.\n *\n * Release builders attach these feature bags to exported release objects, and\n * helper functions read from the same registry so version-dependent behavior\n * stays defined in one place.\n */\nimport { Protocol, Version } from \"@/src/evm/enums.js\";\nimport type { Sablier } from \"@/src/types.js\";\n\n/* -------------------------------------------------------------------------- */\n/* TYPES */\n/* -------------------------------------------------------------------------- */\n\nexport type EvmReleaseVersionByProtocol = {\n airdrops: Sablier.EVM.Version.Airdrops;\n bob: Sablier.EVM.Version.Bob;\n flow: Sablier.EVM.Version.Flow;\n legacy: Sablier.EVM.Version.Legacy;\n lockup: Sablier.EVM.Version.Lockup;\n};\n\nexport type EvmReleaseFeatureSetByProtocol = {\n airdrops: Sablier.EVM.AirdropsReleaseFeatures;\n bob: Sablier.EVM.EmptyReleaseFeatures;\n flow: Sablier.EVM.FlowReleaseFeatures;\n legacy: Sablier.EVM.EmptyReleaseFeatures;\n lockup: Sablier.EVM.LockupReleaseFeatures;\n};\n\ntype EvmReleaseFeatureRegistry = {\n [TProtocol in keyof EvmReleaseVersionByProtocol]: Record<\n EvmReleaseVersionByProtocol[TProtocol],\n EvmReleaseFeatureSetByProtocol[TProtocol]\n >;\n};\n\nexport type ReleaseFeaturesForProtocol<TProtocol extends keyof EvmReleaseFeatureSetByProtocol> =\n EvmReleaseFeatureSetByProtocol[TProtocol];\n\ntype ProtocolFeatureSet<TProtocol extends keyof EvmReleaseFeatureSetByProtocol> =\n EvmReleaseFeatureSetByProtocol[TProtocol];\n\ntype ProtocolWithBooleanFeature<TFeature extends PropertyKey> = {\n [TProtocol in keyof EvmReleaseFeatureSetByProtocol]: ProtocolFeatureSet<TProtocol> extends Record<\n TFeature,\n boolean\n >\n ? TProtocol\n : never;\n}[keyof EvmReleaseFeatureSetByProtocol];\n\ntype EvmReleaseReference = Pick<Sablier.EVM.Release, \"protocol\" | \"version\">;\ntype PayableEvmReleaseReference = {\n [TProtocol in PayableEvmProtocol]: {\n protocol: TProtocol;\n version: EvmReleaseVersionByProtocol[TProtocol];\n };\n}[PayableEvmProtocol];\n\nfunction deepFreeze<T>(value: T): T {\n if (typeof value !== \"object\" || value === null || Object.isFrozen(value)) {\n return value;\n }\n\n for (const nestedValue of Object.values(value as Record<string, unknown>)) {\n deepFreeze(nestedValue);\n }\n\n return Object.freeze(value);\n}\n\nconst emptyReleaseFeatures = deepFreeze({} as const satisfies Sablier.EVM.EmptyReleaseFeatures);\n\n/**\n * Protocol/version feature matrix used by both release resolvers and public helpers.\n */\nexport const evmReleaseFeatures = deepFreeze({\n [Protocol.Airdrops]: {\n [Version.Airdrops.V1_1]: { claimTo: false, payable: false, sponsor: false },\n [Version.Airdrops.V1_2]: { claimTo: false, payable: false, sponsor: false },\n [Version.Airdrops.V1_3]: { claimTo: false, payable: true, sponsor: false },\n [Version.Airdrops.V2_0]: { claimTo: true, payable: true, sponsor: false },\n [Version.Airdrops.V3_0]: { claimTo: true, payable: true, sponsor: true },\n },\n [Protocol.Bob]: {\n [Version.Bob.V1_0]: emptyReleaseFeatures,\n },\n [Protocol.Flow]: {\n [Version.Flow.V1_0]: { payable: false },\n [Version.Flow.V1_1]: { payable: true },\n [Version.Flow.V2_0]: { payable: true },\n [Version.Flow.V3_0]: { payable: true },\n },\n [Protocol.Legacy]: {\n [Version.Legacy.V1_0]: emptyReleaseFeatures,\n [Version.Legacy.V1_1]: emptyReleaseFeatures,\n },\n [Protocol.Lockup]: {\n [Version.Lockup.V1_0]: {\n batch: false,\n legacyAbi: true,\n payable: false,\n prbProxy: true,\n shape: false,\n },\n [Version.Lockup.V1_1]: {\n batch: false,\n legacyAbi: true,\n payable: false,\n prbProxy: false,\n shape: false,\n },\n [Version.Lockup.V1_2]: {\n batch: false,\n legacyAbi: false,\n payable: false,\n prbProxy: false,\n shape: false,\n },\n [Version.Lockup.V2_0]: {\n batch: true,\n legacyAbi: false,\n payable: true,\n prbProxy: false,\n shape: true,\n },\n [Version.Lockup.V3_0]: {\n batch: true,\n legacyAbi: false,\n payable: true,\n prbProxy: false,\n shape: true,\n },\n [Version.Lockup.V4_0]: {\n batch: true,\n legacyAbi: false,\n payable: true,\n prbProxy: false,\n shape: true,\n },\n },\n} as const satisfies EvmReleaseFeatureRegistry);\n\nexport type PayableEvmProtocol = ProtocolWithBooleanFeature<\"payable\">;\n\n/* -------------------------------------------------------------------------- */\n/* PRIVATE HELPERS */\n/* -------------------------------------------------------------------------- */\n\nconst evmReleaseFeatureRegistry: EvmReleaseFeatureRegistry = evmReleaseFeatures;\n\ntype PayableReleaseFeatureRegistry = {\n [TProtocol in PayableEvmProtocol]: Record<\n EvmReleaseVersionByProtocol[TProtocol],\n Pick<ProtocolFeatureSet<TProtocol>, \"payable\">\n >;\n};\n\nconst payableReleaseFeatureRegistry = deepFreeze({\n [Protocol.Airdrops]: evmReleaseFeatures[Protocol.Airdrops],\n [Protocol.Flow]: evmReleaseFeatures[Protocol.Flow],\n [Protocol.Lockup]: evmReleaseFeatures[Protocol.Lockup],\n} satisfies PayableReleaseFeatureRegistry);\n\n/**\n * Narrows protocol checks for helpers that only apply to fee-charging releases.\n */\nfunction isPayableEvmProtocol(protocol: Sablier.EVM.Protocol): protocol is PayableEvmProtocol {\n return protocol in payableReleaseFeatureRegistry;\n}\n\n/**\n * Narrows a release descriptor to protocols whose feature bag includes a payable flag.\n */\nfunction isPayableEvmRelease(release: EvmReleaseReference): release is PayableEvmReleaseReference {\n return isPayableEvmProtocol(release.protocol);\n}\n\n/**\n * Normalizes the supported payable helper overloads to the canonical release shape.\n */\nfunction normalizePayableReleaseInput(\n releaseOrProtocol: EvmReleaseReference | Sablier.EVM.Protocol,\n version?: Sablier.EVM.Version\n): EvmReleaseReference {\n if (typeof releaseOrProtocol !== \"string\") {\n return releaseOrProtocol;\n }\n\n if (!version) {\n throw new Error('Sablier SDK: Missing \"version\" for isEvmReleasePayable(protocol, version)');\n }\n\n return { protocol: releaseOrProtocol, version };\n}\n\n/* -------------------------------------------------------------------------- */\n/* FEATURES */\n/* -------------------------------------------------------------------------- */\n\n/**\n * Reads the airdrops capability matrix for one released version.\n * Returns `undefined` when the version does not belong to the Airdrops protocol.\n */\nexport function getAirdropsReleaseFeatures(\n version: Sablier.EVM.Version\n): Sablier.EVM.AirdropsReleaseFeatures | undefined {\n const registry = evmReleaseFeatures[Protocol.Airdrops];\n if (!(version in registry)) {\n return undefined;\n }\n return registry[version as Sablier.EVM.Version.Airdrops];\n}\n\n/**\n * Returns the protocol-specific feature bag for a single EVM release.\n */\nexport function getEvmReleaseFeatures<TProtocol extends keyof EvmReleaseFeatureSetByProtocol>(\n protocol: TProtocol,\n version: EvmReleaseVersionByProtocol[TProtocol]\n): ReleaseFeaturesForProtocol<TProtocol> {\n return evmReleaseFeatureRegistry[protocol][version] as ReleaseFeaturesForProtocol<TProtocol>;\n}\n\n/**\n * Reads the flow capability matrix for one released version.\n * Returns `undefined` when the version does not belong to the Flow protocol.\n */\nexport function getFlowReleaseFeatures(\n version: Sablier.EVM.Version\n): Sablier.EVM.FlowReleaseFeatures | undefined {\n const registry = evmReleaseFeatures[Protocol.Flow];\n if (!(version in registry)) {\n return undefined;\n }\n return registry[version as Sablier.EVM.Version.Flow];\n}\n\n/**\n * Reads the lockup capability matrix for one released version.\n * Returns `undefined` when the version does not belong to the Lockup protocol.\n */\nexport function getLockupReleaseFeatures(\n version: Sablier.EVM.Version\n): Sablier.EVM.LockupReleaseFeatures | undefined {\n const registry = evmReleaseFeatures[Protocol.Lockup];\n if (!(version in registry)) {\n return undefined;\n }\n return registry[version as Sablier.EVM.Version.Lockup];\n}\n\n/**\n * Returns whether the airdrops release supports the `claimTo` function for claiming to a third-party address.\n * Returns `false` for non-Airdrops versions.\n */\nexport function hasClaimTo(version: Sablier.EVM.Version): boolean {\n return getAirdropsReleaseFeatures(version)?.claimTo ?? false;\n}\n\n/**\n * Returns whether the airdrops release supports sponsor-driven claims.\n * Returns `false` for non-Airdrops versions.\n */\nexport function hasSponsor(version: Sablier.EVM.Version): boolean {\n return getAirdropsReleaseFeatures(version)?.sponsor ?? false;\n}\n\n/**\n * Returns whether the lockup release uses the split ABI layout.\n * Returns `false` for non-Lockup versions.\n */\nexport function hasSplitLockupArchitecture(version: Sablier.EVM.Version): boolean {\n return getLockupReleaseFeatures(version)?.legacyAbi ?? false;\n}\n\n/** @deprecated Use {@link hasSplitLockupArchitecture} instead. */\nexport const usesLockupSplit = hasSplitLockupArchitecture;\n\n/**\n * Returns whether a release charges native-token fees on claim or withdraw operations.\n */\nexport function isEvmReleasePayable(release: EvmReleaseReference): boolean;\n/**\n * @deprecated Pass a release object instead. This overload will be removed in the next major version (v4).\n */\nexport function isEvmReleasePayable(\n protocol: Sablier.EVM.Protocol,\n version: Sablier.EVM.Version\n): boolean;\nexport function isEvmReleasePayable(\n releaseOrProtocol: EvmReleaseReference | Sablier.EVM.Protocol,\n version?: Sablier.EVM.Version\n): boolean {\n const release = normalizePayableReleaseInput(releaseOrProtocol, version);\n\n if (!isPayableEvmRelease(release)) {\n return false;\n }\n\n const protocolRegistry = payableReleaseFeatureRegistry[release.protocol] as\n | Record<Sablier.EVM.Version, { payable: boolean }>\n | undefined;\n\n if (!protocolRegistry) {\n return false;\n }\n\n const releaseFeatures = protocolRegistry[release.version];\n\n if (!releaseFeatures) {\n return false;\n }\n\n return releaseFeatures.payable;\n}\n\n/**\n * Returns whether the lockup release exposes batch create or withdraw flows.\n * Returns `false` for non-Lockup versions.\n */\nexport function supportsLockupBatch(version: Sablier.EVM.Version): boolean {\n return getLockupReleaseFeatures(version)?.batch ?? false;\n}\n\n/**\n * Returns whether the lockup release integrates with PRBProxy.\n * Returns `false` for non-Lockup versions.\n */\nexport function supportsLockupPrbProxy(version: Sablier.EVM.Version): boolean {\n return getLockupReleaseFeatures(version)?.prbProxy ?? false;\n}\n\n/**\n * Returns whether the lockup release stores shape as an on-chain parameter.\n * Returns `false` for non-Lockup versions.\n */\nexport function supportsLockupShape(version: Sablier.EVM.Version): boolean {\n return getLockupReleaseFeatures(version)?.shape ?? false;\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Sablier, TruncateAddressOptions } from "../types.js";
|
|
2
2
|
export type { PayableEvmProtocol } from "./releases/features.js";
|
|
3
|
-
export { getAirdropsReleaseFeatures, getFlowReleaseFeatures, getLockupReleaseFeatures, hasClaimTo, hasSponsor, isEvmReleasePayable, supportsLockupBatch, supportsLockupPrbProxy, supportsLockupShape, usesLockupSplit, } from "./releases/features.js";
|
|
3
|
+
export { getAirdropsReleaseFeatures, getFlowReleaseFeatures, getLockupReleaseFeatures, hasClaimTo, hasSplitLockupArchitecture, hasSponsor, isEvmReleasePayable, supportsLockupBatch, supportsLockupPrbProxy, supportsLockupShape, usesLockupSplit, } from "./releases/features.js";
|
|
4
4
|
export declare function getContractExplorerURL(explorerURL: string, contractAddress: Sablier.EVM.Address): string;
|
|
5
5
|
export declare function resolveEvmStreamId(opts: {
|
|
6
6
|
alias: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/evm/helpers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAItE,YAAY,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EACL,0BAA0B,EAC1B,sBAAsB,EACtB,wBAAwB,EACxB,UAAU,EACV,UAAU,EACV,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,eAAe,GAChB,MAAM,wBAAwB,CAAC;AAQhC,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,UAE/F;AAkBD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;CACjC,GAAG,MAAM,CAKT;AAeD,wBAAgB,yBAAyB,CAAC,IAAI,EAAE;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;CACjC,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAqCvB;AAaD,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,EAC5B,OAAO,CAAC,EAAE,sBAAsB,GAC/B,MAAM,CAiBR"}
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/evm/helpers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAItE,YAAY,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EACL,0BAA0B,EAC1B,sBAAsB,EACtB,wBAAwB,EACxB,UAAU,EACV,0BAA0B,EAC1B,UAAU,EACV,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,eAAe,GAChB,MAAM,wBAAwB,CAAC;AAQhC,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,UAE/F;AAkBD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;CACjC,GAAG,MAAM,CAKT;AAeD,wBAAgB,yBAAyB,CAAC,IAAI,EAAE;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;CACjC,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAqCvB;AAaD,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,EAC5B,OAAO,CAAC,EAAE,sBAAsB,GAC/B,MAAM,CAiBR"}
|
|
@@ -114,17 +114,18 @@ export declare const evmReleaseFeatures: {
|
|
|
114
114
|
};
|
|
115
115
|
};
|
|
116
116
|
export type PayableEvmProtocol = ProtocolWithBooleanFeature<"payable">;
|
|
117
|
+
export declare function getAirdropsReleaseFeatures(version: Sablier.EVM.Version): Sablier.EVM.AirdropsReleaseFeatures | undefined;
|
|
117
118
|
export declare function getEvmReleaseFeatures<TProtocol extends keyof EvmReleaseFeatureSetByProtocol>(protocol: TProtocol, version: EvmReleaseVersionByProtocol[TProtocol]): ReleaseFeaturesForProtocol<TProtocol>;
|
|
118
|
-
export declare function
|
|
119
|
-
export declare function
|
|
120
|
-
export declare function
|
|
119
|
+
export declare function getFlowReleaseFeatures(version: Sablier.EVM.Version): Sablier.EVM.FlowReleaseFeatures | undefined;
|
|
120
|
+
export declare function getLockupReleaseFeatures(version: Sablier.EVM.Version): Sablier.EVM.LockupReleaseFeatures | undefined;
|
|
121
|
+
export declare function hasClaimTo(version: Sablier.EVM.Version): boolean;
|
|
122
|
+
export declare function hasSponsor(version: Sablier.EVM.Version): boolean;
|
|
123
|
+
export declare function hasSplitLockupArchitecture(version: Sablier.EVM.Version): boolean;
|
|
124
|
+
export declare const usesLockupSplit: typeof hasSplitLockupArchitecture;
|
|
121
125
|
export declare function isEvmReleasePayable(release: EvmReleaseReference): boolean;
|
|
122
126
|
export declare function isEvmReleasePayable(protocol: Sablier.EVM.Protocol, version: Sablier.EVM.Version): boolean;
|
|
123
|
-
export declare function
|
|
124
|
-
export declare function
|
|
125
|
-
export declare function
|
|
126
|
-
export declare function supportsLockupPrbProxy(version: Sablier.EVM.Version.Lockup): boolean;
|
|
127
|
-
export declare function usesLockupSplit(version: Sablier.EVM.Version.Lockup): boolean;
|
|
128
|
-
export declare function supportsLockupShape(version: Sablier.EVM.Version.Lockup): boolean;
|
|
127
|
+
export declare function supportsLockupBatch(version: Sablier.EVM.Version): boolean;
|
|
128
|
+
export declare function supportsLockupPrbProxy(version: Sablier.EVM.Version): boolean;
|
|
129
|
+
export declare function supportsLockupShape(version: Sablier.EVM.Version): boolean;
|
|
129
130
|
export {};
|
|
130
131
|
//# sourceMappingURL=features.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features.d.ts","sourceRoot":"","sources":["../../../../src/evm/releases/features.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAM9C,MAAM,MAAM,2BAA2B,GAAG;IACxC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC;IACvC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;IAC7B,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC;IAC/B,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;IACnC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG;IAC3C,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;IAC9C,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;IACtC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;IACtC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;IACzC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;CAC3C,CAAC;AASF,MAAM,MAAM,0BAA0B,CAAC,SAAS,SAAS,MAAM,8BAA8B,IAC3F,8BAA8B,CAAC,SAAS,CAAC,CAAC;AAE5C,KAAK,kBAAkB,CAAC,SAAS,SAAS,MAAM,8BAA8B,IAC5E,8BAA8B,CAAC,SAAS,CAAC,CAAC;AAE5C,KAAK,0BAA0B,CAAC,QAAQ,SAAS,WAAW,IAAI;KAC7D,SAAS,IAAI,MAAM,8BAA8B,GAAG,kBAAkB,CAAC,SAAS,CAAC,SAAS,MAAM,CAC/F,QAAQ,EACR,OAAO,CACR,GACG,SAAS,GACT,KAAK;CACV,CAAC,MAAM,8BAA8B,CAAC,CAAC;AAExC,KAAK,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,GAAG,SAAS,CAAC,CAAC;AAyB7E,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiEgB,CAAC;AAEhD,MAAM,MAAM,kBAAkB,GAAG,0BAA0B,CAAC,SAAS,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"features.d.ts","sourceRoot":"","sources":["../../../../src/evm/releases/features.ts"],"names":[],"mappings":"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"}
|