@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.
Files changed (66) hide show
  1. package/LICENSE +1 -1
  2. package/dist/index.d.ts +1 -0
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +44 -0
  5. package/dist/index.mjs +8 -1
  6. package/dist/lib/index.js +19 -0
  7. package/dist/lib/index.mjs +1 -1
  8. package/dist/lib/upstash/qstash.d.ts +20 -7
  9. package/dist/lib/upstash/qstash.d.ts.map +1 -1
  10. package/dist/lib/upstash/qstash.js +33 -7
  11. package/dist/lib/upstash/qstash.mjs +33 -7
  12. package/dist/lib/upstash/redis-structures.d.ts +83 -0
  13. package/dist/lib/upstash/redis-structures.d.ts.map +1 -1
  14. package/dist/lib/upstash/redis-structures.js +220 -0
  15. package/dist/lib/upstash/redis-structures.mjs +202 -1
  16. package/dist/lib/upstash-config.d.ts.map +1 -1
  17. package/dist/lib/upstash-config.js +76 -4
  18. package/dist/lib/upstash-config.mjs +76 -4
  19. package/dist/services/ai/abort.d.ts +2 -0
  20. package/dist/services/ai/abort.d.ts.map +1 -0
  21. package/dist/services/ai/abort.js +24 -0
  22. package/dist/services/ai/abort.mjs +22 -0
  23. package/dist/services/ai/env.d.ts +21 -0
  24. package/dist/services/ai/env.d.ts.map +1 -0
  25. package/dist/services/ai/env.js +85 -0
  26. package/dist/services/ai/env.mjs +80 -0
  27. package/dist/services/ai/error.d.ts +3 -0
  28. package/dist/services/ai/error.d.ts.map +1 -0
  29. package/dist/services/ai/error.js +54 -0
  30. package/dist/services/ai/error.mjs +52 -0
  31. package/dist/services/ai/index.d.ts +9 -0
  32. package/dist/services/ai/index.d.ts.map +1 -0
  33. package/dist/services/ai/index.js +30 -0
  34. package/dist/services/ai/index.mjs +7 -0
  35. package/dist/services/ai/message-builder.d.ts +4 -0
  36. package/dist/services/ai/message-builder.d.ts.map +1 -0
  37. package/dist/services/ai/message-builder.js +15 -0
  38. package/dist/services/ai/message-builder.mjs +13 -0
  39. package/dist/services/ai/mock.d.ts +30 -0
  40. package/dist/services/ai/mock.d.ts.map +1 -0
  41. package/dist/services/ai/mock.js +314 -0
  42. package/dist/services/ai/mock.mjs +308 -0
  43. package/dist/services/ai/openrouter-client.d.ts +12 -0
  44. package/dist/services/ai/openrouter-client.d.ts.map +1 -0
  45. package/dist/services/ai/openrouter-client.js +81 -0
  46. package/dist/services/ai/openrouter-client.mjs +78 -0
  47. package/dist/services/ai/route.d.ts +6 -0
  48. package/dist/services/ai/route.d.ts.map +1 -0
  49. package/dist/services/ai/route.js +178 -0
  50. package/dist/services/ai/route.mjs +173 -0
  51. package/dist/services/ai/types.d.ts +98 -0
  52. package/dist/services/ai/types.d.ts.map +1 -0
  53. package/package.json +11 -4
  54. package/src/index.ts +1 -0
  55. package/src/lib/upstash/qstash.ts +55 -15
  56. package/src/lib/upstash/redis-structures.ts +248 -0
  57. package/src/lib/upstash-config.ts +106 -4
  58. package/src/services/ai/abort.ts +26 -0
  59. package/src/services/ai/env.ts +120 -0
  60. package/src/services/ai/error.ts +64 -0
  61. package/src/services/ai/index.ts +8 -0
  62. package/src/services/ai/message-builder.ts +17 -0
  63. package/src/services/ai/mock.ts +378 -0
  64. package/src/services/ai/openrouter-client.ts +94 -0
  65. package/src/services/ai/route.ts +218 -0
  66. package/src/services/ai/types.ts +131 -0
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2025 D8ger
3
+ Copyright (c) 2026 D8ger
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/dist/index.d.ts CHANGED
@@ -3,5 +3,6 @@ export * from './services/database';
3
3
  export * from './services/aggregate';
4
4
  export * from './services/context';
5
5
  export * from './services/stripe';
6
+ export * from './services/ai';
6
7
  export * from './lib';
7
8
  //# sourceMappingURL=index.d.ts.map
