@windrun-huaiin/backend-core 15.1.0 → 16.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.
- package/LICENSE +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +44 -0
- package/dist/index.mjs +8 -1
- package/dist/lib/index.js +19 -0
- package/dist/lib/index.mjs +1 -1
- package/dist/lib/upstash/qstash.d.ts +20 -7
- package/dist/lib/upstash/qstash.d.ts.map +1 -1
- package/dist/lib/upstash/qstash.js +33 -7
- package/dist/lib/upstash/qstash.mjs +33 -7
- package/dist/lib/upstash/redis-structures.d.ts +83 -0
- package/dist/lib/upstash/redis-structures.d.ts.map +1 -1
- package/dist/lib/upstash/redis-structures.js +220 -0
- package/dist/lib/upstash/redis-structures.mjs +202 -1
- package/dist/lib/upstash-config.d.ts.map +1 -1
- package/dist/lib/upstash-config.js +76 -4
- package/dist/lib/upstash-config.mjs +76 -4
- package/dist/services/ai/abort.d.ts +2 -0
- package/dist/services/ai/abort.d.ts.map +1 -0
- package/dist/services/ai/abort.js +24 -0
- package/dist/services/ai/abort.mjs +22 -0
- package/dist/services/ai/env.d.ts +21 -0
- package/dist/services/ai/env.d.ts.map +1 -0
- package/dist/services/ai/env.js +85 -0
- package/dist/services/ai/env.mjs +80 -0
- package/dist/services/ai/error.d.ts +3 -0
- package/dist/services/ai/error.d.ts.map +1 -0
- package/dist/services/ai/error.js +54 -0
- package/dist/services/ai/error.mjs +52 -0
- package/dist/services/ai/index.d.ts +9 -0
- package/dist/services/ai/index.d.ts.map +1 -0
- package/dist/services/ai/index.js +30 -0
- package/dist/services/ai/index.mjs +7 -0
- package/dist/services/ai/message-builder.d.ts +4 -0
- package/dist/services/ai/message-builder.d.ts.map +1 -0
- package/dist/services/ai/message-builder.js +15 -0
- package/dist/services/ai/message-builder.mjs +13 -0
- package/dist/services/ai/mock.d.ts +30 -0
- package/dist/services/ai/mock.d.ts.map +1 -0
- package/dist/services/ai/mock.js +314 -0
- package/dist/services/ai/mock.mjs +308 -0
- package/dist/services/ai/openrouter-client.d.ts +12 -0
- package/dist/services/ai/openrouter-client.d.ts.map +1 -0
- package/dist/services/ai/openrouter-client.js +81 -0
- package/dist/services/ai/openrouter-client.mjs +78 -0
- package/dist/services/ai/route.d.ts +6 -0
- package/dist/services/ai/route.d.ts.map +1 -0
- package/dist/services/ai/route.js +178 -0
- package/dist/services/ai/route.mjs +173 -0
- package/dist/services/ai/types.d.ts +98 -0
- package/dist/services/ai/types.d.ts.map +1 -0
- package/package.json +11 -4
- package/src/index.ts +1 -0
- package/src/lib/upstash/qstash.ts +55 -15
- package/src/lib/upstash/redis-structures.ts +248 -0
- package/src/lib/upstash-config.ts +106 -4
- package/src/services/ai/abort.ts +26 -0
- package/src/services/ai/env.ts +120 -0
- package/src/services/ai/error.ts +64 -0
- package/src/services/ai/index.ts +8 -0
- package/src/services/ai/message-builder.ts +17 -0
- package/src/services/ai/mock.ts +378 -0
- package/src/services/ai/openrouter-client.ts +94 -0
- package/src/services/ai/route.ts +218 -0
- package/src/services/ai/types.ts +131 -0
package/LICENSE
CHANGED
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,OAAO,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,OAAO,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -16,6 +16,13 @@ var anonymous_aggregate_service = require('./services/aggregate/anonymous.aggreg
|
|
|
16
16
|
var userContextService = require('./services/context/user-context-service.js');
|
|
17
17
|
var userContextFinalizer = require('./services/context/user-context-finalizer.js');
|
|
18
18
|
var webhookHandler = require('./services/stripe/webhook-handler.js');
|
|
19
|
+
var abort = require('./services/ai/abort.js');
|
|
20
|
+
var error = require('./services/ai/error.js');
|
|
21
|
+
var env = require('./services/ai/env.js');
|
|
22
|
+
var messageBuilder = require('./services/ai/message-builder.js');
|
|
23
|
+
var mock = require('./services/ai/mock.js');
|
|
24
|
+
var openrouterClient = require('./services/ai/openrouter-client.js');
|
|
25
|
+
var route = require('./services/ai/route.js');
|
|
19
26
|
var moneyPriceConfig = require('./lib/money-price-config.js');
|
|
20
27
|
var moneyPriceHelper = require('./lib/money-price-helper.js');
|
|
21
28
|
var fingerprintConfig = require('./lib/fingerprint-config.js');
|
|
@@ -70,6 +77,24 @@ exports.mapSubscriptionToXSubscription = userContextService.mapSubscriptionToXSu
|
|
|
70
77
|
exports.mapUserToXUser = userContextService.mapUserToXUser;
|
|
71
78
|
exports.finalizeUserContext = userContextFinalizer.finalizeUserContext;
|
|
72
79
|
exports.handleStripeEvent = webhookHandler.handleStripeEvent;
|
|
80
|
+
exports.createUpstreamAbortSignal = abort.createUpstreamAbortSignal;
|
|
81
|
+
exports.normalizeAIError = error.normalizeAIError;
|
|
82
|
+
exports.createOpenRouterClientConfigFromEnv = env.createOpenRouterClientConfigFromEnv;
|
|
83
|
+
exports.createOpenRouterMockFromEnv = env.createOpenRouterMockFromEnv;
|
|
84
|
+
exports.createOpenRouterMockFromEnvForContext = env.createOpenRouterMockFromEnvForContext;
|
|
85
|
+
exports.getOpenRouterEnvConfig = env.getOpenRouterEnvConfig;
|
|
86
|
+
exports.buildModelMessages = messageBuilder.buildModelMessages;
|
|
87
|
+
exports.createConfigurableMockHandler = mock.createConfigurableMockHandler;
|
|
88
|
+
exports.createErrorMockResponse = mock.createErrorMockResponse;
|
|
89
|
+
exports.createScenarioMockHandler = mock.createScenarioMockHandler;
|
|
90
|
+
exports.createSimpleMockHandler = mock.createSimpleMockHandler;
|
|
91
|
+
exports.getMockScenario = mock.getMockScenario;
|
|
92
|
+
exports.callOpenRouterStream = openrouterClient.callOpenRouterStream;
|
|
93
|
+
exports.guardedOpenRouterStreamStart = openrouterClient.guardedOpenRouterStreamStart;
|
|
94
|
+
exports.createOpenRouterRoute = route.createOpenRouterRoute;
|
|
95
|
+
exports.dynamic = route.dynamic;
|
|
96
|
+
exports.revalidate = route.revalidate;
|
|
97
|
+
exports.runtime = route.runtime;
|
|
73
98
|
exports.getActiveProviderConfig = moneyPriceConfig.getActiveProviderConfig;
|
|
74
99
|
exports.getCreditsFromPriceId = moneyPriceConfig.getCreditsFromPriceId;
|
|
75
100
|
exports.getPriceConfig = moneyPriceConfig.getPriceConfig;
|
|
@@ -111,21 +136,40 @@ exports.getCounter = redisCounter.getCounter;
|
|
|
111
136
|
exports.getUniqueCounter = redisCounter.getUniqueCounter;
|
|
112
137
|
exports.incrCounter = redisCounter.incrCounter;
|
|
113
138
|
exports.incrUniqueCounter = redisCounter.incrUniqueCounter;
|
|
139
|
+
exports.del = redisStructures.del;
|
|
114
140
|
exports.deleteHashField = redisStructures.deleteHashField;
|
|
115
141
|
exports.deleteKey = redisStructures.deleteKey;
|
|
142
|
+
exports.exists = redisStructures.exists;
|
|
143
|
+
exports.expire = redisStructures.expire;
|
|
116
144
|
exports.getHashAll = redisStructures.getHashAll;
|
|
117
145
|
exports.getHashField = redisStructures.getHashField;
|
|
118
146
|
exports.getHashJson = redisStructures.getHashJson;
|
|
119
147
|
exports.getJson = redisStructures.getJson;
|
|
120
148
|
exports.getString = redisStructures.getString;
|
|
149
|
+
exports.hexists = redisStructures.hexists;
|
|
150
|
+
exports.hkeys = redisStructures.hkeys;
|
|
151
|
+
exports.hlen = redisStructures.hlen;
|
|
152
|
+
exports.hmget = redisStructures.hmget;
|
|
153
|
+
exports.hmset = redisStructures.hmset;
|
|
121
154
|
exports.listLength = redisStructures.listLength;
|
|
155
|
+
exports.mget = redisStructures.mget;
|
|
156
|
+
exports.mgetJson = redisStructures.mgetJson;
|
|
157
|
+
exports.mset = redisStructures.mset;
|
|
158
|
+
exports.msetJson = redisStructures.msetJson;
|
|
159
|
+
exports.pipeline = redisStructures.pipeline;
|
|
122
160
|
exports.popList = redisStructures.popList;
|
|
123
161
|
exports.pushList = redisStructures.pushList;
|
|
124
162
|
exports.rangeList = redisStructures.rangeList;
|
|
163
|
+
exports.sadd = redisStructures.sadd;
|
|
164
|
+
exports.scard = redisStructures.scard;
|
|
125
165
|
exports.setHashField = redisStructures.setHashField;
|
|
126
166
|
exports.setHashJson = redisStructures.setHashJson;
|
|
127
167
|
exports.setJson = redisStructures.setJson;
|
|
128
168
|
exports.setString = redisStructures.setString;
|
|
169
|
+
exports.sismember = redisStructures.sismember;
|
|
170
|
+
exports.smembers = redisStructures.smembers;
|
|
171
|
+
exports.srem = redisStructures.srem;
|
|
172
|
+
exports.ttl = redisStructures.ttl;
|
|
129
173
|
exports.cancelSchedule = qstash.cancelSchedule;
|
|
130
174
|
exports.publishDelayedMessage = qstash.publishDelayedMessage;
|
|
131
175
|
exports.publishMessage = qstash.publishMessage;
|
package/dist/index.mjs
CHANGED
|
@@ -14,6 +14,13 @@ export { anonymousAggregateService } from './services/aggregate/anonymous.aggreg
|
|
|
14
14
|
export { buildInitUserContextFromEntities, fetchLatestUserContextByFingerprintId, fetchUserContextByClerkUserId, mapCreditToXCredit, mapSubscriptionToXSubscription, mapUserToXUser } from './services/context/user-context-service.mjs';
|
|
15
15
|
export { finalizeUserContext } from './services/context/user-context-finalizer.mjs';
|
|
16
16
|
export { handleStripeEvent } from './services/stripe/webhook-handler.mjs';
|
|
17
|
+
export { createUpstreamAbortSignal } from './services/ai/abort.mjs';
|
|
18
|
+
export { normalizeAIError } from './services/ai/error.mjs';
|
|
19
|
+
export { createOpenRouterClientConfigFromEnv, createOpenRouterMockFromEnv, createOpenRouterMockFromEnvForContext, getOpenRouterEnvConfig } from './services/ai/env.mjs';
|
|
20
|
+
export { buildModelMessages } from './services/ai/message-builder.mjs';
|
|
21
|
+
export { createConfigurableMockHandler, createErrorMockResponse, createScenarioMockHandler, createSimpleMockHandler, getMockScenario } from './services/ai/mock.mjs';
|
|
22
|
+
export { callOpenRouterStream, guardedOpenRouterStreamStart } from './services/ai/openrouter-client.mjs';
|
|
23
|
+
export { createOpenRouterRoute, dynamic, revalidate, runtime } from './services/ai/route.mjs';
|
|
17
24
|
export { getActiveProviderConfig, getCreditsFromPriceId, getPriceConfig, moneyPriceConfig } from './lib/money-price-config.mjs';
|
|
18
25
|
export { getMoneyPriceInitUserContext } from './lib/money-price-helper.mjs';
|
|
19
26
|
export { fingerprintConfig } from './lib/fingerprint-config.mjs';
|
|
@@ -24,5 +31,5 @@ export { acquireLock, releaseLock, withLock } from './lib/upstash/redis-lock.mjs
|
|
|
24
31
|
export { getTargetLikeCount, getUserLikedTargets, isTargetLiked, likeTarget, unlikeTarget } from './lib/upstash/redis-like.mjs';
|
|
25
32
|
export { addFavorite, getFavoriteCount, getUserFavorites, isFavorited, removeFavorite } from './lib/upstash/redis-favorite.mjs';
|
|
26
33
|
export { getCounter, getUniqueCounter, incrCounter, incrUniqueCounter } from './lib/upstash/redis-counter.mjs';
|
|
27
|
-
export { deleteHashField, deleteKey, getHashAll, getHashField, getHashJson, getJson, getString, listLength, popList, pushList, rangeList, setHashField, setHashJson, setJson, setString } from './lib/upstash/redis-structures.mjs';
|
|
34
|
+
export { del, deleteHashField, deleteKey, exists, expire, getHashAll, getHashField, getHashJson, getJson, getString, hexists, hkeys, hlen, hmget, hmset, listLength, mget, mgetJson, mset, msetJson, pipeline, popList, pushList, rangeList, sadd, scard, setHashField, setHashJson, setJson, setString, sismember, smembers, srem, ttl } from './lib/upstash/redis-structures.mjs';
|
|
28
35
|
export { cancelSchedule, publishDelayedMessage, publishMessage, scheduleMessage, verifyQstashSignature } from './lib/upstash/qstash.mjs';
|
package/dist/lib/index.js
CHANGED
|
@@ -56,21 +56,40 @@ exports.getCounter = redisCounter.getCounter;
|
|
|
56
56
|
exports.getUniqueCounter = redisCounter.getUniqueCounter;
|
|
57
57
|
exports.incrCounter = redisCounter.incrCounter;
|
|
58
58
|
exports.incrUniqueCounter = redisCounter.incrUniqueCounter;
|
|
59
|
+
exports.del = redisStructures.del;
|
|
59
60
|
exports.deleteHashField = redisStructures.deleteHashField;
|
|
60
61
|
exports.deleteKey = redisStructures.deleteKey;
|
|
62
|
+
exports.exists = redisStructures.exists;
|
|
63
|
+
exports.expire = redisStructures.expire;
|
|
61
64
|
exports.getHashAll = redisStructures.getHashAll;
|
|
62
65
|
exports.getHashField = redisStructures.getHashField;
|
|
63
66
|
exports.getHashJson = redisStructures.getHashJson;
|
|
64
67
|
exports.getJson = redisStructures.getJson;
|
|
65
68
|
exports.getString = redisStructures.getString;
|
|
69
|
+
exports.hexists = redisStructures.hexists;
|
|
70
|
+
exports.hkeys = redisStructures.hkeys;
|
|
71
|
+
exports.hlen = redisStructures.hlen;
|
|
72
|
+
exports.hmget = redisStructures.hmget;
|
|
73
|
+
exports.hmset = redisStructures.hmset;
|
|
66
74
|
exports.listLength = redisStructures.listLength;
|
|
75
|
+
exports.mget = redisStructures.mget;
|
|
76
|
+
exports.mgetJson = redisStructures.mgetJson;
|
|
77
|
+
exports.mset = redisStructures.mset;
|
|
78
|
+
exports.msetJson = redisStructures.msetJson;
|
|
79
|
+
exports.pipeline = redisStructures.pipeline;
|
|
67
80
|
exports.popList = redisStructures.popList;
|
|
68
81
|
exports.pushList = redisStructures.pushList;
|
|
69
82
|
exports.rangeList = redisStructures.rangeList;
|
|
83
|
+
exports.sadd = redisStructures.sadd;
|
|
84
|
+
exports.scard = redisStructures.scard;
|
|
70
85
|
exports.setHashField = redisStructures.setHashField;
|
|
71
86
|
exports.setHashJson = redisStructures.setHashJson;
|
|
72
87
|
exports.setJson = redisStructures.setJson;
|
|
73
88
|
exports.setString = redisStructures.setString;
|
|
89
|
+
exports.sismember = redisStructures.sismember;
|
|
90
|
+
exports.smembers = redisStructures.smembers;
|
|
91
|
+
exports.srem = redisStructures.srem;
|
|
92
|
+
exports.ttl = redisStructures.ttl;
|
|
74
93
|
exports.cancelSchedule = qstash.cancelSchedule;
|
|
75
94
|
exports.publishDelayedMessage = qstash.publishDelayedMessage;
|
|
76
95
|
exports.publishMessage = qstash.publishMessage;
|
package/dist/lib/index.mjs
CHANGED
|
@@ -8,5 +8,5 @@ export { acquireLock, releaseLock, withLock } from './upstash/redis-lock.mjs';
|
|
|
8
8
|
export { getTargetLikeCount, getUserLikedTargets, isTargetLiked, likeTarget, unlikeTarget } from './upstash/redis-like.mjs';
|
|
9
9
|
export { addFavorite, getFavoriteCount, getUserFavorites, isFavorited, removeFavorite } from './upstash/redis-favorite.mjs';
|
|
10
10
|
export { getCounter, getUniqueCounter, incrCounter, incrUniqueCounter } from './upstash/redis-counter.mjs';
|
|
11
|
-
export { deleteHashField, deleteKey, getHashAll, getHashField, getHashJson, getJson, getString, listLength, popList, pushList, rangeList, setHashField, setHashJson, setJson, setString } from './upstash/redis-structures.mjs';
|
|
11
|
+
export { del, deleteHashField, deleteKey, exists, expire, getHashAll, getHashField, getHashJson, getJson, getString, hexists, hkeys, hlen, hmget, hmset, listLength, mget, mgetJson, mset, msetJson, pipeline, popList, pushList, rangeList, sadd, scard, setHashField, setHashJson, setJson, setString, sismember, smembers, srem, ttl } from './upstash/redis-structures.mjs';
|
|
12
12
|
export { cancelSchedule, publishDelayedMessage, publishMessage, scheduleMessage, verifyQstashSignature } from './upstash/qstash.mjs';
|
|
@@ -1,25 +1,38 @@
|
|
|
1
1
|
export type PublishBody = Record<string, unknown> | string | number | boolean | null;
|
|
2
|
-
export interface
|
|
2
|
+
export interface QstashEnvelope<TBody extends PublishBody = PublishBody> {
|
|
3
|
+
source_msg_id: string;
|
|
4
|
+
payload: TBody;
|
|
5
|
+
}
|
|
6
|
+
export interface PublishMessageOptions<TBody extends PublishBody = PublishBody> {
|
|
3
7
|
url: string;
|
|
4
|
-
body:
|
|
8
|
+
body: TBody;
|
|
5
9
|
}
|
|
6
10
|
/**
|
|
7
11
|
* Publish a message. Returns message id or null if QStash is unavailable.
|
|
8
12
|
*/
|
|
9
|
-
export declare const publishMessage: (options: PublishMessageOptions) => Promise<
|
|
13
|
+
export declare const publishMessage: <TBody extends PublishBody>(options: PublishMessageOptions<TBody>) => Promise<{
|
|
14
|
+
messageId: string | null;
|
|
15
|
+
message: QstashEnvelope<TBody>;
|
|
16
|
+
} | null>;
|
|
10
17
|
/**
|
|
11
18
|
* Publish a delayed message. Returns message id or null if QStash is unavailable.
|
|
12
19
|
*/
|
|
13
|
-
export declare const publishDelayedMessage: (options: PublishMessageOptions & {
|
|
20
|
+
export declare const publishDelayedMessage: <TBody extends PublishBody>(options: PublishMessageOptions<TBody> & {
|
|
14
21
|
delaySec: number;
|
|
15
|
-
}) => Promise<
|
|
16
|
-
|
|
22
|
+
}) => Promise<{
|
|
23
|
+
messageId: string | null;
|
|
24
|
+
message: QstashEnvelope<TBody>;
|
|
25
|
+
} | null>;
|
|
26
|
+
export interface ScheduleMessageOptions<TBody extends PublishBody = PublishBody> extends PublishMessageOptions<TBody> {
|
|
17
27
|
cron: string;
|
|
18
28
|
}
|
|
19
29
|
/**
|
|
20
30
|
* Schedule a recurring message. Returns schedule id or null if QStash is unavailable.
|
|
21
31
|
*/
|
|
22
|
-
export declare const scheduleMessage: (options: ScheduleMessageOptions) => Promise<
|
|
32
|
+
export declare const scheduleMessage: <TBody extends PublishBody>(options: ScheduleMessageOptions<TBody>) => Promise<{
|
|
33
|
+
scheduleId: string | null;
|
|
34
|
+
message: QstashEnvelope<TBody>;
|
|
35
|
+
} | null>;
|
|
23
36
|
/**
|
|
24
37
|
* Cancel a scheduled message. Returns false if QStash is unavailable.
|
|
25
38
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qstash.d.ts","sourceRoot":"","sources":["../../../src/lib/upstash/qstash.ts"],"names":[],"mappings":"AA8CA,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;AAErF,MAAM,WAAW,qBAAqB;
|
|
1
|
+
{"version":3,"file":"qstash.d.ts","sourceRoot":"","sources":["../../../src/lib/upstash/qstash.ts"],"names":[],"mappings":"AA8CA,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;AAErF,MAAM,WAAW,cAAc,CAAC,KAAK,SAAS,WAAW,GAAG,WAAW;IACrE,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,KAAK,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB,CAAC,KAAK,SAAS,WAAW,GAAG,WAAW;IAC5E,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,KAAK,CAAC;CACb;AAiBD;;GAEG;AACH,eAAO,MAAM,cAAc,GAAU,KAAK,SAAS,WAAW,EAC5D,SAAS,qBAAqB,CAAC,KAAK,CAAC,KACpC,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC,CAAA;CAAE,GAAG,IAAI,CAa7E,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,GAAU,KAAK,SAAS,WAAW,EACnE,SAAS,qBAAqB,CAAC,KAAK,CAAC,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,KAC3D,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC,CAAA;CAAE,GAAG,IAAI,CAc7E,CAAC;AAEF,MAAM,WAAW,sBAAsB,CAAC,KAAK,SAAS,WAAW,GAAG,WAAW,CAC7E,SAAQ,qBAAqB,CAAC,KAAK,CAAC;IACpC,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,eAAO,MAAM,eAAe,GAAU,KAAK,SAAS,WAAW,EAC7D,SAAS,sBAAsB,CAAC,KAAK,CAAC,KACrC,OAAO,CAAC;IAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC,CAAA;CAAE,GAAG,IAAI,CAsB9E,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,GAAU,YAAY,MAAM,KAAG,OAAO,CAAC,OAAO,CAexE,CAAC;AAEF,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,eAAO,MAAM,qBAAqB,GAAU,SAAS,mBAAmB,KAAG,OAAO,CAAC,OAAO,CAqBzF,CAAC"}
|
|
@@ -38,50 +38,76 @@ const getReceiver = () => {
|
|
|
38
38
|
return null;
|
|
39
39
|
}
|
|
40
40
|
};
|
|
41
|
+
const generateSourceMessageId = () => {
|
|
42
|
+
try {
|
|
43
|
+
return crypto.randomUUID();
|
|
44
|
+
}
|
|
45
|
+
catch (_a) {
|
|
46
|
+
return `${Date.now()}_${Math.random().toString(16).slice(2)}`;
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
const createEnvelope = (body) => {
|
|
50
|
+
return {
|
|
51
|
+
source_msg_id: generateSourceMessageId(),
|
|
52
|
+
payload: body,
|
|
53
|
+
};
|
|
54
|
+
};
|
|
41
55
|
/**
|
|
42
56
|
* Publish a message. Returns message id or null if QStash is unavailable.
|
|
43
57
|
*/
|
|
44
58
|
const publishMessage = (options) => tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
59
|
+
const message = createEnvelope(options.body);
|
|
45
60
|
return upstashConfig.withQstash((client) => tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
46
61
|
var _a;
|
|
47
62
|
const result = yield client.publishJSON({
|
|
48
63
|
url: options.url,
|
|
49
|
-
body:
|
|
64
|
+
body: message,
|
|
50
65
|
});
|
|
51
|
-
return
|
|
66
|
+
return {
|
|
67
|
+
messageId: typeof result === 'string' ? result : (_a = result === null || result === void 0 ? void 0 : result.messageId) !== null && _a !== void 0 ? _a : null,
|
|
68
|
+
message,
|
|
69
|
+
};
|
|
52
70
|
}));
|
|
53
71
|
});
|
|
54
72
|
/**
|
|
55
73
|
* Publish a delayed message. Returns message id or null if QStash is unavailable.
|
|
56
74
|
*/
|
|
57
75
|
const publishDelayedMessage = (options) => tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
76
|
+
const message = createEnvelope(options.body);
|
|
58
77
|
return upstashConfig.withQstash((client) => tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
59
78
|
var _a;
|
|
60
79
|
const result = yield client.publishJSON({
|
|
61
80
|
url: options.url,
|
|
62
|
-
body:
|
|
81
|
+
body: message,
|
|
63
82
|
delay: options.delaySec,
|
|
64
83
|
});
|
|
65
|
-
return
|
|
84
|
+
return {
|
|
85
|
+
messageId: typeof result === 'string' ? result : (_a = result === null || result === void 0 ? void 0 : result.messageId) !== null && _a !== void 0 ? _a : null,
|
|
86
|
+
message,
|
|
87
|
+
};
|
|
66
88
|
}));
|
|
67
89
|
});
|
|
68
90
|
/**
|
|
69
91
|
* Schedule a recurring message. Returns schedule id or null if QStash is unavailable.
|
|
70
92
|
*/
|
|
71
93
|
const scheduleMessage = (options) => tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
94
|
+
const message = createEnvelope(options.body);
|
|
72
95
|
return upstashConfig.withQstash((client) => tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
73
96
|
var _a, _b, _c, _d, _e, _f;
|
|
74
97
|
const anyClient = client;
|
|
75
98
|
const result = (_c = (yield ((_b = (_a = anyClient.schedules) === null || _a === void 0 ? void 0 : _a.create) === null || _b === void 0 ? void 0 : _b.call(_a, {
|
|
76
99
|
url: options.url,
|
|
77
|
-
body:
|
|
100
|
+
body: message,
|
|
78
101
|
cron: options.cron,
|
|
79
102
|
})))) !== null && _c !== void 0 ? _c : (yield ((_d = anyClient.publishJSON) === null || _d === void 0 ? void 0 : _d.call(anyClient, {
|
|
80
103
|
url: options.url,
|
|
81
|
-
body:
|
|
104
|
+
body: message,
|
|
82
105
|
cron: options.cron,
|
|
83
106
|
})));
|
|
84
|
-
return
|
|
107
|
+
return {
|
|
108
|
+
scheduleId: typeof result === 'string' ? result : (_f = (_e = result === null || result === void 0 ? void 0 : result.scheduleId) !== null && _e !== void 0 ? _e : result === null || result === void 0 ? void 0 : result.id) !== null && _f !== void 0 ? _f : null,
|
|
109
|
+
message,
|
|
110
|
+
};
|
|
85
111
|
}));
|
|
86
112
|
});
|
|
87
113
|
/**
|
|
@@ -36,50 +36,76 @@ const getReceiver = () => {
|
|
|
36
36
|
return null;
|
|
37
37
|
}
|
|
38
38
|
};
|
|
39
|
+
const generateSourceMessageId = () => {
|
|
40
|
+
try {
|
|
41
|
+
return crypto.randomUUID();
|
|
42
|
+
}
|
|
43
|
+
catch (_a) {
|
|
44
|
+
return `${Date.now()}_${Math.random().toString(16).slice(2)}`;
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
const createEnvelope = (body) => {
|
|
48
|
+
return {
|
|
49
|
+
source_msg_id: generateSourceMessageId(),
|
|
50
|
+
payload: body,
|
|
51
|
+
};
|
|
52
|
+
};
|
|
39
53
|
/**
|
|
40
54
|
* Publish a message. Returns message id or null if QStash is unavailable.
|
|
41
55
|
*/
|
|
42
56
|
const publishMessage = (options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
57
|
+
const message = createEnvelope(options.body);
|
|
43
58
|
return withQstash((client) => __awaiter(void 0, void 0, void 0, function* () {
|
|
44
59
|
var _a;
|
|
45
60
|
const result = yield client.publishJSON({
|
|
46
61
|
url: options.url,
|
|
47
|
-
body:
|
|
62
|
+
body: message,
|
|
48
63
|
});
|
|
49
|
-
return
|
|
64
|
+
return {
|
|
65
|
+
messageId: typeof result === 'string' ? result : (_a = result === null || result === void 0 ? void 0 : result.messageId) !== null && _a !== void 0 ? _a : null,
|
|
66
|
+
message,
|
|
67
|
+
};
|
|
50
68
|
}));
|
|
51
69
|
});
|
|
52
70
|
/**
|
|
53
71
|
* Publish a delayed message. Returns message id or null if QStash is unavailable.
|
|
54
72
|
*/
|
|
55
73
|
const publishDelayedMessage = (options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
74
|
+
const message = createEnvelope(options.body);
|
|
56
75
|
return withQstash((client) => __awaiter(void 0, void 0, void 0, function* () {
|
|
57
76
|
var _a;
|
|
58
77
|
const result = yield client.publishJSON({
|
|
59
78
|
url: options.url,
|
|
60
|
-
body:
|
|
79
|
+
body: message,
|
|
61
80
|
delay: options.delaySec,
|
|
62
81
|
});
|
|
63
|
-
return
|
|
82
|
+
return {
|
|
83
|
+
messageId: typeof result === 'string' ? result : (_a = result === null || result === void 0 ? void 0 : result.messageId) !== null && _a !== void 0 ? _a : null,
|
|
84
|
+
message,
|
|
85
|
+
};
|
|
64
86
|
}));
|
|
65
87
|
});
|
|
66
88
|
/**
|
|
67
89
|
* Schedule a recurring message. Returns schedule id or null if QStash is unavailable.
|
|
68
90
|
*/
|
|
69
91
|
const scheduleMessage = (options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
92
|
+
const message = createEnvelope(options.body);
|
|
70
93
|
return withQstash((client) => __awaiter(void 0, void 0, void 0, function* () {
|
|
71
94
|
var _a, _b, _c, _d, _e, _f;
|
|
72
95
|
const anyClient = client;
|
|
73
96
|
const result = (_c = (yield ((_b = (_a = anyClient.schedules) === null || _a === void 0 ? void 0 : _a.create) === null || _b === void 0 ? void 0 : _b.call(_a, {
|
|
74
97
|
url: options.url,
|
|
75
|
-
body:
|
|
98
|
+
body: message,
|
|
76
99
|
cron: options.cron,
|
|
77
100
|
})))) !== null && _c !== void 0 ? _c : (yield ((_d = anyClient.publishJSON) === null || _d === void 0 ? void 0 : _d.call(anyClient, {
|
|
78
101
|
url: options.url,
|
|
79
|
-
body:
|
|
102
|
+
body: message,
|
|
80
103
|
cron: options.cron,
|
|
81
104
|
})));
|
|
82
|
-
return
|
|
105
|
+
return {
|
|
106
|
+
scheduleId: typeof result === 'string' ? result : (_f = (_e = result === null || result === void 0 ? void 0 : result.scheduleId) !== null && _e !== void 0 ? _e : result === null || result === void 0 ? void 0 : result.id) !== null && _f !== void 0 ? _f : null,
|
|
107
|
+
message,
|
|
108
|
+
};
|
|
83
109
|
}));
|
|
84
110
|
});
|
|
85
111
|
/**
|
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
import type { Redis } from '@upstash/redis';
|
|
2
|
+
export type RedisStringKeyValue = Record<string, string>;
|
|
3
|
+
export type RedisJsonKeyValue<T> = Record<string, T>;
|
|
4
|
+
export type RedisHashStringValue = Record<string, string>;
|
|
5
|
+
export type RedisPipelineBuilder<TResult> = (pipeline: ReturnType<Redis['pipeline']>) => {
|
|
6
|
+
exec: () => Promise<TResult>;
|
|
7
|
+
};
|
|
1
8
|
/**
|
|
2
9
|
* Set a plain string value with optional TTL (seconds).
|
|
3
10
|
*/
|
|
@@ -6,6 +13,14 @@ export declare const setString: (key: string, value: string, ttlSec?: number) =>
|
|
|
6
13
|
* Get a plain string value. Returns null if Redis is unavailable or key missing.
|
|
7
14
|
*/
|
|
8
15
|
export declare const getString: (key: string) => Promise<string | null>;
|
|
16
|
+
/**
|
|
17
|
+
* MGET plain string values. Missing keys are returned as null.
|
|
18
|
+
*/
|
|
19
|
+
export declare const mget: (keys: string[]) => Promise<(string | null)[] | null>;
|
|
20
|
+
/**
|
|
21
|
+
* MSET plain string values.
|
|
22
|
+
*/
|
|
23
|
+
export declare const mset: (entries: RedisStringKeyValue) => Promise<boolean>;
|
|
9
24
|
/**
|
|
10
25
|
* Store an object as JSON string with optional TTL (seconds).
|
|
11
26
|
*/
|
|
@@ -14,10 +29,34 @@ export declare const setJson: <T>(key: string, value: T, ttlSec?: number) => Pro
|
|
|
14
29
|
* Get an object stored as JSON string. Returns null if missing or invalid JSON.
|
|
15
30
|
*/
|
|
16
31
|
export declare const getJson: <T>(key: string) => Promise<T | null>;
|
|
32
|
+
/**
|
|
33
|
+
* MGET JSON values stored as strings. Missing or invalid values are returned as null.
|
|
34
|
+
*/
|
|
35
|
+
export declare const mgetJson: <T>(keys: string[]) => Promise<(T | null)[] | null>;
|
|
36
|
+
/**
|
|
37
|
+
* MSET JSON values as strings.
|
|
38
|
+
*/
|
|
39
|
+
export declare const msetJson: <T>(entries: RedisJsonKeyValue<T>) => Promise<boolean>;
|
|
17
40
|
/**
|
|
18
41
|
* Delete a key. Returns false if Redis is unavailable.
|
|
19
42
|
*/
|
|
20
43
|
export declare const deleteKey: (key: string) => Promise<boolean>;
|
|
44
|
+
/**
|
|
45
|
+
* DEL multiple keys. Returns deleted count, or null if Redis is unavailable.
|
|
46
|
+
*/
|
|
47
|
+
export declare const del: (keys: string[]) => Promise<number | null>;
|
|
48
|
+
/**
|
|
49
|
+
* EXISTS a key.
|
|
50
|
+
*/
|
|
51
|
+
export declare const exists: (key: string) => Promise<boolean | null>;
|
|
52
|
+
/**
|
|
53
|
+
* EXPIRE a key in seconds.
|
|
54
|
+
*/
|
|
55
|
+
export declare const expire: (key: string, ttlSec: number) => Promise<boolean>;
|
|
56
|
+
/**
|
|
57
|
+
* TTL for a key in seconds. Returns null if Redis is unavailable.
|
|
58
|
+
*/
|
|
59
|
+
export declare const ttl: (key: string) => Promise<number | null>;
|
|
21
60
|
/**
|
|
22
61
|
* Set a hash field value.
|
|
23
62
|
*/
|
|
@@ -26,6 +65,14 @@ export declare const setHashField: (key: string, field: string, value: string) =
|
|
|
26
65
|
* Get a hash field value.
|
|
27
66
|
*/
|
|
28
67
|
export declare const getHashField: (key: string, field: string) => Promise<string | null>;
|
|
68
|
+
/**
|
|
69
|
+
* HMSET hash fields.
|
|
70
|
+
*/
|
|
71
|
+
export declare const hmset: (key: string, values: RedisHashStringValue) => Promise<boolean>;
|
|
72
|
+
/**
|
|
73
|
+
* HMGET hash fields.
|
|
74
|
+
*/
|
|
75
|
+
export declare const hmget: (key: string, fields: string[]) => Promise<Record<string, string | null> | null>;
|
|
29
76
|
/**
|
|
30
77
|
* Store a hash field as JSON string.
|
|
31
78
|
*/
|
|
@@ -38,10 +85,42 @@ export declare const getHashJson: <T>(key: string, field: string) => Promise<T |
|
|
|
38
85
|
* Get all hash fields.
|
|
39
86
|
*/
|
|
40
87
|
export declare const getHashAll: (key: string) => Promise<Record<string, string> | null>;
|
|
88
|
+
/**
|
|
89
|
+
* HEXISTS a hash field.
|
|
90
|
+
*/
|
|
91
|
+
export declare const hexists: (key: string, field: string) => Promise<boolean | null>;
|
|
92
|
+
/**
|
|
93
|
+
* HKEYS for a hash.
|
|
94
|
+
*/
|
|
95
|
+
export declare const hkeys: (key: string) => Promise<string[] | null>;
|
|
96
|
+
/**
|
|
97
|
+
* HLEN for a hash.
|
|
98
|
+
*/
|
|
99
|
+
export declare const hlen: (key: string) => Promise<number | null>;
|
|
41
100
|
/**
|
|
42
101
|
* Remove a hash field.
|
|
43
102
|
*/
|
|
44
103
|
export declare const deleteHashField: (key: string, field: string) => Promise<boolean>;
|
|
104
|
+
/**
|
|
105
|
+
* SADD members to a set. Returns count of newly added members, or null if Redis is unavailable.
|
|
106
|
+
*/
|
|
107
|
+
export declare const sadd: (key: string, members: string[]) => Promise<number | null>;
|
|
108
|
+
/**
|
|
109
|
+
* SREM members from a set. Returns count of removed members, or null if Redis is unavailable.
|
|
110
|
+
*/
|
|
111
|
+
export declare const srem: (key: string, members: string[]) => Promise<number | null>;
|
|
112
|
+
/**
|
|
113
|
+
* SISMEMBER for a set member.
|
|
114
|
+
*/
|
|
115
|
+
export declare const sismember: (key: string, member: string) => Promise<boolean | null>;
|
|
116
|
+
/**
|
|
117
|
+
* SMEMBERS for a set.
|
|
118
|
+
*/
|
|
119
|
+
export declare const smembers: (key: string) => Promise<string[] | null>;
|
|
120
|
+
/**
|
|
121
|
+
* SCARD for a set.
|
|
122
|
+
*/
|
|
123
|
+
export declare const scard: (key: string) => Promise<number | null>;
|
|
45
124
|
type ListDirection = 'left' | 'right';
|
|
46
125
|
/**
|
|
47
126
|
* Push values to a list. Returns list length or null if Redis is unavailable.
|
|
@@ -59,5 +138,9 @@ export declare const rangeList: (key: string, start?: number, stop?: number) =>
|
|
|
59
138
|
* Get list length.
|
|
60
139
|
*/
|
|
61
140
|
export declare const listLength: (key: string) => Promise<number | null>;
|
|
141
|
+
/**
|
|
142
|
+
* Execute a Redis pipeline and return the result array from exec().
|
|
143
|
+
*/
|
|
144
|
+
export declare const pipeline: <TResult>(build: RedisPipelineBuilder<TResult>) => Promise<TResult | null>;
|
|
62
145
|
export {};
|
|
63
146
|
//# sourceMappingURL=redis-structures.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redis-structures.d.ts","sourceRoot":"","sources":["../../../src/lib/upstash/redis-structures.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"redis-structures.d.ts","sourceRoot":"","sources":["../../../src/lib/upstash/redis-structures.ts"],"names":[],"mappings":"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"}
|