@heemankv/sigints-sdk 1.0.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/README.md +206 -0
- package/dist/backend.d.ts +319 -0
- package/dist/backend.d.ts.map +1 -0
- package/dist/backend.js +306 -0
- package/dist/backend.js.map +1 -0
- package/dist/crypto.d.ts +16 -0
- package/dist/crypto.d.ts.map +1 -0
- package/dist/crypto.js +61 -0
- package/dist/crypto.js.map +1 -0
- package/dist/index.d.ts +134 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +361 -0
- package/dist/index.js.map +1 -0
- package/dist/jetstream.d.ts +22 -0
- package/dist/jetstream.d.ts.map +1 -0
- package/dist/jetstream.js +113 -0
- package/dist/jetstream.js.map +1 -0
- package/dist/jetstream.proto +101 -0
- package/dist/publish.d.ts +32 -0
- package/dist/publish.d.ts.map +1 -0
- package/dist/publish.js +139 -0
- package/dist/publish.js.map +1 -0
- package/dist/solana/constants.d.ts +3 -0
- package/dist/solana/constants.d.ts.map +1 -0
- package/dist/solana/constants.js +8 -0
- package/dist/solana/constants.js.map +1 -0
- package/dist/solana/index.d.ts +7 -0
- package/dist/solana/index.d.ts.map +1 -0
- package/dist/solana/index.js +6 -0
- package/dist/solana/index.js.map +1 -0
- package/dist/solana/recordSignal.d.ts +23 -0
- package/dist/solana/recordSignal.d.ts.map +1 -0
- package/dist/solana/recordSignal.js +21 -0
- package/dist/solana/recordSignal.js.map +1 -0
- package/dist/solana/shared.d.ts +5 -0
- package/dist/solana/shared.d.ts.map +1 -0
- package/dist/solana/shared.js +27 -0
- package/dist/solana/shared.js.map +1 -0
- package/dist/solana/streamRegistry.d.ts +41 -0
- package/dist/solana/streamRegistry.d.ts.map +1 -0
- package/dist/solana/streamRegistry.js +103 -0
- package/dist/solana/streamRegistry.js.map +1 -0
- package/dist/solana/subscription.d.ts +77 -0
- package/dist/solana/subscription.d.ts.map +1 -0
- package/dist/solana/subscription.js +237 -0
- package/dist/solana/subscription.js.map +1 -0
- package/dist/solana/tiers.d.ts +9 -0
- package/dist/solana/tiers.d.ts.map +1 -0
- package/dist/solana/tiers.js +13 -0
- package/dist/solana/tiers.js.map +1 -0
- package/dist/tradeIntent.d.ts +21 -0
- package/dist/tradeIntent.d.ts.map +1 -0
- package/dist/tradeIntent.js +95 -0
- package/dist/tradeIntent.js.map +1 -0
- package/dist/transactions.d.ts +89 -0
- package/dist/transactions.d.ts.map +1 -0
- package/dist/transactions.js +118 -0
- package/dist/transactions.js.map +1 -0
- package/package.json +32 -0
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import { PublicKey, SystemProgram, SYSVAR_RENT_PUBKEY, TransactionInstruction } from "@solana/web3.js";
|
|
2
|
+
import { ASSOCIATED_TOKEN_PROGRAM_ID, TOKEN_2022_PROGRAM_ID, getAssociatedTokenAddressSync, } from "@solana/spl-token";
|
|
3
|
+
import { Buffer } from "buffer";
|
|
4
|
+
import { EVIDENCE_LEVEL_MAP, PRICING_TYPE_MAP } from "./constants";
|
|
5
|
+
import { sha256Bytes, toHex, writeBigInt64LE, writeUint32LE } from "./shared";
|
|
6
|
+
const SUBSCRIBE_DISCRIMINATOR = new Uint8Array([254, 28, 191, 138, 156, 179, 183, 53]);
|
|
7
|
+
const REGISTER_KEY_DISCRIMINATOR = new Uint8Array([56, 8, 67, 97, 128, 122, 80, 213]);
|
|
8
|
+
const REGISTER_WALLET_KEY_DISCRIMINATOR = new Uint8Array([245, 147, 210, 179, 245, 73, 184, 9]);
|
|
9
|
+
const REGISTER_SUBSCRIPTION_KEY_DISCRIMINATOR = new Uint8Array([63, 198, 90, 133, 166, 115, 25, 198]);
|
|
10
|
+
const X25519_SPKI_PREFIX = new Uint8Array([
|
|
11
|
+
0x30, 0x2a, 0x30, 0x05, 0x06, 0x03, 0x2b, 0x65, 0x6e, 0x03, 0x21, 0x00,
|
|
12
|
+
]);
|
|
13
|
+
export function resolvePricingType(value) {
|
|
14
|
+
const mapped = PRICING_TYPE_MAP[value];
|
|
15
|
+
if (mapped === undefined) {
|
|
16
|
+
throw new Error(`Unknown pricing type: ${value}`);
|
|
17
|
+
}
|
|
18
|
+
return mapped;
|
|
19
|
+
}
|
|
20
|
+
export function resolveEvidenceLevel(value) {
|
|
21
|
+
const mapped = EVIDENCE_LEVEL_MAP[value];
|
|
22
|
+
if (mapped === undefined) {
|
|
23
|
+
throw new Error(`Unknown evidence level: ${value}`);
|
|
24
|
+
}
|
|
25
|
+
return mapped;
|
|
26
|
+
}
|
|
27
|
+
export function defaultExpiryMs() {
|
|
28
|
+
const days = 30;
|
|
29
|
+
return Date.now() + days * 24 * 60 * 60 * 1000;
|
|
30
|
+
}
|
|
31
|
+
export async function encodeSubscribeData(params) {
|
|
32
|
+
const tierHash = await sha256Bytes(params.tierId);
|
|
33
|
+
const data = new Uint8Array(8 + 32 + 1 + 1 + 8 + 4 + 8);
|
|
34
|
+
data.set(SUBSCRIBE_DISCRIMINATOR, 0);
|
|
35
|
+
data.set(tierHash, 8);
|
|
36
|
+
data[40] = params.pricingType;
|
|
37
|
+
data[41] = params.evidenceLevel;
|
|
38
|
+
writeBigInt64LE(data, BigInt(params.expiresAtMs), 42);
|
|
39
|
+
writeUint32LE(data, params.quotaRemaining, 50);
|
|
40
|
+
writeBigInt64LE(data, BigInt(params.priceLamports), 54);
|
|
41
|
+
return data;
|
|
42
|
+
}
|
|
43
|
+
export function deriveSubscriptionPda(programId, stream, subscriber) {
|
|
44
|
+
const [pda] = PublicKey.findProgramAddressSync([Buffer.from("subscription"), stream.toBuffer(), subscriber.toBuffer()], programId);
|
|
45
|
+
return pda;
|
|
46
|
+
}
|
|
47
|
+
export function deriveSubscriptionMint(programId, stream, subscriber) {
|
|
48
|
+
const [pda] = PublicKey.findProgramAddressSync([Buffer.from("subscription_mint"), stream.toBuffer(), subscriber.toBuffer()], programId);
|
|
49
|
+
return pda;
|
|
50
|
+
}
|
|
51
|
+
export function deriveSubscriberKeyPda(programId, subscription) {
|
|
52
|
+
const [pda] = PublicKey.findProgramAddressSync([Buffer.from("subscriber_key"), subscription.toBuffer()], programId);
|
|
53
|
+
return pda;
|
|
54
|
+
}
|
|
55
|
+
export function deriveWalletKeyPda(programId, subscriber) {
|
|
56
|
+
const [pda] = PublicKey.findProgramAddressSync([Buffer.from("wallet_key"), subscriber.toBuffer()], programId);
|
|
57
|
+
return pda;
|
|
58
|
+
}
|
|
59
|
+
export function deriveSubscriptionKeyPda(programId, stream, subscriber) {
|
|
60
|
+
const [pda] = PublicKey.findProgramAddressSync([Buffer.from("sub_key"), stream.toBuffer(), subscriber.toBuffer()], programId);
|
|
61
|
+
return pda;
|
|
62
|
+
}
|
|
63
|
+
export async function hasRegisteredWalletKey(connection, programId, subscriber, commitment = "confirmed") {
|
|
64
|
+
const walletKey = deriveWalletKeyPda(programId, subscriber);
|
|
65
|
+
const account = await connection.getAccountInfo(walletKey, commitment);
|
|
66
|
+
return !!account;
|
|
67
|
+
}
|
|
68
|
+
export async function hasRegisteredSubscriptionKey(connection, programId, stream, subscriber, commitment = "confirmed") {
|
|
69
|
+
const subscriptionKey = deriveSubscriptionKeyPda(programId, stream, subscriber);
|
|
70
|
+
const account = await connection.getAccountInfo(subscriptionKey, commitment);
|
|
71
|
+
return !!account;
|
|
72
|
+
}
|
|
73
|
+
export function deriveTierConfigPda(streamRegistryProgramId, stream, tierHash) {
|
|
74
|
+
const [pda] = PublicKey.findProgramAddressSync([Buffer.from("tier"), stream.toBuffer(), Buffer.from(tierHash)], streamRegistryProgramId);
|
|
75
|
+
return pda;
|
|
76
|
+
}
|
|
77
|
+
export function deriveStreamState(programId, stream) {
|
|
78
|
+
const [pda] = PublicKey.findProgramAddressSync([Buffer.from("stream_state"), stream.toBuffer()], programId);
|
|
79
|
+
return pda;
|
|
80
|
+
}
|
|
81
|
+
export function buildSubscribeInstruction(params) {
|
|
82
|
+
return encodeSubscribeData(params).then(async (data) => {
|
|
83
|
+
const subscription = deriveSubscriptionPda(params.programId, params.stream, params.subscriber);
|
|
84
|
+
const subscriptionMint = deriveSubscriptionMint(params.programId, params.stream, params.subscriber);
|
|
85
|
+
const streamState = deriveStreamState(params.programId, params.stream);
|
|
86
|
+
const subscriberAta = getAssociatedTokenAddressSync(subscriptionMint, params.subscriber, false, TOKEN_2022_PROGRAM_ID);
|
|
87
|
+
const tierHash = await sha256Bytes(params.tierId);
|
|
88
|
+
const tierConfig = deriveTierConfigPda(params.streamRegistryProgramId, params.stream, tierHash);
|
|
89
|
+
return new TransactionInstruction({
|
|
90
|
+
programId: params.programId,
|
|
91
|
+
keys: [
|
|
92
|
+
{ pubkey: subscription, isSigner: false, isWritable: true },
|
|
93
|
+
{ pubkey: subscriptionMint, isSigner: false, isWritable: true },
|
|
94
|
+
{ pubkey: streamState, isSigner: false, isWritable: true },
|
|
95
|
+
{ pubkey: subscriberAta, isSigner: false, isWritable: true },
|
|
96
|
+
{ pubkey: params.stream, isSigner: false, isWritable: false },
|
|
97
|
+
{ pubkey: tierConfig, isSigner: false, isWritable: false },
|
|
98
|
+
{ pubkey: params.streamRegistryProgramId, isSigner: false, isWritable: false },
|
|
99
|
+
{ pubkey: params.subscriber, isSigner: true, isWritable: true },
|
|
100
|
+
{ pubkey: params.maker, isSigner: false, isWritable: true },
|
|
101
|
+
{ pubkey: params.treasury, isSigner: false, isWritable: true },
|
|
102
|
+
{ pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
|
|
103
|
+
{ pubkey: TOKEN_2022_PROGRAM_ID, isSigner: false, isWritable: false },
|
|
104
|
+
{ pubkey: ASSOCIATED_TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },
|
|
105
|
+
{ pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false },
|
|
106
|
+
],
|
|
107
|
+
data: Buffer.from(data),
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
export function buildRegisterKeyInstruction(params) {
|
|
112
|
+
const subscription = deriveSubscriptionPda(params.programId, params.stream, params.subscriber);
|
|
113
|
+
const subscriberKey = deriveSubscriberKeyPda(params.programId, subscription);
|
|
114
|
+
const keyBytes = Buffer.from(params.encPubKeyBase64, "base64");
|
|
115
|
+
if (keyBytes.length !== 32) {
|
|
116
|
+
throw new Error("Encryption public key must be 32 bytes (base64)");
|
|
117
|
+
}
|
|
118
|
+
const data = new Uint8Array(8 + 32);
|
|
119
|
+
data.set(REGISTER_KEY_DISCRIMINATOR, 0);
|
|
120
|
+
data.set(keyBytes, 8);
|
|
121
|
+
return new TransactionInstruction({
|
|
122
|
+
programId: params.programId,
|
|
123
|
+
keys: [
|
|
124
|
+
{ pubkey: subscription, isSigner: false, isWritable: false },
|
|
125
|
+
{ pubkey: subscriberKey, isSigner: false, isWritable: true },
|
|
126
|
+
{ pubkey: params.subscriber, isSigner: true, isWritable: true },
|
|
127
|
+
{ pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
|
|
128
|
+
],
|
|
129
|
+
data: Buffer.from(data),
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
export function buildRegisterWalletKeyInstruction(params) {
|
|
133
|
+
const walletKey = deriveWalletKeyPda(params.programId, params.subscriber);
|
|
134
|
+
const keyBytes = Buffer.from(params.encPubKeyBase64, "base64");
|
|
135
|
+
if (keyBytes.length !== 32) {
|
|
136
|
+
throw new Error("Encryption public key must be 32 bytes (base64)");
|
|
137
|
+
}
|
|
138
|
+
const data = new Uint8Array(8 + 32);
|
|
139
|
+
data.set(REGISTER_WALLET_KEY_DISCRIMINATOR, 0);
|
|
140
|
+
data.set(keyBytes, 8);
|
|
141
|
+
return new TransactionInstruction({
|
|
142
|
+
programId: params.programId,
|
|
143
|
+
keys: [
|
|
144
|
+
{ pubkey: walletKey, isSigner: false, isWritable: true },
|
|
145
|
+
{ pubkey: params.subscriber, isSigner: true, isWritable: true },
|
|
146
|
+
{ pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
|
|
147
|
+
],
|
|
148
|
+
data: Buffer.from(data),
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
export function buildRegisterSubscriptionKeyInstruction(params) {
|
|
152
|
+
const subscriptionKey = deriveSubscriptionKeyPda(params.programId, params.stream, params.subscriber);
|
|
153
|
+
const keyBytes = Buffer.from(params.encPubKeyBase64, "base64");
|
|
154
|
+
if (keyBytes.length !== 32) {
|
|
155
|
+
throw new Error("Encryption public key must be 32 bytes (base64)");
|
|
156
|
+
}
|
|
157
|
+
const data = new Uint8Array(8 + 32);
|
|
158
|
+
data.set(REGISTER_SUBSCRIPTION_KEY_DISCRIMINATOR, 0);
|
|
159
|
+
data.set(keyBytes, 8);
|
|
160
|
+
return new TransactionInstruction({
|
|
161
|
+
programId: params.programId,
|
|
162
|
+
keys: [
|
|
163
|
+
{ pubkey: params.stream, isSigner: false, isWritable: false },
|
|
164
|
+
{ pubkey: subscriptionKey, isSigner: false, isWritable: true },
|
|
165
|
+
{ pubkey: params.subscriber, isSigner: true, isWritable: true },
|
|
166
|
+
{ pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
|
|
167
|
+
],
|
|
168
|
+
data: Buffer.from(data),
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
function x25519RawToDerBase64(raw) {
|
|
172
|
+
const combined = new Uint8Array(X25519_SPKI_PREFIX.length + raw.length);
|
|
173
|
+
combined.set(X25519_SPKI_PREFIX, 0);
|
|
174
|
+
combined.set(raw, X25519_SPKI_PREFIX.length);
|
|
175
|
+
return Buffer.from(combined).toString("base64");
|
|
176
|
+
}
|
|
177
|
+
export function decodeSubscriptionAccount(pubkey, data) {
|
|
178
|
+
if (data.length < 152) {
|
|
179
|
+
return null;
|
|
180
|
+
}
|
|
181
|
+
let offset = 8;
|
|
182
|
+
const subscriber = new PublicKey(data.slice(offset, offset + 32));
|
|
183
|
+
offset += 32;
|
|
184
|
+
const stream = new PublicKey(data.slice(offset, offset + 32));
|
|
185
|
+
offset += 32;
|
|
186
|
+
const tierId = data.slice(offset, offset + 32);
|
|
187
|
+
offset += 32;
|
|
188
|
+
const pricingType = data[offset];
|
|
189
|
+
offset += 1;
|
|
190
|
+
const evidenceLevel = data[offset];
|
|
191
|
+
offset += 1;
|
|
192
|
+
const expiresAt = Number(data.readBigInt64LE(offset));
|
|
193
|
+
offset += 8;
|
|
194
|
+
const quotaRemaining = data.readUInt32LE(offset);
|
|
195
|
+
offset += 4;
|
|
196
|
+
const status = data[offset];
|
|
197
|
+
offset += 1;
|
|
198
|
+
const nftMint = new PublicKey(data.slice(offset, offset + 32));
|
|
199
|
+
return {
|
|
200
|
+
subscription: pubkey.toBase58(),
|
|
201
|
+
subscriber: subscriber.toBase58(),
|
|
202
|
+
stream: stream.toBase58(),
|
|
203
|
+
tierIdHex: toHex(tierId),
|
|
204
|
+
pricingType,
|
|
205
|
+
evidenceLevel,
|
|
206
|
+
expiresAt,
|
|
207
|
+
quotaRemaining,
|
|
208
|
+
status,
|
|
209
|
+
nftMint: nftMint.toBase58(),
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
export function decodeSubscriptionKeyAccount(pubkey, data) {
|
|
213
|
+
if (data.length < 113) {
|
|
214
|
+
return null;
|
|
215
|
+
}
|
|
216
|
+
let offset = 8;
|
|
217
|
+
const subscriber = new PublicKey(data.slice(offset, offset + 32));
|
|
218
|
+
offset += 32;
|
|
219
|
+
const stream = new PublicKey(data.slice(offset, offset + 32));
|
|
220
|
+
offset += 32;
|
|
221
|
+
const encPubkey = data.slice(offset, offset + 32);
|
|
222
|
+
offset += 32;
|
|
223
|
+
const updatedAt = Number(data.readBigInt64LE(offset));
|
|
224
|
+
offset += 8;
|
|
225
|
+
const bump = data[offset];
|
|
226
|
+
const encPubkeyRawBase64 = Buffer.from(encPubkey).toString("base64");
|
|
227
|
+
return {
|
|
228
|
+
subscriptionKey: pubkey.toBase58(),
|
|
229
|
+
subscriber: subscriber.toBase58(),
|
|
230
|
+
stream: stream.toBase58(),
|
|
231
|
+
encPubkeyRawBase64,
|
|
232
|
+
encPubkeyDerBase64: x25519RawToDerBase64(encPubkey),
|
|
233
|
+
updatedAt,
|
|
234
|
+
bump,
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
//# sourceMappingURL=subscription.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subscription.js","sourceRoot":"","sources":["../../src/solana/subscription.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export type TierInput = {
|
|
2
|
+
tierId: string;
|
|
3
|
+
pricingType: "subscription_unlimited";
|
|
4
|
+
price: string;
|
|
5
|
+
quota?: string;
|
|
6
|
+
evidenceLevel: "trust" | "verifier";
|
|
7
|
+
};
|
|
8
|
+
export declare function buildTiersSeed(tiers: TierInput[]): string;
|
|
9
|
+
//# sourceMappingURL=tiers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tiers.d.ts","sourceRoot":"","sources":["../../src/solana/tiers.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,wBAAwB,CAAC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,OAAO,GAAG,UAAU,CAAC;CACrC,CAAC;AAEF,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,MAAM,CAazD"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export function buildTiersSeed(tiers) {
|
|
2
|
+
const sorted = [...tiers].sort((a, b) => a.tierId.localeCompare(b.tierId));
|
|
3
|
+
return sorted
|
|
4
|
+
.map((tier) => [
|
|
5
|
+
tier.tierId,
|
|
6
|
+
tier.pricingType,
|
|
7
|
+
tier.price,
|
|
8
|
+
tier.quota ?? "",
|
|
9
|
+
tier.evidenceLevel,
|
|
10
|
+
].join("|"))
|
|
11
|
+
.join("||");
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=tiers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tiers.js","sourceRoot":"","sources":["../../src/solana/tiers.ts"],"names":[],"mappings":"AAQA,MAAM,UAAU,cAAc,CAAC,KAAkB;IAC/C,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3E,OAAO,MAAM;SACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACZ;QACE,IAAI,CAAC,MAAM;QACX,IAAI,CAAC,WAAW;QAChB,IAAI,CAAC,KAAK;QACV,IAAI,CAAC,KAAK,IAAI,EAAE;QAChB,IAAI,CAAC,aAAa;KACnB,CAAC,IAAI,CAAC,GAAG,CAAC,CACZ;SACA,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export type TradeToken = {
|
|
2
|
+
symbol: string;
|
|
3
|
+
mint: string;
|
|
4
|
+
decimals: number;
|
|
5
|
+
};
|
|
6
|
+
export type TradeIntent = {
|
|
7
|
+
provider: "Jupiter";
|
|
8
|
+
inputSymbol: string;
|
|
9
|
+
outputSymbol: string;
|
|
10
|
+
inputMint: string;
|
|
11
|
+
outputMint: string;
|
|
12
|
+
inputDecimals: number;
|
|
13
|
+
outputDecimals: number;
|
|
14
|
+
amountUi: string;
|
|
15
|
+
amountBaseUnits: string;
|
|
16
|
+
slippageBps: number;
|
|
17
|
+
};
|
|
18
|
+
export declare function parseTradeIntent(text: string): TradeIntent | null;
|
|
19
|
+
export declare function buildTradeActionUrl(intent: TradeIntent, apiBase?: string): string;
|
|
20
|
+
export declare function buildTradeBlinkUrl(actionUrl: string, appBase?: string): string;
|
|
21
|
+
//# sourceMappingURL=tradeIntent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tradeIntent.d.ts","sourceRoot":"","sources":["../src/tradeIntent.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,EAAE,SAAS,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AA0BF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CA8CjE;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,WAAW,EACnB,OAAO,CAAC,EAAE,MAAM,GACf,MAAM,CAcR;AAED,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAK9E"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
const DEVNET_TOKENS = {
|
|
2
|
+
SOL: {
|
|
3
|
+
symbol: "SOL",
|
|
4
|
+
mint: "So11111111111111111111111111111111111111112",
|
|
5
|
+
decimals: 9,
|
|
6
|
+
},
|
|
7
|
+
USDC: {
|
|
8
|
+
symbol: "USDC",
|
|
9
|
+
mint: "4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU",
|
|
10
|
+
decimals: 6,
|
|
11
|
+
},
|
|
12
|
+
};
|
|
13
|
+
const TRADE_LINE = /(?:^|\n)\s*TRADE:\s*([^\n]+)/i;
|
|
14
|
+
function toBaseUnits(amount, decimals) {
|
|
15
|
+
if (!/^\d+(\.\d+)?$/.test(amount))
|
|
16
|
+
return null;
|
|
17
|
+
const [whole, frac = ""] = amount.split(".");
|
|
18
|
+
if (frac.length > decimals)
|
|
19
|
+
return null;
|
|
20
|
+
const padded = frac.padEnd(decimals, "0");
|
|
21
|
+
const merged = `${whole}${padded}`.replace(/^0+/, "");
|
|
22
|
+
return merged.length ? merged : "0";
|
|
23
|
+
}
|
|
24
|
+
export function parseTradeIntent(text) {
|
|
25
|
+
if (!text)
|
|
26
|
+
return null;
|
|
27
|
+
const match = text.match(TRADE_LINE);
|
|
28
|
+
if (!match)
|
|
29
|
+
return null;
|
|
30
|
+
const tokens = match[1].trim().split(/\s+/);
|
|
31
|
+
const kv = {};
|
|
32
|
+
for (const token of tokens) {
|
|
33
|
+
const eq = token.indexOf("=");
|
|
34
|
+
if (eq === -1)
|
|
35
|
+
continue;
|
|
36
|
+
const key = token.slice(0, eq).toLowerCase();
|
|
37
|
+
const value = token.slice(eq + 1);
|
|
38
|
+
if (!key || !value)
|
|
39
|
+
continue;
|
|
40
|
+
kv[key] = value;
|
|
41
|
+
}
|
|
42
|
+
const provider = (kv.provider ?? "").toLowerCase();
|
|
43
|
+
if (provider && provider !== "jupiter")
|
|
44
|
+
return null;
|
|
45
|
+
const inputSymbol = (kv.input ?? "").toUpperCase();
|
|
46
|
+
const outputSymbol = (kv.output ?? "").toUpperCase();
|
|
47
|
+
const amountUi = kv.amount ?? "";
|
|
48
|
+
const slippageBpsRaw = kv.slippagebps ?? kv.slippage ?? "50";
|
|
49
|
+
const slippageBps = Number.parseInt(slippageBpsRaw, 10);
|
|
50
|
+
if (!inputSymbol || !outputSymbol || !amountUi)
|
|
51
|
+
return null;
|
|
52
|
+
if (!Number.isFinite(slippageBps) || slippageBps < 0)
|
|
53
|
+
return null;
|
|
54
|
+
const inputToken = DEVNET_TOKENS[inputSymbol];
|
|
55
|
+
const outputToken = DEVNET_TOKENS[outputSymbol];
|
|
56
|
+
if (!inputToken || !outputToken)
|
|
57
|
+
return null;
|
|
58
|
+
const amountBaseUnits = toBaseUnits(amountUi, inputToken.decimals);
|
|
59
|
+
if (!amountBaseUnits)
|
|
60
|
+
return null;
|
|
61
|
+
return {
|
|
62
|
+
provider: "Jupiter",
|
|
63
|
+
inputSymbol,
|
|
64
|
+
outputSymbol,
|
|
65
|
+
inputMint: inputToken.mint,
|
|
66
|
+
outputMint: outputToken.mint,
|
|
67
|
+
inputDecimals: inputToken.decimals,
|
|
68
|
+
outputDecimals: outputToken.decimals,
|
|
69
|
+
amountUi,
|
|
70
|
+
amountBaseUnits,
|
|
71
|
+
slippageBps,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
export function buildTradeActionUrl(intent, apiBase) {
|
|
75
|
+
if (!apiBase) {
|
|
76
|
+
throw new Error("apiBase is required to build trade action url");
|
|
77
|
+
}
|
|
78
|
+
const url = new URL("/actions/trade", apiBase);
|
|
79
|
+
url.searchParams.set("provider", intent.provider);
|
|
80
|
+
url.searchParams.set("inputMint", intent.inputMint);
|
|
81
|
+
url.searchParams.set("outputMint", intent.outputMint);
|
|
82
|
+
url.searchParams.set("amount", intent.amountBaseUnits);
|
|
83
|
+
url.searchParams.set("slippageBps", String(intent.slippageBps));
|
|
84
|
+
url.searchParams.set("inputSymbol", intent.inputSymbol);
|
|
85
|
+
url.searchParams.set("outputSymbol", intent.outputSymbol);
|
|
86
|
+
url.searchParams.set("amountUi", intent.amountUi);
|
|
87
|
+
return url.toString();
|
|
88
|
+
}
|
|
89
|
+
export function buildTradeBlinkUrl(actionUrl, appBase) {
|
|
90
|
+
if (!appBase) {
|
|
91
|
+
throw new Error("appBase is required to build trade blink url");
|
|
92
|
+
}
|
|
93
|
+
return `${appBase.replace(/\/+$/, "")}/?action=${encodeURIComponent(actionUrl)}`;
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=tradeIntent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tradeIntent.js","sourceRoot":"","sources":["../src/tradeIntent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import type { BlockhashWithExpiryBlockHeight, Connection } from "@solana/web3.js";
|
|
2
|
+
import { PublicKey, Transaction } from "@solana/web3.js";
|
|
3
|
+
import type { TierInput } from "./solana/tiers";
|
|
4
|
+
import { type RecordSignalDelegatedParams, type RecordSignalParams } from "./publish";
|
|
5
|
+
export type PublicKeyLike = string | PublicKey;
|
|
6
|
+
export type BuiltTransaction = {
|
|
7
|
+
transaction: Transaction;
|
|
8
|
+
latestBlockhash: BlockhashWithExpiryBlockHeight;
|
|
9
|
+
};
|
|
10
|
+
export type UpsertTierInput = {
|
|
11
|
+
tier: TierInput;
|
|
12
|
+
priceLamports: number;
|
|
13
|
+
quota: number;
|
|
14
|
+
status?: number;
|
|
15
|
+
};
|
|
16
|
+
export declare function buildCreateStreamTransaction(params: {
|
|
17
|
+
connection: Connection;
|
|
18
|
+
programId: PublicKeyLike;
|
|
19
|
+
authority: PublicKeyLike;
|
|
20
|
+
streamId: string;
|
|
21
|
+
tiers: TierInput[];
|
|
22
|
+
dao?: string;
|
|
23
|
+
visibility: "public" | "private";
|
|
24
|
+
}): Promise<BuiltTransaction & {
|
|
25
|
+
streamPda: PublicKey;
|
|
26
|
+
tiersHash: Uint8Array;
|
|
27
|
+
}>;
|
|
28
|
+
export declare function buildUpsertTiersTransaction(params: {
|
|
29
|
+
connection: Connection;
|
|
30
|
+
programId: PublicKeyLike;
|
|
31
|
+
authority: PublicKeyLike;
|
|
32
|
+
stream: PublicKeyLike;
|
|
33
|
+
tiers: UpsertTierInput[];
|
|
34
|
+
}): Promise<BuiltTransaction>;
|
|
35
|
+
export declare function buildSubscribeTransaction(params: {
|
|
36
|
+
connection: Connection;
|
|
37
|
+
programId: PublicKeyLike;
|
|
38
|
+
streamRegistryProgramId: PublicKeyLike;
|
|
39
|
+
stream: PublicKeyLike;
|
|
40
|
+
subscriber: PublicKeyLike;
|
|
41
|
+
tierId: string;
|
|
42
|
+
pricingType: number;
|
|
43
|
+
evidenceLevel: number;
|
|
44
|
+
expiresAtMs: number;
|
|
45
|
+
quotaRemaining: number;
|
|
46
|
+
priceLamports: number;
|
|
47
|
+
maker: PublicKeyLike;
|
|
48
|
+
treasury: PublicKeyLike;
|
|
49
|
+
}): Promise<BuiltTransaction>;
|
|
50
|
+
export declare function buildRegisterSubscriptionKeyTransaction(params: {
|
|
51
|
+
connection: Connection;
|
|
52
|
+
programId: PublicKeyLike;
|
|
53
|
+
stream: PublicKeyLike;
|
|
54
|
+
subscriber: PublicKeyLike;
|
|
55
|
+
encPubKeyBase64: string;
|
|
56
|
+
}): Promise<BuiltTransaction>;
|
|
57
|
+
export declare function buildRecordSignalTransaction(params: {
|
|
58
|
+
connection: Connection;
|
|
59
|
+
programId: PublicKeyLike;
|
|
60
|
+
streamRegistryProgramId: PublicKeyLike;
|
|
61
|
+
authority: PublicKeyLike;
|
|
62
|
+
streamId?: string;
|
|
63
|
+
streamPubkey?: PublicKeyLike;
|
|
64
|
+
metadata: RecordSignalParams["metadata"];
|
|
65
|
+
}): Promise<BuiltTransaction>;
|
|
66
|
+
export declare function buildRecordSignalDelegatedTransaction(params: {
|
|
67
|
+
connection: Connection;
|
|
68
|
+
programId: PublicKeyLike;
|
|
69
|
+
streamRegistryProgramId: PublicKeyLike;
|
|
70
|
+
publisher: PublicKeyLike;
|
|
71
|
+
streamId?: string;
|
|
72
|
+
streamPubkey?: PublicKeyLike;
|
|
73
|
+
metadata: RecordSignalDelegatedParams["metadata"];
|
|
74
|
+
}): Promise<BuiltTransaction>;
|
|
75
|
+
export declare function buildGrantPublisherTransaction(params: {
|
|
76
|
+
connection: Connection;
|
|
77
|
+
programId: PublicKeyLike;
|
|
78
|
+
stream: PublicKeyLike;
|
|
79
|
+
authority: PublicKeyLike;
|
|
80
|
+
agent: PublicKeyLike;
|
|
81
|
+
}): Promise<BuiltTransaction>;
|
|
82
|
+
export declare function buildRevokePublisherTransaction(params: {
|
|
83
|
+
connection: Connection;
|
|
84
|
+
programId: PublicKeyLike;
|
|
85
|
+
stream: PublicKeyLike;
|
|
86
|
+
authority: PublicKeyLike;
|
|
87
|
+
agent: PublicKeyLike;
|
|
88
|
+
}): Promise<BuiltTransaction>;
|
|
89
|
+
//# sourceMappingURL=transactions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transactions.d.ts","sourceRoot":"","sources":["../src/transactions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { PublicKey, Transaction } from "@solana/web3.js";
|
|
2
|
+
import { buildCreateStreamInstruction, buildGrantPublisherInstruction, buildRevokePublisherInstruction, buildUpsertTierInstruction, } from "./solana/streamRegistry";
|
|
3
|
+
import { buildRegisterSubscriptionKeyInstruction, buildSubscribeInstruction, } from "./solana/subscription";
|
|
4
|
+
import { buildRecordSignalDelegatedInstruction, buildRecordSignalInstruction, } from "./publish";
|
|
5
|
+
function toPublicKey(value) {
|
|
6
|
+
return value instanceof PublicKey ? value : new PublicKey(value);
|
|
7
|
+
}
|
|
8
|
+
function toPublicKeyOptional(value) {
|
|
9
|
+
if (!value)
|
|
10
|
+
return undefined;
|
|
11
|
+
return toPublicKey(value);
|
|
12
|
+
}
|
|
13
|
+
async function buildTransaction(connection, feePayer, instructions) {
|
|
14
|
+
const tx = new Transaction();
|
|
15
|
+
for (const ix of instructions) {
|
|
16
|
+
tx.add(ix);
|
|
17
|
+
}
|
|
18
|
+
tx.feePayer = toPublicKey(feePayer);
|
|
19
|
+
const latestBlockhash = await connection.getLatestBlockhash();
|
|
20
|
+
tx.recentBlockhash = latestBlockhash.blockhash;
|
|
21
|
+
return { transaction: tx, latestBlockhash };
|
|
22
|
+
}
|
|
23
|
+
export async function buildCreateStreamTransaction(params) {
|
|
24
|
+
const programId = toPublicKey(params.programId);
|
|
25
|
+
const authority = toPublicKey(params.authority);
|
|
26
|
+
const { instruction, streamPda, tiersHash } = await buildCreateStreamInstruction({
|
|
27
|
+
programId,
|
|
28
|
+
authority,
|
|
29
|
+
streamId: params.streamId,
|
|
30
|
+
tiers: params.tiers,
|
|
31
|
+
dao: params.dao,
|
|
32
|
+
visibility: params.visibility,
|
|
33
|
+
});
|
|
34
|
+
const built = await buildTransaction(params.connection, authority, [instruction]);
|
|
35
|
+
return { ...built, streamPda, tiersHash };
|
|
36
|
+
}
|
|
37
|
+
export async function buildUpsertTiersTransaction(params) {
|
|
38
|
+
const programId = toPublicKey(params.programId);
|
|
39
|
+
const authority = toPublicKey(params.authority);
|
|
40
|
+
const stream = toPublicKey(params.stream);
|
|
41
|
+
const instructions = await Promise.all(params.tiers.map((tier) => buildUpsertTierInstruction({
|
|
42
|
+
programId,
|
|
43
|
+
authority,
|
|
44
|
+
stream,
|
|
45
|
+
tier: tier.tier,
|
|
46
|
+
priceLamports: tier.priceLamports,
|
|
47
|
+
quota: tier.quota,
|
|
48
|
+
status: tier.status,
|
|
49
|
+
})));
|
|
50
|
+
return buildTransaction(params.connection, authority, instructions);
|
|
51
|
+
}
|
|
52
|
+
export async function buildSubscribeTransaction(params) {
|
|
53
|
+
const instruction = await buildSubscribeInstruction({
|
|
54
|
+
programId: toPublicKey(params.programId),
|
|
55
|
+
streamRegistryProgramId: toPublicKey(params.streamRegistryProgramId),
|
|
56
|
+
stream: toPublicKey(params.stream),
|
|
57
|
+
subscriber: toPublicKey(params.subscriber),
|
|
58
|
+
tierId: params.tierId,
|
|
59
|
+
pricingType: params.pricingType,
|
|
60
|
+
evidenceLevel: params.evidenceLevel,
|
|
61
|
+
expiresAtMs: params.expiresAtMs,
|
|
62
|
+
quotaRemaining: params.quotaRemaining,
|
|
63
|
+
priceLamports: params.priceLamports,
|
|
64
|
+
maker: toPublicKey(params.maker),
|
|
65
|
+
treasury: toPublicKey(params.treasury),
|
|
66
|
+
});
|
|
67
|
+
return buildTransaction(params.connection, params.subscriber, [instruction]);
|
|
68
|
+
}
|
|
69
|
+
export async function buildRegisterSubscriptionKeyTransaction(params) {
|
|
70
|
+
const instruction = buildRegisterSubscriptionKeyInstruction({
|
|
71
|
+
programId: toPublicKey(params.programId),
|
|
72
|
+
stream: toPublicKey(params.stream),
|
|
73
|
+
subscriber: toPublicKey(params.subscriber),
|
|
74
|
+
encPubKeyBase64: params.encPubKeyBase64,
|
|
75
|
+
});
|
|
76
|
+
return buildTransaction(params.connection, params.subscriber, [instruction]);
|
|
77
|
+
}
|
|
78
|
+
export async function buildRecordSignalTransaction(params) {
|
|
79
|
+
const instruction = await buildRecordSignalInstruction({
|
|
80
|
+
programId: toPublicKey(params.programId),
|
|
81
|
+
streamRegistryProgramId: toPublicKey(params.streamRegistryProgramId),
|
|
82
|
+
authority: toPublicKey(params.authority),
|
|
83
|
+
streamId: params.streamId,
|
|
84
|
+
streamPubkey: toPublicKeyOptional(params.streamPubkey),
|
|
85
|
+
metadata: params.metadata,
|
|
86
|
+
});
|
|
87
|
+
return buildTransaction(params.connection, params.authority, [instruction]);
|
|
88
|
+
}
|
|
89
|
+
export async function buildRecordSignalDelegatedTransaction(params) {
|
|
90
|
+
const instruction = await buildRecordSignalDelegatedInstruction({
|
|
91
|
+
programId: toPublicKey(params.programId),
|
|
92
|
+
streamRegistryProgramId: toPublicKey(params.streamRegistryProgramId),
|
|
93
|
+
publisher: toPublicKey(params.publisher),
|
|
94
|
+
streamId: params.streamId,
|
|
95
|
+
streamPubkey: toPublicKeyOptional(params.streamPubkey),
|
|
96
|
+
metadata: params.metadata,
|
|
97
|
+
});
|
|
98
|
+
return buildTransaction(params.connection, params.publisher, [instruction]);
|
|
99
|
+
}
|
|
100
|
+
export async function buildGrantPublisherTransaction(params) {
|
|
101
|
+
const instruction = await buildGrantPublisherInstruction({
|
|
102
|
+
programId: toPublicKey(params.programId),
|
|
103
|
+
stream: toPublicKey(params.stream),
|
|
104
|
+
authority: toPublicKey(params.authority),
|
|
105
|
+
agent: toPublicKey(params.agent),
|
|
106
|
+
});
|
|
107
|
+
return buildTransaction(params.connection, params.authority, [instruction]);
|
|
108
|
+
}
|
|
109
|
+
export async function buildRevokePublisherTransaction(params) {
|
|
110
|
+
const instruction = await buildRevokePublisherInstruction({
|
|
111
|
+
programId: toPublicKey(params.programId),
|
|
112
|
+
stream: toPublicKey(params.stream),
|
|
113
|
+
authority: toPublicKey(params.authority),
|
|
114
|
+
agent: toPublicKey(params.agent),
|
|
115
|
+
});
|
|
116
|
+
return buildTransaction(params.connection, params.authority, [instruction]);
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=transactions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transactions.js","sourceRoot":"","sources":["../src/transactions.ts"],"names":[],"mappings":"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"}
|