@windrun-huaiin/backend-core 13.0.0 → 14.0.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.
Files changed (104) hide show
  1. package/dist/_virtual/index.js +7 -3
  2. package/dist/_virtual/index.mjs +5 -3
  3. package/dist/_virtual/index2.js +2 -6
  4. package/dist/_virtual/index2.mjs +2 -6
  5. package/dist/index.js +2 -0
  6. package/dist/index.mjs +1 -1
  7. package/dist/lib/index.js +2 -0
  8. package/dist/lib/index.mjs +1 -1
  9. package/dist/lib/upstash/qstash.d.ts.map +1 -1
  10. package/dist/lib/upstash/qstash.js +66 -62
  11. package/dist/lib/upstash/qstash.mjs +67 -63
  12. package/dist/lib/upstash/redis-counter.d.ts.map +1 -1
  13. package/dist/lib/upstash/redis-counter.js +9 -24
  14. package/dist/lib/upstash/redis-counter.mjs +10 -25
  15. package/dist/lib/upstash/redis-favorite.d.ts.map +1 -1
  16. package/dist/lib/upstash/redis-favorite.js +22 -36
  17. package/dist/lib/upstash/redis-favorite.mjs +23 -37
  18. package/dist/lib/upstash/redis-like.d.ts.map +1 -1
  19. package/dist/lib/upstash/redis-like.js +22 -36
  20. package/dist/lib/upstash/redis-like.mjs +23 -37
  21. package/dist/lib/upstash/redis-lock.d.ts.map +1 -1
  22. package/dist/lib/upstash/redis-lock.js +22 -38
  23. package/dist/lib/upstash/redis-lock.mjs +23 -39
  24. package/dist/lib/upstash/redis-structures.d.ts.map +1 -1
  25. package/dist/lib/upstash/redis-structures.js +77 -113
  26. package/dist/lib/upstash/redis-structures.mjs +78 -114
  27. package/dist/lib/upstash-config.d.ts +9 -1
  28. package/dist/lib/upstash-config.d.ts.map +1 -1
  29. package/dist/lib/upstash-config.js +221 -27
  30. package/dist/lib/upstash-config.mjs +220 -28
  31. package/dist/node_modules/.pnpm/{@upstash_qstash@2.8.4/node_modules/@upstash/qstash/chunk-RQPZUJXG.js → @upstash_qstash@2.10.1/node_modules/@upstash/qstash/chunk-35B33QW3.js} +897 -468
  32. package/dist/node_modules/.pnpm/{@upstash_qstash@2.8.4/node_modules/@upstash/qstash/chunk-RQPZUJXG.mjs → @upstash_qstash@2.10.1/node_modules/@upstash/qstash/chunk-35B33QW3.mjs} +895 -468
  33. package/dist/node_modules/.pnpm/{@upstash_redis@1.36.1/node_modules/@upstash/redis/chunk-LLI2WIYN.js → @upstash_redis@1.37.0/node_modules/@upstash/redis/chunk-IH7W44G6.js} +657 -40
  34. package/dist/node_modules/.pnpm/{@upstash_redis@1.36.1/node_modules/@upstash/redis/chunk-LLI2WIYN.mjs → @upstash_redis@1.37.0/node_modules/@upstash/redis/chunk-IH7W44G6.mjs} +657 -41
  35. package/dist/node_modules/.pnpm/{@upstash_redis@1.36.1 → @upstash_redis@1.37.0}/node_modules/@upstash/redis/nodejs.js +6 -5
  36. package/dist/node_modules/.pnpm/{@upstash_redis@1.36.1 → @upstash_redis@1.37.0}/node_modules/@upstash/redis/nodejs.mjs +2 -2
  37. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/index.js +1 -1
  38. package/dist/node_modules/.pnpm/crypto-js@4.2.0/node_modules/crypto-js/index.mjs +1 -1
  39. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/jws/flattened/verify.js +6 -6
  40. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/jwt/verify.js +1 -1
  41. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/key/import.js +2 -2
  42. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/lib/epoch.js +3 -1
  43. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/lib/is_disjoint.js +3 -1
  44. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/lib/is_jwk.js +1 -1
  45. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/lib/is_object.js +3 -1
  46. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/lib/jwt_claims_set.js +7 -5
  47. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/lib/secs.js +3 -1
  48. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/lib/validate_algorithms.js +3 -1
  49. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/lib/validate_crit.js +3 -1
  50. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/runtime/check_key_length.js +3 -1
  51. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/runtime/dsa_digest.js +3 -1
  52. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/runtime/get_named_curve.js +4 -2
  53. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/runtime/get_sign_verify_key.js +3 -1
  54. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/runtime/hmac_digest.js +3 -1
  55. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/runtime/is_key_like.js +1 -1
  56. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/runtime/is_key_object.js +3 -1
  57. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/runtime/jwk_to_key.js +3 -1
  58. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/runtime/node_key.js +6 -4
  59. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/runtime/sign.js +6 -4
  60. package/dist/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/esm/runtime/verify.js +7 -5
  61. package/dist/prisma/prisma.d.ts +1 -1
  62. package/dist/prisma/prisma.d.ts.map +1 -1
  63. package/package.json +5 -5
  64. package/src/lib/upstash/qstash.ts +64 -62
  65. package/src/lib/upstash/redis-counter.ts +10 -26
  66. package/src/lib/upstash/redis-favorite.ts +23 -42
  67. package/src/lib/upstash/redis-like.ts +23 -42
  68. package/src/lib/upstash/redis-lock.ts +23 -49
  69. package/src/lib/upstash/redis-structures.ts +82 -131
  70. package/src/lib/upstash-config.ts +231 -24
  71. package/dist/_virtual/index3.js +0 -5
  72. package/dist/_virtual/index3.mjs +0 -3
  73. package/dist/node_modules/.pnpm/@upstash_lock@0.2.1_typescript@5.9.3/node_modules/@upstash/lock/dist/index.js +0 -191
  74. package/dist/node_modules/.pnpm/@upstash_lock@0.2.1_typescript@5.9.3/node_modules/@upstash/lock/dist/index.mjs +0 -189
  75. package/dist/node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/classic/errors.js +0 -54
  76. package/dist/node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/classic/errors.mjs +0 -51
  77. package/dist/node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/classic/iso.js +0 -44
  78. package/dist/node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/classic/iso.mjs +0 -35
  79. package/dist/node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/classic/parse.js +0 -31
  80. package/dist/node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/classic/parse.mjs +0 -18
  81. package/dist/node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/classic/schemas.js +0 -587
  82. package/dist/node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/classic/schemas.mjs +0 -527
  83. package/dist/node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/api.js +0 -447
  84. package/dist/node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/api.mjs +0 -399
  85. package/dist/node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/checks.js +0 -245
  86. package/dist/node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/checks.mjs +0 -232
  87. package/dist/node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/core.js +0 -68
  88. package/dist/node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/core.mjs +0 -62
  89. package/dist/node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/doc.js +0 -39
  90. package/dist/node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/doc.mjs +0 -37
  91. package/dist/node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/errors.js +0 -80
  92. package/dist/node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/errors.mjs +0 -75
  93. package/dist/node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/parse.js +0 -101
  94. package/dist/node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/parse.mjs +0 -86
  95. package/dist/node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/regexes.js +0 -102
  96. package/dist/node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/regexes.mjs +0 -76
  97. package/dist/node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/registries.js +0 -56
  98. package/dist/node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/registries.mjs +0 -52
  99. package/dist/node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/schemas.js +0 -1205
  100. package/dist/node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/schemas.mjs +0 -1157
  101. package/dist/node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/util.js +0 -407
  102. package/dist/node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/util.mjs +0 -374
  103. package/dist/node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/versions.js +0 -9
  104. package/dist/node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/versions.mjs +0 -7
