@develit-io/backend-sdk 5.9.0 → 5.10.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/index.cjs CHANGED
@@ -246,6 +246,14 @@ const isRemoteEnvironment = () => {
246
246
  const environment = process.env.ENVIRONMENT;
247
247
  return environment && environment !== "localhost";
248
248
  };
249
+ function derivePortFromId(id, base = 4e3, range = 1e4) {
250
+ let hash = 0;
251
+ for (let i = 0; i < id.length; i++) {
252
+ hash = hash * 31 + id.charCodeAt(i) >>> 0;
253
+ }
254
+ return base + hash % range;
255
+ }
256
+ const getPgLocalConnectionString = (id) => `postgres://db_user:db_password@127.0.0.1:${derivePortFromId(id)}/db`;
249
257
 
250
258
  function durableObjectNamespaceIdFromName(uniqueKey, name) {
251
259
  const key = crypto__default.createHash("sha256").update(uniqueKey).digest();
@@ -253,7 +261,7 @@ function durableObjectNamespaceIdFromName(uniqueKey, name) {
253
261
  const hmac = crypto__default.createHmac("sha256", key).update(nameHmac).digest().subarray(0, 16);
254
262
  return Buffer.concat([nameHmac, hmac]).toString("hex");
255
263
  }
256
- const getDatabaseIdFromWrangler = () => {
264
+ const getD1DatabaseIdFromWrangler = () => {
257
265
  try {
258
266
  const wranglerPath = path__default.resolve("./wrangler.jsonc");
259
267
  const wranglerContent = fs__default.readFileSync(wranglerPath, "utf-8");
@@ -314,7 +322,7 @@ const getD1Credentials = () => {
314
322
  if (environment === "localhost") {
315
323
  return {};
316
324
  }
317
- const databaseId = getDatabaseIdFromWrangler() ?? "";
325
+ const databaseId = getD1DatabaseIdFromWrangler() ?? "";
318
326
  if (isRemoteEnvironment()) {
319
327
  return {
320
328
  driver: "d1-http",
@@ -396,12 +404,30 @@ class DatabaseTransaction {
396
404
  }
397
405
 
398
406
  const defineCommand = (handler) => {
399
- return (params) => ({
407
+ return ((params) => ({
400
408
  handler: (db) => handler(db, params)
401
- });
409
+ }));
402
410
  };
403
411
 
412
+ const getPgDatabaseIdFromWrangler = () => {
413
+ try {
414
+ const wranglerPath = path__default.resolve("./wrangler.jsonc");
415
+ const wranglerContent = fs__default.readFileSync(wranglerPath, "utf-8");
416
+ const config = commentJson.parse(wranglerContent);
417
+ if (!config.name) {
418
+ throw new Error('Missing "name" in wrangler.jsonc');
419
+ }
420
+ const databaseId = `${config.name}-db`;
421
+ console.log(`Using databaseId derived from wrangler name: ${databaseId}`);
422
+ return databaseId;
423
+ } catch (err) {
424
+ console.warn(
425
+ `Warning: Could not derive databaseId from wrangler.jsonc: ${err}`
426
+ );
427
+ }
428
+ };
404
429
  const getPgCredentials = () => {
430
+ const databaseId = getPgDatabaseIdFromWrangler() ?? "";
405
431
  if (isRemoteEnvironment()) {
406
432
  return {
407
433
  dbCredentials: {
@@ -411,7 +437,7 @@ const getPgCredentials = () => {
411
437
  } else {
412
438
  return {
413
439
  dbCredentials: {
414
- url: `postgres://db_user:db_password@127.0.0.1:${process.env.DB_LOCAL_PORT}/db`
440
+ url: getPgLocalConnectionString(databaseId)
415
441
  }
416
442
  };
417
443
  }
@@ -583,6 +609,11 @@ exports.drizzlePgConfig = drizzlePgConfig;
583
609
  exports.durableObjectNamespaceIdFromName = durableObjectNamespaceIdFromName;
584
610
  exports.first = first;
585
611
  exports.firstOrError = firstOrError;
612
+ exports.getD1Credentials = getD1Credentials;
613
+ exports.getD1DatabaseIdFromWrangler = getD1DatabaseIdFromWrangler;
614
+ exports.getPgCredentials = getPgCredentials;
615
+ exports.getPgDatabaseIdFromWrangler = getPgDatabaseIdFromWrangler;
616
+ exports.getPgLocalConnectionString = getPgLocalConnectionString;
586
617
  exports.handleAction = handleAction;
587
618
  exports.handleActionResponse = handleActionResponse;
588
619
  exports.ibanZodSchema = ibanZodSchema;
package/dist/index.d.cts CHANGED
@@ -191,6 +191,27 @@ type AuditLogWriter<TAuditAction = string> = (logs: AuditLogPayload<TAuditAction
191
191
  declare function createAuditLogWriter<TAuditAction = string>(table: AuditLogTable): AuditLogWriter<TAuditAction>;
192
192
 
193
193
  declare function durableObjectNamespaceIdFromName(uniqueKey: string, name: string): string;
194
+ declare const getD1DatabaseIdFromWrangler: () => string | undefined;
195
+ declare const getD1Credentials: () => {
196
+ driver?: undefined;
197
+ dbCredentials?: undefined;
198
+ } | {
199
+ driver: string;
200
+ dbCredentials: {
201
+ accountId: string | undefined;
202
+ databaseId: string;
203
+ token: string | undefined;
204
+ url?: undefined;
205
+ };
206
+ } | {
207
+ dbCredentials: {
208
+ url: string | undefined;
209
+ accountId?: undefined;
210
+ databaseId?: undefined;
211
+ token?: undefined;
212
+ };
213
+ driver?: undefined;
214
+ };
194
215
  declare const drizzleD1Config: {
195
216
  driver?: undefined;
196
217
  dbCredentials?: undefined;
@@ -250,6 +271,7 @@ declare class DatabaseTransaction<TAuditAction = string> {
250
271
  declare function first<T>(rows: T[]): T | undefined;
251
272
  declare function firstOrError<T>(rows: T[]): T;
252
273
  declare const uuidv4: () => `${string}-${string}-${string}-${string}-${string}`;
274
+ declare const getPgLocalConnectionString: (id: string) => string;
253
275
 
254
276
  declare const createInternalError: (error: unknown, details?: {
255
277
  status?: InternalErrorResponseStatus;
@@ -258,6 +280,12 @@ declare const createInternalError: (error: unknown, details?: {
258
280
  }) => InternalError;
259
281
  declare const isInternalError: (error: unknown) => error is InternalError;
260
282
 
283
+ declare const getPgDatabaseIdFromWrangler: () => string | undefined;
284
+ declare const getPgCredentials: () => {
285
+ dbCredentials: {
286
+ url: string;
287
+ };
288
+ };
261
289
  declare const drizzlePgConfig: {
262
290
  migrations: {
263
291
  table: string;
@@ -370,4 +398,5 @@ interface WithRetryCounterOptions {
370
398
  type AsyncMethod<TArgs extends unknown[] = unknown[], TResult = unknown> = (...args: TArgs) => Promise<TResult>;
371
399
  declare function cloudflareQueue<TArgs extends unknown[] = unknown[], TResult = unknown>(options: WithRetryCounterOptions): (target: unknown, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor<AsyncMethod<TArgs, TResult>>) => void;
372
400
 
373
- export { type ActionExecution, type ActionHandlerOptions, type AuditLogWriter, type Command, type CommandLogPayload, DatabaseTransaction, type DevelitWorkerMethods, type GatewayResponse, type IRPCResponse, type IncludeRelation, type InferResultType, type InternalError, type InternalErrorResponseStatus, RPCResponse, type ValidatedInput, action, base, basePostgres, calculateExponentialBackoff, cloudflareQueue, createAuditLogWriter, createInternalError, defineCommand, develitWorker, drizzleD1Config, drizzlePgConfig, durableObjectNamespaceIdFromName, first, firstOrError, handleAction, handleActionResponse, ibanZodSchema, isInternalError, service, swiftZodSchema, useResult, useResultSync, uuidv4 };
401
+ export { DatabaseTransaction, RPCResponse, action, base, basePostgres, calculateExponentialBackoff, cloudflareQueue, createAuditLogWriter, createInternalError, defineCommand, develitWorker, drizzleD1Config, drizzlePgConfig, durableObjectNamespaceIdFromName, first, firstOrError, getD1Credentials, getD1DatabaseIdFromWrangler, getPgCredentials, getPgDatabaseIdFromWrangler, getPgLocalConnectionString, handleAction, handleActionResponse, ibanZodSchema, isInternalError, service, swiftZodSchema, useResult, useResultSync, uuidv4 };
402
+ export type { ActionExecution, ActionHandlerOptions, AuditLogWriter, Command, CommandLogPayload, DevelitWorkerMethods, GatewayResponse, IRPCResponse, IncludeRelation, InferResultType, InternalError, InternalErrorResponseStatus, ValidatedInput };
package/dist/index.d.mts CHANGED
@@ -191,6 +191,27 @@ type AuditLogWriter<TAuditAction = string> = (logs: AuditLogPayload<TAuditAction
191
191
  declare function createAuditLogWriter<TAuditAction = string>(table: AuditLogTable): AuditLogWriter<TAuditAction>;
192
192
 
193
193
  declare function durableObjectNamespaceIdFromName(uniqueKey: string, name: string): string;
194
+ declare const getD1DatabaseIdFromWrangler: () => string | undefined;
195
+ declare const getD1Credentials: () => {
196
+ driver?: undefined;
197
+ dbCredentials?: undefined;
198
+ } | {
199
+ driver: string;
200
+ dbCredentials: {
201
+ accountId: string | undefined;
202
+ databaseId: string;
203
+ token: string | undefined;
204
+ url?: undefined;
205
+ };
206
+ } | {
207
+ dbCredentials: {
208
+ url: string | undefined;
209
+ accountId?: undefined;
210
+ databaseId?: undefined;
211
+ token?: undefined;
212
+ };
213
+ driver?: undefined;
214
+ };
194
215
  declare const drizzleD1Config: {
195
216
  driver?: undefined;
196
217
  dbCredentials?: undefined;
@@ -250,6 +271,7 @@ declare class DatabaseTransaction<TAuditAction = string> {
250
271
  declare function first<T>(rows: T[]): T | undefined;
251
272
  declare function firstOrError<T>(rows: T[]): T;
252
273
  declare const uuidv4: () => `${string}-${string}-${string}-${string}-${string}`;
274
+ declare const getPgLocalConnectionString: (id: string) => string;
253
275
 
254
276
  declare const createInternalError: (error: unknown, details?: {
255
277
  status?: InternalErrorResponseStatus;
@@ -258,6 +280,12 @@ declare const createInternalError: (error: unknown, details?: {
258
280
  }) => InternalError;
259
281
  declare const isInternalError: (error: unknown) => error is InternalError;
260
282
 
283
+ declare const getPgDatabaseIdFromWrangler: () => string | undefined;
284
+ declare const getPgCredentials: () => {
285
+ dbCredentials: {
286
+ url: string;
287
+ };
288
+ };
261
289
  declare const drizzlePgConfig: {
262
290
  migrations: {
263
291
  table: string;
@@ -370,4 +398,5 @@ interface WithRetryCounterOptions {
370
398
  type AsyncMethod<TArgs extends unknown[] = unknown[], TResult = unknown> = (...args: TArgs) => Promise<TResult>;
371
399
  declare function cloudflareQueue<TArgs extends unknown[] = unknown[], TResult = unknown>(options: WithRetryCounterOptions): (target: unknown, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor<AsyncMethod<TArgs, TResult>>) => void;
372
400
 
373
- export { type ActionExecution, type ActionHandlerOptions, type AuditLogWriter, type Command, type CommandLogPayload, DatabaseTransaction, type DevelitWorkerMethods, type GatewayResponse, type IRPCResponse, type IncludeRelation, type InferResultType, type InternalError, type InternalErrorResponseStatus, RPCResponse, type ValidatedInput, action, base, basePostgres, calculateExponentialBackoff, cloudflareQueue, createAuditLogWriter, createInternalError, defineCommand, develitWorker, drizzleD1Config, drizzlePgConfig, durableObjectNamespaceIdFromName, first, firstOrError, handleAction, handleActionResponse, ibanZodSchema, isInternalError, service, swiftZodSchema, useResult, useResultSync, uuidv4 };
401
+ export { DatabaseTransaction, RPCResponse, action, base, basePostgres, calculateExponentialBackoff, cloudflareQueue, createAuditLogWriter, createInternalError, defineCommand, develitWorker, drizzleD1Config, drizzlePgConfig, durableObjectNamespaceIdFromName, first, firstOrError, getD1Credentials, getD1DatabaseIdFromWrangler, getPgCredentials, getPgDatabaseIdFromWrangler, getPgLocalConnectionString, handleAction, handleActionResponse, ibanZodSchema, isInternalError, service, swiftZodSchema, useResult, useResultSync, uuidv4 };
402
+ export type { ActionExecution, ActionHandlerOptions, AuditLogWriter, Command, CommandLogPayload, DevelitWorkerMethods, GatewayResponse, IRPCResponse, IncludeRelation, InferResultType, InternalError, InternalErrorResponseStatus, ValidatedInput };
package/dist/index.d.ts CHANGED
@@ -191,6 +191,27 @@ type AuditLogWriter<TAuditAction = string> = (logs: AuditLogPayload<TAuditAction
191
191
  declare function createAuditLogWriter<TAuditAction = string>(table: AuditLogTable): AuditLogWriter<TAuditAction>;
192
192
 
193
193
  declare function durableObjectNamespaceIdFromName(uniqueKey: string, name: string): string;
194
+ declare const getD1DatabaseIdFromWrangler: () => string | undefined;
195
+ declare const getD1Credentials: () => {
196
+ driver?: undefined;
197
+ dbCredentials?: undefined;
198
+ } | {
199
+ driver: string;
200
+ dbCredentials: {
201
+ accountId: string | undefined;
202
+ databaseId: string;
203
+ token: string | undefined;
204
+ url?: undefined;
205
+ };
206
+ } | {
207
+ dbCredentials: {
208
+ url: string | undefined;
209
+ accountId?: undefined;
210
+ databaseId?: undefined;
211
+ token?: undefined;
212
+ };
213
+ driver?: undefined;
214
+ };
194
215
  declare const drizzleD1Config: {
195
216
  driver?: undefined;
196
217
  dbCredentials?: undefined;
@@ -250,6 +271,7 @@ declare class DatabaseTransaction<TAuditAction = string> {
250
271
  declare function first<T>(rows: T[]): T | undefined;
251
272
  declare function firstOrError<T>(rows: T[]): T;
252
273
  declare const uuidv4: () => `${string}-${string}-${string}-${string}-${string}`;
274
+ declare const getPgLocalConnectionString: (id: string) => string;
253
275
 
254
276
  declare const createInternalError: (error: unknown, details?: {
255
277
  status?: InternalErrorResponseStatus;
@@ -258,6 +280,12 @@ declare const createInternalError: (error: unknown, details?: {
258
280
  }) => InternalError;
259
281
  declare const isInternalError: (error: unknown) => error is InternalError;
260
282
 
283
+ declare const getPgDatabaseIdFromWrangler: () => string | undefined;
284
+ declare const getPgCredentials: () => {
285
+ dbCredentials: {
286
+ url: string;
287
+ };
288
+ };
261
289
  declare const drizzlePgConfig: {
262
290
  migrations: {
263
291
  table: string;
@@ -370,4 +398,5 @@ interface WithRetryCounterOptions {
370
398
  type AsyncMethod<TArgs extends unknown[] = unknown[], TResult = unknown> = (...args: TArgs) => Promise<TResult>;
371
399
  declare function cloudflareQueue<TArgs extends unknown[] = unknown[], TResult = unknown>(options: WithRetryCounterOptions): (target: unknown, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor<AsyncMethod<TArgs, TResult>>) => void;
372
400
 
373
- export { type ActionExecution, type ActionHandlerOptions, type AuditLogWriter, type Command, type CommandLogPayload, DatabaseTransaction, type DevelitWorkerMethods, type GatewayResponse, type IRPCResponse, type IncludeRelation, type InferResultType, type InternalError, type InternalErrorResponseStatus, RPCResponse, type ValidatedInput, action, base, basePostgres, calculateExponentialBackoff, cloudflareQueue, createAuditLogWriter, createInternalError, defineCommand, develitWorker, drizzleD1Config, drizzlePgConfig, durableObjectNamespaceIdFromName, first, firstOrError, handleAction, handleActionResponse, ibanZodSchema, isInternalError, service, swiftZodSchema, useResult, useResultSync, uuidv4 };
401
+ export { DatabaseTransaction, RPCResponse, action, base, basePostgres, calculateExponentialBackoff, cloudflareQueue, createAuditLogWriter, createInternalError, defineCommand, develitWorker, drizzleD1Config, drizzlePgConfig, durableObjectNamespaceIdFromName, first, firstOrError, getD1Credentials, getD1DatabaseIdFromWrangler, getPgCredentials, getPgDatabaseIdFromWrangler, getPgLocalConnectionString, handleAction, handleActionResponse, ibanZodSchema, isInternalError, service, swiftZodSchema, useResult, useResultSync, uuidv4 };
402
+ export type { ActionExecution, ActionHandlerOptions, AuditLogWriter, Command, CommandLogPayload, DevelitWorkerMethods, GatewayResponse, IRPCResponse, IncludeRelation, InferResultType, InternalError, InternalErrorResponseStatus, ValidatedInput };
package/dist/index.mjs CHANGED
@@ -224,6 +224,14 @@ const isRemoteEnvironment = () => {
224
224
  const environment = process.env.ENVIRONMENT;
225
225
  return environment && environment !== "localhost";
226
226
  };
227
+ function derivePortFromId(id, base = 4e3, range = 1e4) {
228
+ let hash = 0;
229
+ for (let i = 0; i < id.length; i++) {
230
+ hash = hash * 31 + id.charCodeAt(i) >>> 0;
231
+ }
232
+ return base + hash % range;
233
+ }
234
+ const getPgLocalConnectionString = (id) => `postgres://db_user:db_password@127.0.0.1:${derivePortFromId(id)}/db`;
227
235
 
228
236
  function durableObjectNamespaceIdFromName(uniqueKey, name) {
229
237
  const key = crypto$1.createHash("sha256").update(uniqueKey).digest();
@@ -231,7 +239,7 @@ function durableObjectNamespaceIdFromName(uniqueKey, name) {
231
239
  const hmac = crypto$1.createHmac("sha256", key).update(nameHmac).digest().subarray(0, 16);
232
240
  return Buffer.concat([nameHmac, hmac]).toString("hex");
233
241
  }
234
- const getDatabaseIdFromWrangler = () => {
242
+ const getD1DatabaseIdFromWrangler = () => {
235
243
  try {
236
244
  const wranglerPath = path.resolve("./wrangler.jsonc");
237
245
  const wranglerContent = fs.readFileSync(wranglerPath, "utf-8");
@@ -292,7 +300,7 @@ const getD1Credentials = () => {
292
300
  if (environment === "localhost") {
293
301
  return {};
294
302
  }
295
- const databaseId = getDatabaseIdFromWrangler() ?? "";
303
+ const databaseId = getD1DatabaseIdFromWrangler() ?? "";
296
304
  if (isRemoteEnvironment()) {
297
305
  return {
298
306
  driver: "d1-http",
@@ -374,12 +382,30 @@ class DatabaseTransaction {
374
382
  }
375
383
 
376
384
  const defineCommand = (handler) => {
377
- return (params) => ({
385
+ return ((params) => ({
378
386
  handler: (db) => handler(db, params)
379
- });
387
+ }));
380
388
  };
381
389
 
390
+ const getPgDatabaseIdFromWrangler = () => {
391
+ try {
392
+ const wranglerPath = path.resolve("./wrangler.jsonc");
393
+ const wranglerContent = fs.readFileSync(wranglerPath, "utf-8");
394
+ const config = parse(wranglerContent);
395
+ if (!config.name) {
396
+ throw new Error('Missing "name" in wrangler.jsonc');
397
+ }
398
+ const databaseId = `${config.name}-db`;
399
+ console.log(`Using databaseId derived from wrangler name: ${databaseId}`);
400
+ return databaseId;
401
+ } catch (err) {
402
+ console.warn(
403
+ `Warning: Could not derive databaseId from wrangler.jsonc: ${err}`
404
+ );
405
+ }
406
+ };
382
407
  const getPgCredentials = () => {
408
+ const databaseId = getPgDatabaseIdFromWrangler() ?? "";
383
409
  if (isRemoteEnvironment()) {
384
410
  return {
385
411
  dbCredentials: {
@@ -389,7 +415,7 @@ const getPgCredentials = () => {
389
415
  } else {
390
416
  return {
391
417
  dbCredentials: {
392
- url: `postgres://db_user:db_password@127.0.0.1:${process.env.DB_LOCAL_PORT}/db`
418
+ url: getPgLocalConnectionString(databaseId)
393
419
  }
394
420
  };
395
421
  }
@@ -545,4 +571,4 @@ function develitWorker(Worker) {
545
571
  return DevelitWorker;
546
572
  }
547
573
 
548
- export { DatabaseTransaction, RPCResponse, action, base, basePostgres, calculateExponentialBackoff, cloudflareQueue, createAuditLogWriter, createInternalError, defineCommand, develitWorker, drizzleD1Config, drizzlePgConfig, durableObjectNamespaceIdFromName, first, firstOrError, handleAction, handleActionResponse, ibanZodSchema, isInternalError, service, swiftZodSchema, useResult, useResultSync, uuidv4 };
574
+ export { DatabaseTransaction, RPCResponse, action, base, basePostgres, calculateExponentialBackoff, cloudflareQueue, createAuditLogWriter, createInternalError, defineCommand, develitWorker, drizzleD1Config, drizzlePgConfig, durableObjectNamespaceIdFromName, first, firstOrError, getD1Credentials, getD1DatabaseIdFromWrangler, getPgCredentials, getPgDatabaseIdFromWrangler, getPgLocalConnectionString, handleAction, handleActionResponse, ibanZodSchema, isInternalError, service, swiftZodSchema, useResult, useResultSync, uuidv4 };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@develit-io/backend-sdk",
3
- "version": "5.9.0",
3
+ "version": "5.10.0",
4
4
  "description": "Develit Backend SDK",
5
5
  "author": "Develit.io",
6
6
  "license": "ISC",
@@ -28,19 +28,16 @@
28
28
  "types": "./dist/index.d.ts",
29
29
  "files": ["dist"],
30
30
  "dependencies": {
31
- "@cloudflare/workers-types": "^4.20250722.0",
31
+ "@cloudflare/workers-types": "^4.20250816.0",
32
32
  "comment-json": "^4.2.5",
33
33
  "consola": "^3.4.2",
34
34
  "drizzle-kit": "^0.31.4",
35
- "drizzle-orm": "^0.44.3",
36
- "h3": "^1.15.3",
35
+ "drizzle-orm": "^0.44.4",
36
+ "h3": "^1.15.4",
37
37
  "http-status-codes": "2.3.0",
38
38
  "superjson": "^2.2.2"
39
39
  },
40
40
  "peerDependencies": {
41
- "zod": "^4.0.11"
42
- },
43
- "devDependencies": {
44
- "vitest": "^1.6.0"
41
+ "zod": "^4.0.17"
45
42
  }
46
43
  }