create-db 1.1.4-pr73-DR-6663-rate-limiting-import-20324781629.0 → 1.1.4
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/cli.mjs +1 -1
- package/dist/index.mjs +1 -1
- package/dist/{src-XorNtxX8.mjs → src-BahssNpy.mjs} +15 -67
- package/package.json +1 -1
package/dist/cli.mjs
CHANGED
package/dist/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { a as isDatabaseError, i as RegionSchema, n as createDbCli, o as isDatabaseSuccess, r as regions, t as create } from "./src-
|
|
2
|
+
import { a as isDatabaseError, i as RegionSchema, n as createDbCli, o as isDatabaseSuccess, r as regions, t as create } from "./src-BahssNpy.mjs";
|
|
3
3
|
|
|
4
4
|
export { RegionSchema, create, createDbCli, isDatabaseError, isDatabaseSuccess, regions };
|
|
@@ -65,7 +65,7 @@ function getCommandName() {
|
|
|
65
65
|
if (executable.includes("create-postgres")) return "create-postgres";
|
|
66
66
|
return "create-db";
|
|
67
67
|
}
|
|
68
|
-
async function createDatabaseCore(region, createDbWorkerUrl, claimDbWorkerUrl, userAgent, cliRunId) {
|
|
68
|
+
async function createDatabaseCore(region, createDbWorkerUrl, claimDbWorkerUrl, userAgent, cliRunId, source) {
|
|
69
69
|
const name = (/* @__PURE__ */ new Date()).toISOString();
|
|
70
70
|
const runId = cliRunId ?? randomUUID();
|
|
71
71
|
const resp = await fetch(`${createDbWorkerUrl}/create`, {
|
|
@@ -75,7 +75,8 @@ async function createDatabaseCore(region, createDbWorkerUrl, claimDbWorkerUrl, u
|
|
|
75
75
|
region,
|
|
76
76
|
name,
|
|
77
77
|
utm_source: getCommandName(),
|
|
78
|
-
userAgent
|
|
78
|
+
userAgent,
|
|
79
|
+
source: source || "cli"
|
|
79
80
|
})
|
|
80
81
|
});
|
|
81
82
|
if (resp.status === 429) {
|
|
@@ -84,6 +85,16 @@ async function createDatabaseCore(region, createDbWorkerUrl, claimDbWorkerUrl, u
|
|
|
84
85
|
"error-type": "rate_limit",
|
|
85
86
|
"status-code": 429
|
|
86
87
|
}, runId, createDbWorkerUrl);
|
|
88
|
+
try {
|
|
89
|
+
const errorData = await resp.json();
|
|
90
|
+
if (errorData.error === "RATE_LIMIT_EXCEEDED" && errorData.rateLimitInfo) return {
|
|
91
|
+
success: false,
|
|
92
|
+
error: "RATE_LIMIT_EXCEEDED",
|
|
93
|
+
message: errorData.message,
|
|
94
|
+
rateLimitInfo: errorData.rateLimitInfo,
|
|
95
|
+
status: 429
|
|
96
|
+
};
|
|
97
|
+
} catch {}
|
|
87
98
|
return {
|
|
88
99
|
success: false,
|
|
89
100
|
error: "rate_limit_exceeded",
|
|
@@ -301,54 +312,6 @@ async function validateRegion(region, workerUrl) {
|
|
|
301
312
|
return region;
|
|
302
313
|
}
|
|
303
314
|
|
|
304
|
-
//#endregion
|
|
305
|
-
//#region src/rate-limiter.ts
|
|
306
|
-
const MAX_REQUESTS = 5;
|
|
307
|
-
const WINDOW_MS = 6e4;
|
|
308
|
-
var RateLimiter = class {
|
|
309
|
-
requests = [];
|
|
310
|
-
/**
|
|
311
|
-
* Check if a new request is allowed under the rate limit
|
|
312
|
-
* @returns true if allowed, false if rate limit exceeded
|
|
313
|
-
*/
|
|
314
|
-
checkLimit() {
|
|
315
|
-
const now = Date.now();
|
|
316
|
-
this.requests = this.requests.filter((record) => now - record.timestamp < WINDOW_MS);
|
|
317
|
-
if (this.requests.length >= MAX_REQUESTS) return false;
|
|
318
|
-
this.requests.push({ timestamp: now });
|
|
319
|
-
return true;
|
|
320
|
-
}
|
|
321
|
-
/**
|
|
322
|
-
* Get the time in milliseconds until the rate limit resets
|
|
323
|
-
*/
|
|
324
|
-
getTimeUntilReset() {
|
|
325
|
-
if (this.requests.length === 0) return 0;
|
|
326
|
-
const oldestRequest = this.requests[0];
|
|
327
|
-
if (!oldestRequest) return 0;
|
|
328
|
-
const timeUntilReset = WINDOW_MS - (Date.now() - oldestRequest.timestamp);
|
|
329
|
-
return Math.max(0, timeUntilReset);
|
|
330
|
-
}
|
|
331
|
-
/**
|
|
332
|
-
* Get the current number of requests in the window
|
|
333
|
-
*/
|
|
334
|
-
getCurrentCount() {
|
|
335
|
-
const now = Date.now();
|
|
336
|
-
this.requests = this.requests.filter((record) => now - record.timestamp < WINDOW_MS);
|
|
337
|
-
return this.requests.length;
|
|
338
|
-
}
|
|
339
|
-
/**
|
|
340
|
-
* Get the current configuration (read-only)
|
|
341
|
-
* @internal
|
|
342
|
-
*/
|
|
343
|
-
getConfig() {
|
|
344
|
-
return {
|
|
345
|
-
maxRequests: MAX_REQUESTS,
|
|
346
|
-
windowMs: WINDOW_MS
|
|
347
|
-
};
|
|
348
|
-
}
|
|
349
|
-
};
|
|
350
|
-
const globalRateLimiter = new RateLimiter();
|
|
351
|
-
|
|
352
315
|
//#endregion
|
|
353
316
|
//#region src/index.ts
|
|
354
317
|
dotenv.config({ quiet: true });
|
|
@@ -365,7 +328,7 @@ const checkOnlineWithUrl = async () => {
|
|
|
365
328
|
};
|
|
366
329
|
const getRegionsWithUrl = () => getRegions(CREATE_DB_WORKER_URL);
|
|
367
330
|
const validateRegionWithUrl = (region) => validateRegion(region, CREATE_DB_WORKER_URL);
|
|
368
|
-
const createDatabaseCoreWithUrl = (region, userAgent, cliRunId) => createDatabaseCore(region, CREATE_DB_WORKER_URL, CLAIM_DB_WORKER_URL, userAgent, cliRunId);
|
|
331
|
+
const createDatabaseCoreWithUrl = (region, userAgent, cliRunId, source) => createDatabaseCore(region, CREATE_DB_WORKER_URL, CLAIM_DB_WORKER_URL, userAgent, cliRunId, source);
|
|
369
332
|
const router = os.router({
|
|
370
333
|
create: os.meta({
|
|
371
334
|
description: "Create a new Prisma Postgres database",
|
|
@@ -558,22 +521,7 @@ createRouterClient(router, { context: {} });
|
|
|
558
521
|
* ```
|
|
559
522
|
*/
|
|
560
523
|
async function create(options) {
|
|
561
|
-
|
|
562
|
-
const retryAfterMs = globalRateLimiter.getTimeUntilReset();
|
|
563
|
-
const config = globalRateLimiter.getConfig();
|
|
564
|
-
const retryAfterSeconds = Math.ceil(retryAfterMs / 1e3);
|
|
565
|
-
return {
|
|
566
|
-
success: false,
|
|
567
|
-
error: "RATE_LIMIT_EXCEEDED",
|
|
568
|
-
message: `Rate limit exceeded. You can create up to ${config.maxRequests} databases per ${Math.ceil(config.windowMs / 1e3)} seconds. Please try again in ${retryAfterSeconds} seconds.`,
|
|
569
|
-
rateLimitInfo: {
|
|
570
|
-
retryAfterMs,
|
|
571
|
-
currentCount: globalRateLimiter.getCurrentCount(),
|
|
572
|
-
maxRequests: config.maxRequests
|
|
573
|
-
}
|
|
574
|
-
};
|
|
575
|
-
}
|
|
576
|
-
return createDatabaseCoreWithUrl(options?.region || "us-east-1", options?.userAgent);
|
|
524
|
+
return createDatabaseCoreWithUrl(options?.region || "us-east-1", options?.userAgent, void 0, "programmatic");
|
|
577
525
|
}
|
|
578
526
|
/**
|
|
579
527
|
* List available Prisma Postgres regions programmatically.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-db",
|
|
3
|
-
"version": "1.1.4
|
|
3
|
+
"version": "1.1.4",
|
|
4
4
|
"description": "Instantly create a temporary Prisma Postgres database with one command, then claim and persist it in your Prisma Data Platform project when ready.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|