@@ -9,62 +9,48 @@ const favoriteUserKey = (userId) => `favorite:user:${userId}`;
9
9
  * Favorite a target. Returns true if added, false if already favorited, null if Redis is unavailable.
10
10
  */
11
11
  const addFavorite = (targetId, userId) => tslib_es6.__awaiter(void 0, void 0, void 0, function* () {
12
- const redis = upstashConfig.getRedis();
13
- if (!redis) {
14
- return null;
15
- }
16
- const added = yield redis.sadd(favoriteTargetKey(targetId), userId);
17
- if (added === 1) {
18
- yield redis.sadd(favoriteUserKey(userId), targetId);
19
- return true;
20
- }
21
- return false;
12
+ return upstashConfig.withRedis((redis) => tslib_es6.__awaiter(void 0, void 0, void 0, function* () {
13
+ const added = yield redis.sadd(favoriteTargetKey(targetId), userId);
14
+ if (added === 1) {
15
+ yield redis.sadd(favoriteUserKey(userId), targetId);
16
+ return true;
17
+ }
18
+ return false;
19
+ }));
22
20
  });
23
21
  /**
24
22
  * Remove a favorite. Returns true if removed, false if not found, null if Redis is unavailable.
25
23
  */
26
24
  const removeFavorite = (targetId, userId) => tslib_es6.__awaiter(void 0, void 0, void 0, function* () {
27
- const redis = upstashConfig.getRedis();
28
- if (!redis) {
29
- return null;
30
- }
31
- const removed = yield redis.srem(favoriteTargetKey(targetId), userId);
32
- if (removed === 1) {
33
- yield redis.srem(favoriteUserKey(userId), targetId);
34
- return true;
35
- }
36
- return false;
25
+ return upstashConfig.withRedis((redis) => tslib_es6.__awaiter(void 0, void 0, void 0, function* () {
26
+ const removed = yield redis.srem(favoriteTargetKey(targetId), userId);
27
+ if (removed === 1) {
28
+ yield redis.srem(favoriteUserKey(userId), targetId);
29
+ return true;
30
+ }
31
+ return false;
32
+ }));
37
33
  });
