LoremLabs / monetization-capabilities-api

https://monetization-capabilities-api.vercel.app
0 stars 0 forks source link

allow capabilities to be re-ordered after initialization #1

Closed mankins closed 3 years ago

mankins commented 3 years ago

Currently:

 * Declare & define a website's capability to monetize by different methods.
 * The order of `define()` calls defines the order for website's monetization
 * preferences (first call being most preferred capability).

I think we should allow capabilities to be re-ordered after the fact.

sidvishnoi commented 3 years ago

Coincidentally added in https://github.com/LoremLabs/monetization-capabilities-api/commit/05096b5ce1aa10ed819802ae802577492fbf8113 before seeing this issue. https://github.com/LoremLabs/monetization-capabilities-api/blob/05096b5ce1aa10ed819802ae802577492fbf8113/src/lib/UserPreferences.ts#L7-L19

sidvishnoi commented 3 years ago

Ah. I misread. What's the use case for reordering capabilities?

sidvishnoi commented 3 years ago

Fixed via https://github.com/LoremLabs/monetization-capabilities-api/commit/8b256c3593dd03600888309ca1cb72e6255df93a

const capabilities = window.monetization.capabilities.acquire();
capabilities.define("ads/behavioral", () => {});
capabilities.use(webMonetization({ timeout: 5000 }));
capabilities.release(); // website needs to be careful when it releases the lock, otherwise someone else can take it over.
window.monetization.capabilities.list(); // ["ads/behavioral", "webmonetization/*"];

// later
const capabilities = window.monetization.capabilities.acquire();
const ads = capabilities.undefine("ads/behavioral");
window.monetization.capabilities.list(); //  ["webmonetization/*"];
capabilities.define("ads/behavioral", ads);
capabilities.release(); // maybe don't ever
window.monetization.capabilities.list(); //  ["webmonetization/*", "ads/behavioral"];