@medialane/sdk 0.113.0 → 0.115.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/dist/starknet/index.cjs
CHANGED
|
@@ -11912,6 +11912,25 @@ async function deriveAesKey(prfSecret, hkdfInfo) {
|
|
|
11912
11912
|
["encrypt", "decrypt"]
|
|
11913
11913
|
);
|
|
11914
11914
|
}
|
|
11915
|
+
var STARK_KEY_INFO = new TextEncoder().encode("medialane/passkey/stark-key/v1");
|
|
11916
|
+
var DERIVE_BITS = 384;
|
|
11917
|
+
function bytesToBigInt(bytes) {
|
|
11918
|
+
let value = 0n;
|
|
11919
|
+
for (const byte of bytes) value = value << 8n | BigInt(byte);
|
|
11920
|
+
return value;
|
|
11921
|
+
}
|
|
11922
|
+
async function deriveStarkKeyPair(prfSecret) {
|
|
11923
|
+
const hkdf = await crypto.subtle.importKey("raw", prfSecret, "HKDF", false, ["deriveBits"]);
|
|
11924
|
+
const bits = await crypto.subtle.deriveBits(
|
|
11925
|
+
{ name: "HKDF", hash: "SHA-256", salt: new Uint8Array(0), info: STARK_KEY_INFO },
|
|
11926
|
+
hkdf,
|
|
11927
|
+
DERIVE_BITS
|
|
11928
|
+
);
|
|
11929
|
+
const order = starknet.ec.starkCurve.CURVE.n;
|
|
11930
|
+
const value = bytesToBigInt(new Uint8Array(bits)) % (order - 1n) + 1n;
|
|
11931
|
+
const privateKeyHex = "0x" + value.toString(16).padStart(64, "0");
|
|
11932
|
+
return { privateKeyHex, publicKeyHex: starknet.ec.starkCurve.getStarkKey(privateKeyHex) };
|
|
11933
|
+
}
|
|
11915
11934
|
function generateStarkKeyPair() {
|
|
11916
11935
|
const privateKeyHex = "0x" + Array.from(starknet.ec.starkCurve.utils.randomPrivateKey()).map((b) => b.toString(16).padStart(2, "0")).join("");
|
|
11917
11936
|
return { privateKeyHex, publicKeyHex: starknet.ec.starkCurve.getStarkKey(privateKeyHex) };
|
|
@@ -11950,8 +11969,73 @@ function signWithPrivateKey(privateKeyHex, msgHash) {
|
|
|
11950
11969
|
return [starknet.num.toHex(sig.r), starknet.num.toHex(sig.s)];
|
|
11951
11970
|
}
|
|
11952
11971
|
|
|
11972
|
+
// src/starknet/app-approval/approval.ts
|
|
11973
|
+
var MEDIALANE_SUFFIX = ".medialane.io";
|
|
11974
|
+
var STARK_ORDER2 = (1n << 251n) + 17n * (1n << 192n) + 1n;
|
|
11975
|
+
var APPROVAL_PATH = "/approve-app";
|
|
11976
|
+
var InvalidApprovalRequestError = class extends Error {
|
|
11977
|
+
constructor(message) {
|
|
11978
|
+
super(message);
|
|
11979
|
+
this.name = "InvalidApprovalRequestError";
|
|
11980
|
+
}
|
|
11981
|
+
};
|
|
11982
|
+
function isMedialaneOrigin(url) {
|
|
11983
|
+
let parsed;
|
|
11984
|
+
try {
|
|
11985
|
+
parsed = new URL(url);
|
|
11986
|
+
} catch {
|
|
11987
|
+
return false;
|
|
11988
|
+
}
|
|
11989
|
+
if (parsed.protocol !== "https:") return parsed.hostname === "localhost";
|
|
11990
|
+
return parsed.hostname === "medialane.io" || parsed.hostname.endsWith(MEDIALANE_SUFFIX);
|
|
11991
|
+
}
|
|
11992
|
+
function assertPublicKey(value) {
|
|
11993
|
+
if (!/^0x[0-9a-fA-F]{1,64}$/.test(value)) {
|
|
11994
|
+
throw new InvalidApprovalRequestError("That is not a wallet key.");
|
|
11995
|
+
}
|
|
11996
|
+
const scalar = BigInt(value);
|
|
11997
|
+
if (scalar === 0n || scalar >= STARK_ORDER2) {
|
|
11998
|
+
throw new InvalidApprovalRequestError("That is not a wallet key.");
|
|
11999
|
+
}
|
|
12000
|
+
return `0x${scalar.toString(16)}`;
|
|
12001
|
+
}
|
|
12002
|
+
function assertAppName(value) {
|
|
12003
|
+
const name = value.replace(/\s+/g, " ").trim().slice(0, 40);
|
|
12004
|
+
if (!name) throw new InvalidApprovalRequestError("The app asking has no name.");
|
|
12005
|
+
return name;
|
|
12006
|
+
}
|
|
12007
|
+
function assertReturnUrl(value) {
|
|
12008
|
+
if (!isMedialaneOrigin(value)) {
|
|
12009
|
+
throw new InvalidApprovalRequestError("That app is not part of Medialane.");
|
|
12010
|
+
}
|
|
12011
|
+
return value;
|
|
12012
|
+
}
|
|
12013
|
+
function buildApprovalUrl(approverOrigin, request) {
|
|
12014
|
+
if (!isMedialaneOrigin(approverOrigin)) {
|
|
12015
|
+
throw new InvalidApprovalRequestError("That app is not part of Medialane.");
|
|
12016
|
+
}
|
|
12017
|
+
const url = new URL(APPROVAL_PATH, approverOrigin);
|
|
12018
|
+
url.searchParams.set("key", assertPublicKey(request.publicKey));
|
|
12019
|
+
url.searchParams.set("app", assertAppName(request.appName));
|
|
12020
|
+
url.searchParams.set("return", assertReturnUrl(request.returnUrl));
|
|
12021
|
+
return url.toString();
|
|
12022
|
+
}
|
|
12023
|
+
function parseApprovalRequest(params) {
|
|
12024
|
+
return {
|
|
12025
|
+
publicKey: assertPublicKey(params.get("key") ?? ""),
|
|
12026
|
+
appName: assertAppName(params.get("app") ?? ""),
|
|
12027
|
+
returnUrl: assertReturnUrl(params.get("return") ?? "")
|
|
12028
|
+
};
|
|
12029
|
+
}
|
|
12030
|
+
function buildReturnUrl(returnUrl, outcome) {
|
|
12031
|
+
const url = new URL(assertReturnUrl(returnUrl));
|
|
12032
|
+
url.searchParams.set("approval", outcome);
|
|
12033
|
+
return url.toString();
|
|
12034
|
+
}
|
|
12035
|
+
|
|
11953
12036
|
exports.ADMIN_HEADERS = ADMIN_HEADERS;
|
|
11954
12037
|
exports.ADMIN_SCOPE = ADMIN_SCOPE;
|
|
12038
|
+
exports.APPROVAL_PATH = APPROVAL_PATH;
|
|
11955
12039
|
exports.COIN_MAX_SUPPLY = MAX_SUPPLY;
|
|
11956
12040
|
exports.COIN_MIN_SUPPLY = MIN_SUPPLY;
|
|
11957
12041
|
exports.ClubService = ClubService;
|
|
@@ -11972,6 +12056,7 @@ exports.IPNftABI = IPNftABI;
|
|
|
11972
12056
|
exports.IPSponsorshipABI = IPSponsorshipABI;
|
|
11973
12057
|
exports.IPTicketCollectionABI = IPTicketCollectionABI;
|
|
11974
12058
|
exports.IPTicketCollectionFactoryABI = IPTicketCollectionFactoryABI;
|
|
12059
|
+
exports.InvalidApprovalRequestError = InvalidApprovalRequestError;
|
|
11975
12060
|
exports.InvalidStarkPrivateKeyError = InvalidStarkPrivateKeyError;
|
|
11976
12061
|
exports.MAX_HOLDERS_AT_LAUNCH = MAX_HOLDERS_AT_LAUNCH;
|
|
11977
12062
|
exports.MAX_TEAM_ALLOCATION_PERCENT = MAX_TEAM_ALLOCATION_PERCENT;
|
|
@@ -11993,6 +12078,7 @@ exports.build1155CancellationTypedData = build1155CancellationTypedData;
|
|
|
11993
12078
|
exports.build1155OrderTypedData = build1155OrderTypedData;
|
|
11994
12079
|
exports.buildAddOwnerCall = buildAddOwnerCall;
|
|
11995
12080
|
exports.buildAdminSessionTypedData = buildAdminSessionTypedData;
|
|
12081
|
+
exports.buildApprovalUrl = buildApprovalUrl;
|
|
11996
12082
|
exports.buildCancelEscapeCall = buildCancelEscapeCall;
|
|
11997
12083
|
exports.buildCancellationTypedData = buildCancellationTypedData;
|
|
11998
12084
|
exports.buildChangeOwnersCall = buildChangeOwnersCall;
|
|
@@ -12004,6 +12090,7 @@ exports.buildLaunchOnEkuboCalls = buildLaunchOnEkuboCalls;
|
|
|
12004
12090
|
exports.buildOrderTypedData = buildOrderTypedData;
|
|
12005
12091
|
exports.buildRemoveOwnerByGuidCall = buildRemoveOwnerByGuidCall;
|
|
12006
12092
|
exports.buildRemoveOwnerCall = buildRemoveOwnerCall;
|
|
12093
|
+
exports.buildReturnUrl = buildReturnUrl;
|
|
12007
12094
|
exports.buildSetFirstGuardianCall = buildSetFirstGuardianCall;
|
|
12008
12095
|
exports.buildTriggerEscapeOwnerCall = buildTriggerEscapeOwnerCall;
|
|
12009
12096
|
exports.buybackQuoteRaw = buybackQuoteRaw;
|
|
@@ -12016,6 +12103,7 @@ exports.decodeEscapeAndStatus = decodeEscapeAndStatus;
|
|
|
12016
12103
|
exports.decodeGuardiansInfo = decodeGuardiansInfo;
|
|
12017
12104
|
exports.deriveAesKey = deriveAesKey;
|
|
12018
12105
|
exports.deriveOwnerKeyPair = deriveOwnerKeyPair;
|
|
12106
|
+
exports.deriveStarkKeyPair = deriveStarkKeyPair;
|
|
12019
12107
|
exports.encodeAdminHeaders = encodeAdminHeaders;
|
|
12020
12108
|
exports.encodeByteArray = encodeByteArray;
|
|
12021
12109
|
exports.executeIntent = executeIntent;
|
|
@@ -12034,11 +12122,13 @@ exports.getOrderDetails1155 = getOrderDetails1155;
|
|
|
12034
12122
|
exports.getOwners = getOwners;
|
|
12035
12123
|
exports.getSiwsStorageKey = getSiwsStorageKey;
|
|
12036
12124
|
exports.getStoredSiwsToken = getStoredSiwsToken;
|
|
12125
|
+
exports.isMedialaneOrigin = isMedialaneOrigin;
|
|
12037
12126
|
exports.isSiwsTokenValid = isSiwsTokenValid;
|
|
12038
12127
|
exports.normalizeSiwsSignature = normalizeSiwsSignature;
|
|
12039
12128
|
exports.ownerAliveTypedData = ownerAliveTypedData;
|
|
12040
12129
|
exports.ownerConstructorCalldata = ownerConstructorCalldata;
|
|
12041
12130
|
exports.parseAdminHeaders = parseAdminHeaders;
|
|
12131
|
+
exports.parseApprovalRequest = parseApprovalRequest;
|
|
12042
12132
|
exports.parseCreatorCoinCreated = parseCreatorCoinCreated;
|
|
12043
12133
|
exports.priceToEkuboParams = priceToEkuboParams;
|
|
12044
12134
|
exports.randomNonce = randomNonce;
|