38
34
  /**
39
35
  * Check whether a user has favorited a target. Returns null if Redis is unavailable.
40
36
  */
41
37
  const isFavorited = (targetId, userId) => tslib_es6.__awaiter(void 0, void 0, void 0, function* () {
42
- const redis = upstashConfig.getRedis();
43
- if (!redis) {
44
- return null;
45
- }
46
- const result = yield redis.sismember(favoriteTargetKey(targetId), userId);
47
- return result === 1;
38
+ return upstashConfig.withRedis((redis) => tslib_es6.__awaiter(void 0, void 0, void 0, function* () {
39
+ const result = yield redis.sismember(favoriteTargetKey(targetId), userId);
40
+ return result === 1;
41
+ }));
48
42
  });
49
43
  /**
50
44
  * Get favorite count for a target. Returns null if Redis is unavailable.
51
45
  */
52
46
  const getFavoriteCount = (targetId) => tslib_es6.__awaiter(void 0, void 0, void 0, function* () {
53
- const redis = upstashConfig.getRedis();
54
- if (!redis) {
55
- return null;
56
- }
57
- return redis.scard(favoriteTargetKey(targetId));
47
+ return upstashConfig.withRedis((redis) => redis.scard(favoriteTargetKey(targetId)));
58
48
  });
59
49
  /**
60
50
  * Get target ids favorited by a user. Returns null if Redis is unavailable.
61
51
  */
62
52
  const getUserFavorites = (userId) => tslib_es6.__awaiter(void 0, void 0, void 0, function* () {
63
- const redis = upstashConfig.getRedis();
64
- if (!redis) {
65
- return null;
66
- }
67
- return redis.smembers(favoriteUserKey(userId));
53
+ return upstashConfig.withRedis((redis) => redis.smembers(favoriteUserKey(userId)));
68
54
  });
69
55
 
70
56
  exports.addFavorite = addFavorite;
@@ -1,5 +1,5 @@
1
1
  import { __awaiter } from '../../node_modules/.pnpm/@rollup_plugin-typescript@12.1.4_rollup@4.46.2_tslib@2.8.1_typescript@5.9.3/node_modules/tslib/tslib.es6.mjs';
2
- import { getRedis } from '../upstash-config.mjs';
2
+ import { withRedis } from '../upstash-config.mjs';
3
3
 
4
4
  const favoriteTargetKey = (targetId) => `favorite:target:${targetId}`;
5
5
  const favoriteUserKey = (userId) => `favorite:user:${userId}`;
@@ -7,62 +7,48 @@ const favoriteUserKey = (userId) => `favorite:user:${userId}`;
7
7
  * Favorite a target. Returns true if added, false if already favorited, null if Redis is unavailable.
8
8
  */
9
9
  const addFavorite = (targetId, userId) => __awaiter(void 0, void 0, void 0, function* () {
10
- const redis = getRedis();
11
- if (!redis) {
12
- return null;
13
- }
14
- const added = yield redis.sadd(favoriteTargetKey(targetId), userId);
15
- if (added === 1) {
16
- yield redis.sadd(favoriteUserKey(userId), targetId);
17
- return true;
18
- }
19
- return false;
10
+ return withRedis((redis) => __awaiter(void 0, void 0, void 0, function* () {
11
+ const added = yield redis.sadd(favoriteTargetKey(targetId), userId);
12
+ if (added === 1) {
13
+ yield redis.sadd(favoriteUserKey(userId), targetId);
14
+ return true;
15
+ }
16
+ return false;
17
+ }));
20
18
  });
21
19
  /**
22
20
  * Remove a favorite. Returns true if removed, false if not found, null if Redis is unavailable.
23
21
  */
24
22
  const removeFavorite = (targetId, userId) => __awaiter(void 0, void 0, void 0, function* () {
25
- const redis = getRedis();
26
- if (!redis) {
27
- return null;
28
- }
29
- const removed = yield redis.srem(favoriteTargetKey(targetId), userId);
30
- if (removed === 1) {
31
- yield redis.srem(favoriteUserKey(userId), targetId);
32
- return true;
33
- }
34
- return false;
23
+ return withRedis((redis) => __awaiter(void 0, void 0, void 0, function* () {
24
+ const removed = yield redis.srem(favoriteTargetKey(targetId), userId);
25
+ if (removed === 1) {
26
+ yield redis.srem(favoriteUserKey(userId), targetId);
27
+ return true;
28
+ }
29
+ return false;
30
+ }));
35
31
  });
36
32
  /**
37
33
  * Check whether a user has favorited a target. Returns null if Redis is unavailable.
38
34
  */
39
35
  const isFavorited = (targetId, userId) => __awaiter(void 0, void 0, void 0, function* () {
40
- const redis = getRedis();
41
- if (!redis) {
42
- return null;
43
- }
44
- const result = yield redis.sismember(favoriteTargetKey(targetId), userId);
45
- return result === 1;
36
+ return withRedis((redis) => __awaiter(void 0, void 0, void 0, function* () {
37
+ const result = yield redis.sismember(favoriteTargetKey(targetId), userId);
38
+ return result === 1;
39
+ }));
46
40
  });
