@drawbridge/drawbridge-utils 0.0.69 → 0.0.70
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/billing.cjs +12 -4
- package/dist/billing.d.cts +29 -10
- package/dist/billing.d.ts +29 -10
- package/dist/billing.js +12 -4
- package/package.json +1 -1
package/dist/billing.cjs
CHANGED
|
@@ -253,21 +253,28 @@ var ai = {
|
|
|
253
253
|
};
|
|
254
254
|
var STANDARD_RATE_PER_GB = 8;
|
|
255
255
|
var PREMIUM_RATE_PER_GB = 11;
|
|
256
|
+
var STANDARD_CPM_CENTS = 0.15;
|
|
257
|
+
var PREMIUM_CPM_CENTS = 0.25;
|
|
256
258
|
var PREMIUM_HOSTS = /* @__PURE__ */ new Set();
|
|
257
259
|
var LOCAL_FLAT_CENTS = 1;
|
|
258
260
|
var REUSE_FLAT_CENTS = 1;
|
|
259
|
-
var
|
|
261
|
+
var isPremium = (url) => {
|
|
260
262
|
try {
|
|
261
|
-
return PREMIUM_HOSTS.has(new URL(url).hostname)
|
|
263
|
+
return PREMIUM_HOSTS.has(new URL(url).hostname);
|
|
262
264
|
} catch {
|
|
263
|
-
return
|
|
265
|
+
return false;
|
|
264
266
|
}
|
|
265
267
|
};
|
|
266
|
-
var
|
|
268
|
+
var ratePerGB = (url) => isPremium(url) ? PREMIUM_RATE_PER_GB : STANDARD_RATE_PER_GB;
|
|
269
|
+
var cpmCents = (url) => isPremium(url) ? PREMIUM_CPM_CENTS : STANDARD_CPM_CENTS;
|
|
270
|
+
var scrapeFee = ({ provider, bytes, requests, url, cold }) => {
|
|
267
271
|
if (!cold) return REUSE_FLAT_CENTS;
|
|
268
272
|
if (provider === "brightdata") {
|
|
269
273
|
return Math.ceil((bytes || 0) / 1e9 * ratePerGB(url) * 100 * MARKUP);
|
|
270
274
|
}
|
|
275
|
+
if (provider === "brightdata-unlocker") {
|
|
276
|
+
return Math.ceil((requests || 0) * cpmCents(url) * MARKUP);
|
|
277
|
+
}
|
|
271
278
|
return LOCAL_FLAT_CENTS;
|
|
272
279
|
};
|
|
273
280
|
var scrape = {
|
|
@@ -290,6 +297,7 @@ var scrape = {
|
|
|
290
297
|
const cents = scrapeFee({
|
|
291
298
|
provider: (_a = page == null ? void 0 : page.provider) == null ? void 0 : _a.name,
|
|
292
299
|
bytes: page == null ? void 0 : page.bytes,
|
|
300
|
+
requests: page == null ? void 0 : page.requests,
|
|
293
301
|
url: (page == null ? void 0 : page.url) || url,
|
|
294
302
|
cold: Boolean(claim == null ? void 0 : claim.value)
|
|
295
303
|
});
|
package/dist/billing.d.cts
CHANGED
|
@@ -174,27 +174,39 @@ const ai = {
|
|
|
174
174
|
|
|
175
175
|
// ─── Scrape (credit rail) ──────────────────────────────────────────────────────
|
|
176
176
|
|
|
177
|
-
// BrightData
|
|
178
|
-
//
|
|
179
|
-
//
|
|
180
|
-
//
|
|
177
|
+
// BrightData has two unblocking tiers, billed on different bases:
|
|
178
|
+
// - Scraping Browser (the CDP fallback): bills by GB of traffic, so its fee is
|
|
179
|
+
// METERED to the bytes measured at scrape time.
|
|
180
|
+
// - Web Unlocker (the last-resort HTML tier): bills per successful request (CPM
|
|
181
|
+
// = per 1,000), so its fee is METERED to the request COUNT the tier made.
|
|
182
|
+
// Both carry the same 30% margin (MARKUP). A cold local render and a cache reuse
|
|
183
|
+
// have no external cost, so they're small flat fees (set to 0 to make either
|
|
184
|
+
// free). Tune the rates against real BrightData invoices.
|
|
181
185
|
const STANDARD_RATE_PER_GB = 8;
|
|
182
186
|
const PREMIUM_RATE_PER_GB = 11;
|
|
187
|
+
// Web Unlocker CPM in cents-per-request: $1.50/1,000 = 0.15¢, $2.50/1,000 = 0.25¢.
|
|
188
|
+
const STANDARD_CPM_CENTS = 0.15;
|
|
189
|
+
const PREMIUM_CPM_CENTS = 0.25;
|
|
190
|
+
// Premium-rate domains — shared by both tiers (empty = everything standard).
|
|
183
191
|
const PREMIUM_HOSTS = new Set();
|
|
184
192
|
const LOCAL_FLAT_CENTS = 1;
|
|
185
193
|
const REUSE_FLAT_CENTS = 1;
|
|
186
194
|
|
|
187
|
-
const
|
|
195
|
+
const isPremium = ( url ) => {
|
|
188
196
|
|
|
189
|
-
try { return PREMIUM_HOSTS.has( new URL( url ).hostname )
|
|
190
|
-
catch { return
|
|
197
|
+
try { return PREMIUM_HOSTS.has( new URL( url ).hostname ); }
|
|
198
|
+
catch { return false; }
|
|
191
199
|
|
|
192
200
|
};
|
|
193
201
|
|
|
202
|
+
const ratePerGB = ( url ) => isPremium( url ) ? PREMIUM_RATE_PER_GB : STANDARD_RATE_PER_GB;
|
|
203
|
+
const cpmCents = ( url ) => isPremium( url ) ? PREMIUM_CPM_CENTS : STANDARD_CPM_CENTS;
|
|
204
|
+
|
|
194
205
|
// Cents to charge. `cold` = the first generation off this scrape (charge the real
|
|
195
|
-
// cost: metered for BrightData, a flat for a local render); otherwise
|
|
196
|
-
// (flat). Rounded up so we never under-bill a fractional cent
|
|
197
|
-
|
|
206
|
+
// cost: metered for either BrightData tier, a flat for a local render); otherwise
|
|
207
|
+
// it's a reuse (flat). Rounded up so we never under-bill a fractional cent — so a
|
|
208
|
+
// typical 1–2 request unlock rounds up to the 1¢ floor.
|
|
209
|
+
const scrapeFee = ({ provider, bytes, requests, url, cold }) => {
|
|
198
210
|
|
|
199
211
|
if( ! cold ) return REUSE_FLAT_CENTS;
|
|
200
212
|
|
|
@@ -204,6 +216,12 @@ const scrapeFee = ({ provider, bytes, url, cold }) => {
|
|
|
204
216
|
|
|
205
217
|
}
|
|
206
218
|
|
|
219
|
+
if( provider === 'brightdata-unlocker' ){
|
|
220
|
+
|
|
221
|
+
return Math.ceil( ( requests || 0 ) * cpmCents( url ) * MARKUP );
|
|
222
|
+
|
|
223
|
+
}
|
|
224
|
+
|
|
207
225
|
return LOCAL_FLAT_CENTS;
|
|
208
226
|
|
|
209
227
|
};
|
|
@@ -233,6 +251,7 @@ const scrape = {
|
|
|
233
251
|
const cents = scrapeFee({
|
|
234
252
|
provider : page?.provider?.name,
|
|
235
253
|
bytes : page?.bytes,
|
|
254
|
+
requests : page?.requests,
|
|
236
255
|
url : page?.url || url,
|
|
237
256
|
cold : Boolean( claim?.value )
|
|
238
257
|
});
|
package/dist/billing.d.ts
CHANGED
|
@@ -174,27 +174,39 @@ const ai = {
|
|
|
174
174
|
|
|
175
175
|
// ─── Scrape (credit rail) ──────────────────────────────────────────────────────
|
|
176
176
|
|
|
177
|
-
// BrightData
|
|
178
|
-
//
|
|
179
|
-
//
|
|
180
|
-
//
|
|
177
|
+
// BrightData has two unblocking tiers, billed on different bases:
|
|
178
|
+
// - Scraping Browser (the CDP fallback): bills by GB of traffic, so its fee is
|
|
179
|
+
// METERED to the bytes measured at scrape time.
|
|
180
|
+
// - Web Unlocker (the last-resort HTML tier): bills per successful request (CPM
|
|
181
|
+
// = per 1,000), so its fee is METERED to the request COUNT the tier made.
|
|
182
|
+
// Both carry the same 30% margin (MARKUP). A cold local render and a cache reuse
|
|
183
|
+
// have no external cost, so they're small flat fees (set to 0 to make either
|
|
184
|
+
// free). Tune the rates against real BrightData invoices.
|
|
181
185
|
const STANDARD_RATE_PER_GB = 8;
|
|
182
186
|
const PREMIUM_RATE_PER_GB = 11;
|
|
187
|
+
// Web Unlocker CPM in cents-per-request: $1.50/1,000 = 0.15¢, $2.50/1,000 = 0.25¢.
|
|
188
|
+
const STANDARD_CPM_CENTS = 0.15;
|
|
189
|
+
const PREMIUM_CPM_CENTS = 0.25;
|
|
190
|
+
// Premium-rate domains — shared by both tiers (empty = everything standard).
|
|
183
191
|
const PREMIUM_HOSTS = new Set();
|
|
184
192
|
const LOCAL_FLAT_CENTS = 1;
|
|
185
193
|
const REUSE_FLAT_CENTS = 1;
|
|
186
194
|
|
|
187
|
-
const
|
|
195
|
+
const isPremium = ( url ) => {
|
|
188
196
|
|
|
189
|
-
try { return PREMIUM_HOSTS.has( new URL( url ).hostname )
|
|
190
|
-
catch { return
|
|
197
|
+
try { return PREMIUM_HOSTS.has( new URL( url ).hostname ); }
|
|
198
|
+
catch { return false; }
|
|
191
199
|
|
|
192
200
|
};
|
|
193
201
|
|
|
202
|
+
const ratePerGB = ( url ) => isPremium( url ) ? PREMIUM_RATE_PER_GB : STANDARD_RATE_PER_GB;
|
|
203
|
+
const cpmCents = ( url ) => isPremium( url ) ? PREMIUM_CPM_CENTS : STANDARD_CPM_CENTS;
|
|
204
|
+
|
|
194
205
|
// Cents to charge. `cold` = the first generation off this scrape (charge the real
|
|
195
|
-
// cost: metered for BrightData, a flat for a local render); otherwise
|
|
196
|
-
// (flat). Rounded up so we never under-bill a fractional cent
|
|
197
|
-
|
|
206
|
+
// cost: metered for either BrightData tier, a flat for a local render); otherwise
|
|
207
|
+
// it's a reuse (flat). Rounded up so we never under-bill a fractional cent — so a
|
|
208
|
+
// typical 1–2 request unlock rounds up to the 1¢ floor.
|
|
209
|
+
const scrapeFee = ({ provider, bytes, requests, url, cold }) => {
|
|
198
210
|
|
|
199
211
|
if( ! cold ) return REUSE_FLAT_CENTS;
|
|
200
212
|
|
|
@@ -204,6 +216,12 @@ const scrapeFee = ({ provider, bytes, url, cold }) => {
|
|
|
204
216
|
|
|
205
217
|
}
|
|
206
218
|
|
|
219
|
+
if( provider === 'brightdata-unlocker' ){
|
|
220
|
+
|
|
221
|
+
return Math.ceil( ( requests || 0 ) * cpmCents( url ) * MARKUP );
|
|
222
|
+
|
|
223
|
+
}
|
|
224
|
+
|
|
207
225
|
return LOCAL_FLAT_CENTS;
|
|
208
226
|
|
|
209
227
|
};
|
|
@@ -233,6 +251,7 @@ const scrape = {
|
|
|
233
251
|
const cents = scrapeFee({
|
|
234
252
|
provider : page?.provider?.name,
|
|
235
253
|
bytes : page?.bytes,
|
|
254
|
+
requests : page?.requests,
|
|
236
255
|
url : page?.url || url,
|
|
237
256
|
cold : Boolean( claim?.value )
|
|
238
257
|
});
|
package/dist/billing.js
CHANGED
|
@@ -224,21 +224,28 @@ var ai = {
|
|
|
224
224
|
};
|
|
225
225
|
var STANDARD_RATE_PER_GB = 8;
|
|
226
226
|
var PREMIUM_RATE_PER_GB = 11;
|
|
227
|
+
var STANDARD_CPM_CENTS = 0.15;
|
|
228
|
+
var PREMIUM_CPM_CENTS = 0.25;
|
|
227
229
|
var PREMIUM_HOSTS = /* @__PURE__ */ new Set();
|
|
228
230
|
var LOCAL_FLAT_CENTS = 1;
|
|
229
231
|
var REUSE_FLAT_CENTS = 1;
|
|
230
|
-
var
|
|
232
|
+
var isPremium = (url) => {
|
|
231
233
|
try {
|
|
232
|
-
return PREMIUM_HOSTS.has(new URL(url).hostname)
|
|
234
|
+
return PREMIUM_HOSTS.has(new URL(url).hostname);
|
|
233
235
|
} catch {
|
|
234
|
-
return
|
|
236
|
+
return false;
|
|
235
237
|
}
|
|
236
238
|
};
|
|
237
|
-
var
|
|
239
|
+
var ratePerGB = (url) => isPremium(url) ? PREMIUM_RATE_PER_GB : STANDARD_RATE_PER_GB;
|
|
240
|
+
var cpmCents = (url) => isPremium(url) ? PREMIUM_CPM_CENTS : STANDARD_CPM_CENTS;
|
|
241
|
+
var scrapeFee = ({ provider, bytes, requests, url, cold }) => {
|
|
238
242
|
if (!cold) return REUSE_FLAT_CENTS;
|
|
239
243
|
if (provider === "brightdata") {
|
|
240
244
|
return Math.ceil((bytes || 0) / 1e9 * ratePerGB(url) * 100 * MARKUP);
|
|
241
245
|
}
|
|
246
|
+
if (provider === "brightdata-unlocker") {
|
|
247
|
+
return Math.ceil((requests || 0) * cpmCents(url) * MARKUP);
|
|
248
|
+
}
|
|
242
249
|
return LOCAL_FLAT_CENTS;
|
|
243
250
|
};
|
|
244
251
|
var scrape = {
|
|
@@ -261,6 +268,7 @@ var scrape = {
|
|
|
261
268
|
const cents = scrapeFee({
|
|
262
269
|
provider: (_a = page == null ? void 0 : page.provider) == null ? void 0 : _a.name,
|
|
263
270
|
bytes: page == null ? void 0 : page.bytes,
|
|
271
|
+
requests: page == null ? void 0 : page.requests,
|
|
264
272
|
url: (page == null ? void 0 : page.url) || url,
|
|
265
273
|
cold: Boolean(claim == null ? void 0 : claim.value)
|
|
266
274
|
});
|
package/package.json
CHANGED