@@ -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;
@@ -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 PublishMessageOptions {
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: PublishBody;
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<string | null>;
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<string | null>;
16
- export interface ScheduleMessageOptions extends PublishMessageOptions {
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<string | null>;
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;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,WAAW,CAAC;CACnB;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,GAAU,SAAS,qBAAqB,KAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAQ1F,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,GAChC,SAAS,qBAAqB,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,KACpD,OAAO,CAAC,MAAM,GAAG,IAAI,CASvB,CAAC;AAEF,MAAM,WAAW,sBAAuB,SAAQ,qBAAqB;IACnE,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,eAAO,MAAM,eAAe,GAAU,SAAS,sBAAsB,KAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAiB5F,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"}
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: options.body,
64
+ body: message,
50
65
  });
51
- return typeof result === 'string' ? result : (_a = result === null || result === void 0 ? void 0 : result.messageId) !== null && _a !== void 0 ? _a : null;
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: options.body,
81
+ body: message,
63
82
  delay: options.delaySec,
64
83
  });
65
- return typeof result === 'string' ? result : (_a = result === null || result === void 0 ? void 0 : result.messageId) !== null && _a !== void 0 ? _a : null;
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: options.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: options.body,
104
+ body: message,
82
105
  cron: options.cron,
83
106
  })));
84
- return 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
+ 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: options.body,
62
+ body: message,
48
63
  });
49
- return typeof result === 'string' ? result : (_a = result === null || result === void 0 ? void 0 : result.messageId) !== null && _a !== void 0 ? _a : null;
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: options.body,
79
+ body: message,
61
80
  delay: options.delaySec,
62
81
  });
63
- return typeof result === 'string' ? result : (_a = result === null || result === void 0 ? void 0 : result.messageId) !== null && _a !== void 0 ? _a : null;
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: options.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: options.body,
102
+ body: message,
80
103
  cron: options.cron,
81
104
  })));
82
- return 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;
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":"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"}
1
+ {"version":3,"file":"redis-structures.d.ts","sourceRoot":"","sources":["../../../src/lib/upstash/redis-structures.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAI5C,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACzD,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AACrD,MAAM,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAC1D,MAAM,MAAM,oBAAoB,CAAC,OAAO,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,KAAK;IACvF,IAAI,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;CAC9B,CAAC;AAEF;;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,IAAI,GAAU,MAAM,MAAM,EAAE,KAAG,OAAO,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAQ3E,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,IAAI,GAAU,SAAS,mBAAmB,KAAG,OAAO,CAAC,OAAO,CAUxE,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,QAAQ,GAAU,CAAC,EAAE,MAAM,MAAM,EAAE,KAAG,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAmB7E,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,QAAQ,GAAU,CAAC,EAAE,SAAS,iBAAiB,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,OAAO,CAchF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,SAAS,GAAU,KAAK,MAAM,KAAG,OAAO,CAAC,OAAO,CAM5D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,GAAG,GAAU,MAAM,MAAM,EAAE,KAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAQ/D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,MAAM,GAAU,KAAK,MAAM,KAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAKhE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,MAAM,GAAU,KAAK,MAAM,EAAE,QAAQ,MAAM,KAAG,OAAO,CAAC,OAAO,CAWzE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,GAAG,GAAU,KAAK,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAE5D,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,KAAK,GAAU,KAAK,MAAM,EAAE,QAAQ,oBAAoB,KAAG,OAAO,CAAC,OAAO,CAWtF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,KAAK,GAChB,KAAK,MAAM,EACX,QAAQ,MAAM,EAAE,KACf,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,CAY9C,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,OAAO,GAAU,KAAK,MAAM,EAAE,OAAO,MAAM,KAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAKhF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,KAAK,GAAU,KAAK,MAAM,KAAG,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAEhE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,IAAI,GAAU,KAAK,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAE7D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,GAAU,KAAK,MAAM,EAAE,OAAO,MAAM,KAAG,OAAO,CAAC,OAAO,CAMjF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,IAAI,GAAU,KAAK,MAAM,EAAE,SAAS,MAAM,EAAE,KAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAQhF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,IAAI,GAAU,KAAK,MAAM,EAAE,SAAS,MAAM,EAAE,KAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAQhF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,SAAS,GAAU,KAAK,MAAM,EAAE,QAAQ,MAAM,KAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAKnF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,QAAQ,GAAU,KAAK,MAAM,KAAG,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAEnE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,KAAK,GAAU,KAAK,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAE9D,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;AAEF;;GAEG;AACH,eAAO,MAAM,QAAQ,GAAU,OAAO,EACpC,OAAO,oBAAoB,CAAC,OAAO,CAAC,KACnC,OAAO,CAAC,OAAO,GAAG,IAAI,CAKxB,CAAC"}