47
41
  /**
48
42
  * Get favorite count for a target. Returns null if Redis is unavailable.
49
43
  */
50
44
  const getFavoriteCount = (targetId) => __awaiter(void 0, void 0, void 0, function* () {
51
- const redis = getRedis();
52
- if (!redis) {
53
- return null;
54
- }
55
- return redis.scard(favoriteTargetKey(targetId));
45
+ return withRedis((redis) => redis.scard(favoriteTargetKey(targetId)));
56
46
  });
57
47
  /**
58
48
  * Get target ids favorited by a user. Returns null if Redis is unavailable.
59
49
  */
60
50
  const getUserFavorites = (userId) => __awaiter(void 0, void 0, void 0, function* () {
61
- const redis = getRedis();
62
- if (!redis) {
63
- return null;
64
- }
65
- return redis.smembers(favoriteUserKey(userId));
51
+ return withRedis((redis) => redis.smembers(favoriteUserKey(userId)));
66
52
  });
67
53
 
68
54
  export { addFavorite, getFavoriteCount, getUserFavorites, isFavorited, removeFavorite };
@@ -1 +1 @@
1
- {"version":3,"file":"redis-like.d.ts","sourceRoot":"","sources":["../../../src/lib/upstash/redis-like.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,eAAO,MAAM,UAAU,GAAU,UAAU,MAAM,EAAE,QAAQ,MAAM,KAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAYzF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,GAAU,UAAU,MAAM,EAAE,QAAQ,MAAM,KAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAY3F,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,GAAU,UAAU,MAAM,EAAE,QAAQ,MAAM,KAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAQ5F,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAAU,UAAU,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAOhF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAAU,QAAQ,MAAM,KAAG,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAOjF,CAAC"}
1
+ {"version":3,"file":"redis-like.d.ts","sourceRoot":"","sources":["../../../src/lib/upstash/redis-like.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,eAAO,MAAM,UAAU,GAAU,UAAU,MAAM,EAAE,QAAQ,MAAM,KAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CASzF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,GAAU,UAAU,MAAM,EAAE,QAAQ,MAAM,KAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAS3F,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,GAAU,UAAU,MAAM,EAAE,QAAQ,MAAM,KAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAK5F,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAAU,UAAU,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAEhF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAAU,QAAQ,MAAM,KAAG,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAEjF,CAAC"}
@@ -9,62 +9,48 @@ const likeUserKey = (userId) => `like:user:${userId}`;
9
9
  * Like a target. Returns true if the like was added, false if it already existed, null if Redis is unavailable.
10
10
  */
11
11
  const likeTarget = (targetId, userId) => tslib_es6.__awaiter(void 0, void 0, void 0, function* () {
12
- const redis = upstashConfig.getRedis();
13
- if (!redis) {
14
- return null;
15
- }
16
- const added = yield redis.sadd(likeTargetKey(targetId), userId);
17
- if (added === 1) {
18
- yield redis.sadd(likeUserKey(userId), targetId);
19
- return true;
20
- }
21
- return false;
12
+ return upstashConfig.withRedis((redis) => tslib_es6.__awaiter(void 0, void 0, void 0, function* () {
13
+ const added = yield redis.sadd(likeTargetKey(targetId), userId);
14
+ if (added === 1) {
15
+ yield redis.sadd(likeUserKey(userId), targetId);
16
+ return true;
17
+ }
18
+ return false;
19
+ }));
22
20
  });
23
21
  /**
24
22
  * Unlike a target. Returns true if removed, false if it didn't exist, null if Redis is unavailable.
25
23
  */
26
24
  const unlikeTarget = (targetId, userId) => tslib_es6.__awaiter(void 0, void 0, void 0, function* () {
27
- const redis = upstashConfig.getRedis();
28
- if (!redis) {
29
- return null;
30
- }
31
- const removed = yield redis.srem(likeTargetKey(targetId), userId);
32
- if (removed === 1) {
33
- yield redis.srem(likeUserKey(userId), targetId);
34
- return true;
35
- }
36
- return false;
25
+ return upstashConfig.withRedis((redis) => tslib_es6.__awaiter(void 0, void 0, void 0, function* () {
26
+ const removed = yield redis.srem(likeTargetKey(targetId), userId);
27
+ if (removed === 1) {
28
+ yield redis.srem(likeUserKey(userId), targetId);
29
+ return true;
30
+ }
31
+ return false;
32
+ }));
37
33
  });
38
34
  /**
39
35
  * Check whether a user liked a target. Returns null if Redis is unavailable.
40
36
  */
41
37
  const isTargetLiked = (targetId, userId) => tslib_es6.__awaiter(void 0, void 0, void 0, function* () {
42
- const redis = upstashConfig.getRedis();
43
- if (!redis) {
44
- return null;
45
- }
46
- const result = yield redis.sismember(likeTargetKey(targetId), userId);
47
- return result === 1;
38
+ return upstashConfig.withRedis((redis) => tslib_es6.__awaiter(void 0, void 0, void 0, function* () {
39
+ const result = yield redis.sismember(likeTargetKey(targetId), userId);
40
+ return result === 1;
41
+ }));
48
42
  });
49
43
  /**
50
44
  * Get like count for a target (unique by user). Returns null if Redis is unavailable.
51
45
  */
52
46
  const getTargetLikeCount = (targetId) => tslib_es6.__awaiter(void 0, void 0, void 0, function* () {
53
- const redis = upstashConfig.getRedis();
54
- if (!redis) {
55
- return null;
56
- }
57
- return redis.scard(likeTargetKey(targetId));
47
+ return upstashConfig.withRedis((redis) => redis.scard(likeTargetKey(targetId)));
58
48
  });
59
49
  /**
60
50
  * Get target ids liked by a user. Returns null if Redis is unavailable.
61
51
  */
62
52
  const getUserLikedTargets = (userId) => tslib_es6.__awaiter(void 0, void 0, void 0, function* () {
63
- const redis = upstashConfig.getRedis();
64
- if (!redis) {
65
- return null;
66
- }
67
- return redis.smembers(likeUserKey(userId));
53
+ return upstashConfig.withRedis((redis) => redis.smembers(likeUserKey(userId)));
68
54
  });
69
55
 
70
56
  exports.getTargetLikeCount = getTargetLikeCount;
@@ -1,5 +1,5 @@
1
1
  import { __awaiter } from '../../node_modules/.pnpm/@rollup_plugin-typescript@12.1.4_rollup@4.46.2_tslib@2.8.1_typescript@5.9.3/node_modules/tslib/tslib.es6.mjs';
2
- import { getRedis } from '../upstash-config.mjs';
2
+ import { withRedis } from '../upstash-config.mjs';
3
3
 
4
4
  const likeTargetKey = (targetId) => `like:target:${targetId}`;
5
5
  const likeUserKey = (userId) => `like:user:${userId}`;
@@ -7,62 +7,48 @@ const likeUserKey = (userId) => `like:user:${userId}`;
7
7
  * Like a target. Returns true if the like was added, false if it already existed, null if Redis is unavailable.
8
8
  */
9
9
  const likeTarget = (targetId, userId) => __awaiter(void 0, void 0, void 0, function* () {
10
- const redis = getRedis();
11
- if (!redis) {
12
- return null;
13
- }
14
- const added = yield redis.sadd(likeTargetKey(targetId), userId);
15
- if (added === 1) {
16
- yield redis.sadd(likeUserKey(userId), targetId);
17
- return true;
18
- }
19
- return false;
10
+ return withRedis((redis) => __awaiter(void 0, void 0, void 0, function* () {
11
+ const added = yield redis.sadd(likeTargetKey(targetId), userId);
12
+ if (added === 1) {
13
+ yield redis.sadd(likeUserKey(userId), targetId);
14
+ return true;
15
+ }
16
+ return false;
17
+ }));
20
18
  });
21
19
  /**
22
20
  * Unlike a target. Returns true if removed, false if it didn't exist, null if Redis is unavailable.
23
21
  */
24
22
  const unlikeTarget = (targetId, userId) => __awaiter(void 0, void 0, void 0, function* () {
25
- const redis = getRedis();
26
- if (!redis) {
27
- return null;
28
- }
29
- const removed = yield redis.srem(likeTargetKey(targetId), userId);
30
- if (removed === 1) {
31
- yield redis.srem(likeUserKey(userId), targetId);
32
- return true;
33
- }
34
- return false;
23
+ return withRedis((redis) => __awaiter(void 0, void 0, void 0, function* () {
24
+ const removed = yield redis.srem(likeTargetKey(targetId), userId);
25
+ if (removed === 1) {
26
+ yield redis.srem(likeUserKey(userId), targetId);
27
+ return true;
28
+ }
29
+ return false;
30
+ }));
35
31
  });
36
32
  /**
37
33
  * Check whether a user liked a target. Returns null if Redis is unavailable.
38
34
  */
39
35
  const isTargetLiked = (targetId, userId) => __awaiter(void 0, void 0, void 0, function* () {
40
- const redis = getRedis();
41
- if (!redis) {
42
- return null;
43
- }
44
- const result = yield redis.sismember(likeTargetKey(targetId), userId);
45
- return result === 1;
36
+ return withRedis((redis) => __awaiter(void 0, void 0, void 0, function* () {
37
+ const result = yield redis.sismember(likeTargetKey(targetId), userId);
38
+ return result === 1;
39
+ }));
46
40
  });
47
41
  /**
48
42
  * Get like count for a target (unique by user). Returns null if Redis is unavailable.
49
43
  */
50
44
  const getTargetLikeCount = (targetId) => __awaiter(void 0, void 0, void 0, function* () {
51
- const redis = getRedis();
52
- if (!redis) {
53
- return null;
54
- }
55
- return redis.scard(likeTargetKey(targetId));
45
+ return withRedis((redis) => redis.scard(likeTargetKey(targetId)));
56
46
  });
57
47
  /**
58
48
  * Get target ids liked by a user. Returns null if Redis is unavailable.
59
49
  */
60
50
  const getUserLikedTargets = (userId) => __awaiter(void 0, void 0, void 0, function* () {
61
- const redis = getRedis();
62
- if (!redis) {
63
- return null;
64
- }
65
- return redis.smembers(likeUserKey(userId));
51
+ return withRedis((redis) => redis.smembers(likeUserKey(userId)));
66
52
  });
67
53
 
68
54
  export { getTargetLikeCount, getUserLikedTargets, isTargetLiked, likeTarget, unlikeTarget };
@@ -1 +1 @@
1
- {"version":3,"file":"redis-lock.d.ts","sourceRoot":"","sources":["../../../src/lib/upstash/redis-lock.ts"],"names":[],"mappings":"AAuCA;;GAEG;AACH,eAAO,MAAM,WAAW,GAAU,KAAK,MAAM,EAAE,OAAO,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAMnF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,GAAU,KAAK,MAAM,EAAE,OAAO,MAAM,KAAG,OAAO,CAAC,OAAO,CAM7E,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,QAAQ,GAAU,CAAC,EAC9B,KAAK,MAAM,EACX,OAAO,MAAM,EACb,IAAI,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,KACvB,OAAO,CAAC,CAAC,GAAG,IAAI,CAgBlB,CAAC"}
1
+ {"version":3,"file":"redis-lock.d.ts","sourceRoot":"","sources":["../../../src/lib/upstash/redis-lock.ts"],"names":[],"mappings":"AAkBA;;GAEG;AACH,eAAO,MAAM,WAAW,GAAU,KAAK,MAAM,EAAE,OAAO,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAMnF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,GAAU,KAAK,MAAM,EAAE,OAAO,MAAM,KAAG,OAAO,CAAC,OAAO,CAM7E,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,QAAQ,GAAU,CAAC,EAC9B,KAAK,MAAM,EACX,OAAO,MAAM,EACb,IAAI,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,KACvB,OAAO,CAAC,CAAC,GAAG,IAAI,CAWlB,CAAC"}
@@ -1,64 +1,48 @@
1
1
  'use strict';
2
2
 
3
3
  var tslib_es6 = require('../../node_modules/.pnpm/@rollup_plugin-typescript@12.1.4_rollup@4.46.2_tslib@2.8.1_typescript@5.9.3/node_modules/tslib/tslib.es6.js');
4
- var index = require('../../_virtual/index.js');
5
4
  var upstashConfig = require('../upstash-config.js');
6
5
 
7
- let cachedLock = null;
8
- let lockInitAttempted = false;
9
- const createLock = (redis) => {
10
- const LockCtor = index.distExports.Lock;
6
+ const unlockScript = `
7
+ if redis.call("get", KEYS[1]) == ARGV[1] then
8
+ return redis.call("del", KEYS[1])
9
+ else
10
+ return 0
11
+ end
12
+ `;
13
+ const generateToken = () => {
11
14
  try {
12
- return new LockCtor({ redis });
15
+ return crypto.randomUUID();
13
16
  }
14
17
  catch (_a) {
15
- return new LockCtor(redis);
18
+ return `${Date.now()}-${Math.random().toString(16).slice(2)}`;
16
19
  }
17
20
  };
18
- const getLock = () => {
19
- if (cachedLock) {
20
- return cachedLock;
21
- }
22
- if (lockInitAttempted) {
23
- return null;
24
- }
25
- lockInitAttempted = true;
26
- const redis = upstashConfig.getRedis();
27
- if (!redis) {
28
- return null;
29
- }
30
- cachedLock = createLock(redis);
31
- return cachedLock;
32
- };
33
21
  /**
34
22
  * Acquire a distributed lock. Returns the lock token or null when unavailable.
35
23
  */
36
24
  const acquireLock = (key, ttlMs) => tslib_es6.__awaiter(void 0, void 0, void 0, function* () {
37
- const lock = getLock();
38
- if (!lock) {
39
- return null;
40
- }
41
- return lock.acquire(key, ttlMs);
25
+ return upstashConfig.withRedis((redis) => tslib_es6.__awaiter(void 0, void 0, void 0, function* () {
26
+ const token = generateToken();
27
+ const result = yield redis.set(key, token, { nx: true, px: ttlMs });
28
+ return result === 'OK' ? token : null;
29
+ }));
42
30
  });
43
31
  /**
44
32
  * Release a distributed lock. Returns false when the lock client is unavailable.
45
33
  */
46
34
  const releaseLock = (key, token) => tslib_es6.__awaiter(void 0, void 0, void 0, function* () {
47
- const lock = getLock();
48
- if (!lock) {
49
- return false;
50
- }
51
- return lock.release(key, token);
35
+ const result = yield upstashConfig.withRedis((redis) => tslib_es6.__awaiter(void 0, void 0, void 0, function* () {
36
+ const released = yield redis.eval(unlockScript, [key], [token]);
37
+ return Number(released) === 1;
38
+ }));
39
+ return result !== null && result !== void 0 ? result : false;
52
40
  });
53
41
  /**
54
42
  * Run a function under a distributed lock. Returns null when the lock is unavailable.
55
43
  */
56
44
  const withLock = (key, ttlMs, fn) => tslib_es6.__awaiter(void 0, void 0, void 0, function* () {
57
- const lock = getLock();
58
- if (!lock) {
59
- return null;
60
- }
61
- const token = yield lock.acquire(key, ttlMs);
45
+ const token = yield acquireLock(key, ttlMs);
62
46
  if (!token) {
63
47
  return null;
64
48
  }
@@ -66,7 +50,7 @@ const withLock = (key, ttlMs, fn) => tslib_es6.__awaiter(void 0, void 0, void 0,
66
50
  return yield fn();
67
51
  }
68
52
  finally {
69
- yield lock.release(key, token);
53
+ yield releaseLock(key, token);
70
54
  }
71
55
  });
72
56
 
@@ -1,62 +1,46 @@
1
1
  import { __awaiter } from '../../node_modules/.pnpm/@rollup_plugin-typescript@12.1.4_rollup@4.46.2_tslib@2.8.1_typescript@5.9.3/node_modules/tslib/tslib.es6.mjs';
2
- import { d as distExports } from '../../_virtual/index.mjs';
3
- import { getRedis } from '../upstash-config.mjs';
2
+ import { withRedis } from '../upstash-config.mjs';
4
3
 
5
- let cachedLock = null;
6
- let lockInitAttempted = false;
7
- const createLock = (redis) => {
8
- const LockCtor = distExports.Lock;
4
+ const unlockScript = `
5
+ if redis.call("get", KEYS[1]) == ARGV[1] then
6
+ return redis.call("del", KEYS[1])
7
+ else
8
+ return 0
9
+ end
10
+ `;
11
+ const generateToken = () => {
9
12
  try {
10
- return new LockCtor({ redis });
13
+ return crypto.randomUUID();
11
14
  }
12
15
  catch (_a) {
13
- return new LockCtor(redis);
16
+ return `${Date.now()}-${Math.random().toString(16).slice(2)}`;
14
17
  }
15
18
  };
16
- const getLock = () => {
17
- if (cachedLock) {
18
- return cachedLock;
19
- }
20
- if (lockInitAttempted) {
21
- return null;
22
- }
23
- lockInitAttempted = true;
24
- const redis = getRedis();
25
- if (!redis) {
26
- return null;
27
- }
28
- cachedLock = createLock(redis);
29
- return cachedLock;
30
- };
31
19
  /**
32
20
  * Acquire a distributed lock. Returns the lock token or null when unavailable.
33
21
  */
34
22
  const acquireLock = (key, ttlMs) => __awaiter(void 0, void 0, void 0, function* () {
35
- const lock = getLock();
36
- if (!lock) {
37
- return null;
38
- }
39
- return lock.acquire(key, ttlMs);
23
+ return withRedis((redis) => __awaiter(void 0, void 0, void 0, function* () {
24
+ const token = generateToken();
25
+ const result = yield redis.set(key, token, { nx: true, px: ttlMs });
26
+ return result === 'OK' ? token : null;
27
+ }));
40
28
  });
41
29
  /**
42
30
  * Release a distributed lock. Returns false when the lock client is unavailable.
43
31
  */
44
32
  const releaseLock = (key, token) => __awaiter(void 0, void 0, void 0, function* () {
45
- const lock = getLock();
46
- if (!lock) {
47
- return false;
48
- }
49
- return lock.release(key, token);
33
+ const result = yield withRedis((redis) => __awaiter(void 0, void 0, void 0, function* () {
34
+ const released = yield redis.eval(unlockScript, [key], [token]);
35
+ return Number(released) === 1;
36
+ }));
37
+ return result !== null && result !== void 0 ? result : false;
50
38
  });
51
39
  /**
52
40
  * Run a function under a distributed lock. Returns null when the lock is unavailable.
53
41
  */
54
42
  const withLock = (key, ttlMs, fn) => __awaiter(void 0, void 0, void 0, function* () {
55
- const lock = getLock();
56
- if (!lock) {
57
- return null;
58
- }
59
- const token = yield lock.acquire(key, ttlMs);
43
+ const token = yield acquireLock(key, ttlMs);
60
44
  if (!token) {
61
45
  return null;
62
46
  }
@@ -64,7 +48,7 @@ const withLock = (key, ttlMs, fn) => __awaiter(void 0, void 0, void 0, function*
64
48
  return yield fn();
65
49
  }
66
50
  finally {
67
- yield lock.release(key, token);
51
+ yield releaseLock(key, token);
68
52
  }
69
53
  });
70
54
 
@@ -1 +1 @@
1
- {"version":3,"file":"redis-structures.d.ts","sourceRoot":"","sources":["../../../src/lib/upstash/redis-structures.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,eAAO,MAAM,SAAS,GACpB,KAAK,MAAM,EACX,OAAO,MAAM,EACb,SAAS,MAAM,KACd,OAAO,CAAC,OAAO,CAajB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,SAAS,GAAU,KAAK,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAOlE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,OAAO,GAAU,CAAC,EAC7B,KAAK,MAAM,EACX,OAAO,CAAC,EACR,SAAS,MAAM,KACd,OAAO,CAAC,OAAO,CAcjB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,OAAO,GAAU,CAAC,EAAE,KAAK,MAAM,KAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAgB9D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,SAAS,GAAU,KAAK,MAAM,KAAG,OAAO,CAAC,OAAO,CAQ5D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,GAAU,KAAK,MAAM,EAAE,OAAO,MAAM,EAAE,OAAO,MAAM,KAAG,OAAO,CAAC,OAAO,CAQ7F,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,GAAU,KAAK,MAAM,EAAE,OAAO,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAOpF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,GAAU,CAAC,EACjC,KAAK,MAAM,EACX,OAAO,MAAM,EACb,OAAO,CAAC,KACP,OAAO,CAAC,OAAO,CASjB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,GAAU,CAAC,EAAE,KAAK,MAAM,EAAE,OAAO,MAAM,KAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAgBjF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,UAAU,GAAU,KAAK,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAQnF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,GAAU,KAAK,MAAM,EAAE,OAAO,MAAM,KAAG,OAAO,CAAC,OAAO,CAQjF,CAAC;AAEF,KAAK,aAAa,GAAG,MAAM,GAAG,OAAO,CAAC;AAEtC;;GAEG;AACH,eAAO,MAAM,QAAQ,GACnB,KAAK,MAAM,EACX,QAAQ,MAAM,EAAE,EAChB,YAAW,aAAuB,KACjC,OAAO,CAAC,MAAM,GAAG,IAAI,CAavB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,OAAO,GAClB,KAAK,MAAM,EACX,YAAW,aAAuB,KACjC,OAAO,CAAC,MAAM,GAAG,IAAI,CAOvB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,SAAS,GACpB,KAAK,MAAM,EACX,cAAS,EACT,aAAS,KACR,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAOzB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,UAAU,GAAU,KAAK,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAOnE,CAAC"}
1
+ {"version":3,"file":"redis-structures.d.ts","sourceRoot":"","sources":["../../../src/lib/upstash/redis-structures.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,eAAO,MAAM,SAAS,GACpB,KAAK,MAAM,EACX,OAAO,MAAM,EACb,SAAS,MAAM,KACd,OAAO,CAAC,OAAO,CAUjB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,SAAS,GAAU,KAAK,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAElE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,OAAO,GAAU,CAAC,EAC7B,KAAK,MAAM,EACX,OAAO,CAAC,EACR,SAAS,MAAM,KACd,OAAO,CAAC,OAAO,CAWjB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,OAAO,GAAU,CAAC,EAAE,KAAK,MAAM,KAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAa9D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,SAAS,GAAU,KAAK,MAAM,KAAG,OAAO,CAAC,OAAO,CAM5D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,GAAU,KAAK,MAAM,EAAE,OAAO,MAAM,EAAE,OAAO,MAAM,KAAG,OAAO,CAAC,OAAO,CAM7F,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,GAAU,KAAK,MAAM,EAAE,OAAO,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAEpF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,GAAU,CAAC,EACjC,KAAK,MAAM,EACX,OAAO,MAAM,EACb,OAAO,CAAC,KACP,OAAO,CAAC,OAAO,CAOjB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,GAAU,CAAC,EAAE,KAAK,MAAM,EAAE,OAAO,MAAM,KAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAajF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,UAAU,GAAU,KAAK,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAKnF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,GAAU,KAAK,MAAM,EAAE,OAAO,MAAM,KAAG,OAAO,CAAC,OAAO,CAMjF,CAAC;AAEF,KAAK,aAAa,GAAG,MAAM,GAAG,OAAO,CAAC;AAEtC;;GAEG;AACH,eAAO,MAAM,QAAQ,GACnB,KAAK,MAAM,EACX,QAAQ,MAAM,EAAE,EAChB,YAAW,aAAuB,KACjC,OAAO,CAAC,MAAM,GAAG,IAAI,CAUvB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,OAAO,GAClB,KAAK,MAAM,EACX,YAAW,aAAuB,KACjC,OAAO,CAAC,MAAM,GAAG,IAAI,CAIvB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,SAAS,GACpB,KAAK,MAAM,EACX,cAAS,EACT,aAAS,KACR,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAEzB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,UAAU,GAAU,KAAK,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAEnE,CAAC"}