@medialane/sdk 0.114.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.
@@ -11969,8 +11969,73 @@ function signWithPrivateKey(privateKeyHex, msgHash) {
11969
11969
  return [starknet.num.toHex(sig.r), starknet.num.toHex(sig.s)];
11970
11970
  }
11971
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
+
11972
12036
  exports.ADMIN_HEADERS = ADMIN_HEADERS;
11973
12037
  exports.ADMIN_SCOPE = ADMIN_SCOPE;
12038
+ exports.APPROVAL_PATH = APPROVAL_PATH;
11974
12039
  exports.COIN_MAX_SUPPLY = MAX_SUPPLY;
11975
12040
  exports.COIN_MIN_SUPPLY = MIN_SUPPLY;
11976
12041
  exports.ClubService = ClubService;
@@ -11991,6 +12056,7 @@ exports.IPNftABI = IPNftABI;
11991
12056
  exports.IPSponsorshipABI = IPSponsorshipABI;
11992
12057
  exports.IPTicketCollectionABI = IPTicketCollectionABI;
11993
12058
  exports.IPTicketCollectionFactoryABI = IPTicketCollectionFactoryABI;
12059
+ exports.InvalidApprovalRequestError = InvalidApprovalRequestError;
11994
12060
  exports.InvalidStarkPrivateKeyError = InvalidStarkPrivateKeyError;
11995
12061
  exports.MAX_HOLDERS_AT_LAUNCH = MAX_HOLDERS_AT_LAUNCH;
11996
12062
  exports.MAX_TEAM_ALLOCATION_PERCENT = MAX_TEAM_ALLOCATION_PERCENT;
@@ -12012,6 +12078,7 @@ exports.build1155CancellationTypedData = build1155CancellationTypedData;
12012
12078
  exports.build1155OrderTypedData = build1155OrderTypedData;
12013
12079
  exports.buildAddOwnerCall = buildAddOwnerCall;
12014
12080
  exports.buildAdminSessionTypedData = buildAdminSessionTypedData;
12081
+ exports.buildApprovalUrl = buildApprovalUrl;
12015
12082
  exports.buildCancelEscapeCall = buildCancelEscapeCall;
12016
12083
  exports.buildCancellationTypedData = buildCancellationTypedData;
12017
12084
  exports.buildChangeOwnersCall = buildChangeOwnersCall;
@@ -12023,6 +12090,7 @@ exports.buildLaunchOnEkuboCalls = buildLaunchOnEkuboCalls;
12023
12090
  exports.buildOrderTypedData = buildOrderTypedData;
12024
12091
  exports.buildRemoveOwnerByGuidCall = buildRemoveOwnerByGuidCall;
12025
12092
  exports.buildRemoveOwnerCall = buildRemoveOwnerCall;
12093
+ exports.buildReturnUrl = buildReturnUrl;
12026
12094
  exports.buildSetFirstGuardianCall = buildSetFirstGuardianCall;
12027
12095
  exports.buildTriggerEscapeOwnerCall = buildTriggerEscapeOwnerCall;
12028
12096
  exports.buybackQuoteRaw = buybackQuoteRaw;
@@ -12054,11 +12122,13 @@ exports.getOrderDetails1155 = getOrderDetails1155;
12054
12122
  exports.getOwners = getOwners;
12055
12123
  exports.getSiwsStorageKey = getSiwsStorageKey;
12056
12124
  exports.getStoredSiwsToken = getStoredSiwsToken;
12125
+ exports.isMedialaneOrigin = isMedialaneOrigin;
12057
12126
  exports.isSiwsTokenValid = isSiwsTokenValid;
12058
12127
  exports.normalizeSiwsSignature = normalizeSiwsSignature;
12059
12128
  exports.ownerAliveTypedData = ownerAliveTypedData;
12060
12129
  exports.ownerConstructorCalldata = ownerConstructorCalldata;
12061
12130
  exports.parseAdminHeaders = parseAdminHeaders;
12131
+ exports.parseApprovalRequest = parseApprovalRequest;
12062
12132
  exports.parseCreatorCoinCreated = parseCreatorCoinCreated;
12063
12133
  exports.priceToEkuboParams = priceToEkuboParams;
12064
12134
  exports.randomNonce = randomNonce;