@unchainedshop/api 4.2.2 → 4.3.1

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 (117) hide show
  1. package/lib/express/chatHandler.d.ts.map +1 -1
  2. package/lib/express/chatHandler.js +1 -3
  3. package/lib/express/chatHandler.js.map +1 -1
  4. package/lib/express/index.d.ts.map +1 -1
  5. package/lib/express/index.js +1 -1
  6. package/lib/express/index.js.map +1 -1
  7. package/lib/fastify/chatHandler.d.ts.map +1 -1
  8. package/lib/fastify/chatHandler.js +1 -3
  9. package/lib/fastify/chatHandler.js.map +1 -1
  10. package/lib/fastify/ercMetadataHandler.d.ts.map +1 -1
  11. package/lib/fastify/ercMetadataHandler.js +7 -4
  12. package/lib/fastify/ercMetadataHandler.js.map +1 -1
  13. package/lib/fastify/index.js +1 -1
  14. package/lib/fastify/index.js.map +1 -1
  15. package/lib/loaders/index.d.ts +27 -1
  16. package/lib/loaders/index.d.ts.map +1 -1
  17. package/lib/loaders/index.js +10 -2
  18. package/lib/loaders/index.js.map +1 -1
  19. package/lib/loaders/productBySKULoader.d.ts +10 -0
  20. package/lib/loaders/productBySKULoader.d.ts.map +1 -0
  21. package/lib/loaders/productBySKULoader.js +16 -0
  22. package/lib/loaders/productBySKULoader.js.map +1 -0
  23. package/lib/loaders/productVariationByKeyLoader.d.ts +12 -0
  24. package/lib/loaders/productVariationByKeyLoader.d.ts.map +1 -0
  25. package/lib/loaders/productVariationByKeyLoader.js +14 -0
  26. package/lib/loaders/productVariationByKeyLoader.js.map +1 -0
  27. package/lib/loaders/productVariationLoader.d.ts +10 -0
  28. package/lib/loaders/productVariationLoader.d.ts.map +1 -0
  29. package/lib/loaders/productVariationLoader.js +13 -0
  30. package/lib/loaders/productVariationLoader.js.map +1 -0
  31. package/lib/loaders/productVariationTextLoader.d.ts +14 -0
  32. package/lib/loaders/productVariationTextLoader.d.ts.map +1 -0
  33. package/lib/loaders/productVariationTextLoader.js +24 -0
  34. package/lib/loaders/productVariationTextLoader.js.map +1 -0
  35. package/lib/loaders/quotationLoader.d.ts +10 -0
  36. package/lib/loaders/quotationLoader.d.ts.map +1 -0
  37. package/lib/loaders/quotationLoader.js +13 -0
  38. package/lib/loaders/quotationLoader.js.map +1 -0
  39. package/lib/mcp/resources/localization.d.ts.map +1 -1
  40. package/lib/mcp/resources/localization.js +0 -15
  41. package/lib/mcp/resources/localization.js.map +1 -1
  42. package/lib/mongo-store.d.ts +94 -0
  43. package/lib/mongo-store.d.ts.map +1 -0
  44. package/lib/mongo-store.js +368 -0
  45. package/lib/mongo-store.js.map +1 -0
  46. package/lib/resolvers/type/delivery-provider-interface.d.ts +18 -0
  47. package/lib/resolvers/type/delivery-provider-interface.d.ts.map +1 -0
  48. package/lib/resolvers/type/delivery-provider-interface.js +48 -0
  49. package/lib/resolvers/type/delivery-provider-interface.js.map +1 -0
  50. package/lib/resolvers/type/delivery-provider-pickup-types.d.ts +20 -0
  51. package/lib/resolvers/type/delivery-provider-pickup-types.d.ts.map +1 -0
  52. package/lib/resolvers/type/delivery-provider-pickup-types.js +10 -0
  53. package/lib/resolvers/type/delivery-provider-pickup-types.js.map +1 -0
  54. package/lib/resolvers/type/delivery-provider-shipping-types.d.ts +17 -0
  55. package/lib/resolvers/type/delivery-provider-shipping-types.d.ts.map +1 -0
  56. package/lib/resolvers/type/delivery-provider-shipping-types.js +5 -0
  57. package/lib/resolvers/type/delivery-provider-shipping-types.js.map +1 -0
  58. package/lib/resolvers/type/delivery-provider-types.d.ts +7 -11
  59. package/lib/resolvers/type/delivery-provider-types.d.ts.map +1 -1
  60. package/lib/resolvers/type/delivery-provider-types.js +17 -43
  61. package/lib/resolvers/type/delivery-provider-types.js.map +1 -1
  62. package/lib/resolvers/type/index.d.ts +40 -11
  63. package/lib/resolvers/type/index.d.ts.map +1 -1
  64. package/lib/resolvers/type/index.js +4 -0
  65. package/lib/resolvers/type/index.js.map +1 -1
  66. package/lib/resolvers/type/order/order-item-types.d.ts +1 -1
  67. package/lib/resolvers/type/order/order-item-types.d.ts.map +1 -1
  68. package/lib/resolvers/type/order/order-item-types.js +2 -3
  69. package/lib/resolvers/type/order/order-item-types.js.map +1 -1
  70. package/lib/resolvers/type/price-types.d.ts.map +1 -1
  71. package/lib/resolvers/type/price-types.js +19 -5
  72. package/lib/resolvers/type/price-types.js.map +1 -1
  73. package/lib/resolvers/type/product/product-variation-assignment-vector.d.ts.map +1 -1
  74. package/lib/resolvers/type/product/product-variation-assignment-vector.js +4 -6
  75. package/lib/resolvers/type/product/product-variation-assignment-vector.js.map +1 -1
  76. package/lib/resolvers/type/product/product-variation-option-types.d.ts.map +1 -1
  77. package/lib/resolvers/type/product/product-variation-option-types.js +2 -3
  78. package/lib/resolvers/type/product/product-variation-option-types.js.map +1 -1
  79. package/lib/resolvers/type/product/product-variation-types.d.ts.map +1 -1
  80. package/lib/resolvers/type/product/product-variation-types.js +2 -3
  81. package/lib/resolvers/type/product/product-variation-types.js.map +1 -1
  82. package/lib/schema/types/delivery.d.ts.map +1 -1
  83. package/lib/schema/types/delivery.js +38 -1
  84. package/lib/schema/types/delivery.js.map +1 -1
  85. package/lib/schema/types/order/delivery.d.ts.map +1 -1
  86. package/lib/schema/types/order/delivery.js +3 -2
  87. package/lib/schema/types/order/delivery.js.map +1 -1
  88. package/lib/schema/types/order/pick-up-location.d.ts.map +1 -1
  89. package/lib/schema/types/order/pick-up-location.js +1 -2
  90. package/lib/schema/types/order/pick-up-location.js.map +1 -1
  91. package/package.json +11 -14
  92. package/src/express/chatHandler.ts +3 -8
  93. package/src/express/index.ts +3 -2
  94. package/src/fastify/chatHandler.ts +3 -8
  95. package/src/fastify/ercMetadataHandler.ts +9 -4
  96. package/src/fastify/index.ts +1 -1
  97. package/src/loaders/index.ts +11 -2
  98. package/src/loaders/productVariationByKeyLoader.ts +20 -0
  99. package/src/loaders/productVariationLoader.ts +19 -0
  100. package/src/loaders/productVariationTextLoader.ts +37 -0
  101. package/src/loaders/quotationLoader.ts +19 -0
  102. package/src/mcp/resources/localization.ts +0 -15
  103. package/src/mongo-store.ts +500 -0
  104. package/src/resolvers/type/delivery-provider-interface.ts +55 -0
  105. package/src/resolvers/type/delivery-provider-pickup-types.ts +12 -0
  106. package/src/resolvers/type/delivery-provider-shipping-types.ts +5 -0
  107. package/src/resolvers/type/delivery-provider-types.ts +22 -68
  108. package/src/resolvers/type/index.ts +4 -0
  109. package/src/resolvers/type/order/order-item-types.ts +2 -3
  110. package/src/resolvers/type/price-types.ts +19 -5
  111. package/src/resolvers/type/product/product-variation-assignment-vector.ts +4 -6
  112. package/src/resolvers/type/product/product-variation-option-types.ts +2 -3
  113. package/src/resolvers/type/product/product-variation-types.ts +2 -3
  114. package/src/schema/types/delivery.ts +38 -1
  115. package/src/schema/types/order/delivery.ts +3 -2
  116. package/src/schema/types/order/pick-up-location.ts +1 -2
  117. /package/src/loaders/{productLoaderBySKU.ts → productBySKULoader.ts} +0 -0
@@ -2,11 +2,6 @@ export const registerLocalizationResources = (server, context) => {
2
2
  server.resource('shop-languages', 'unchained://shop/languages', {
3
3
  description: 'Available languages configured in the shop. Use these ISO codes when creating or updating products, filters, and assortments. Includes valid language-country dialect combinations.',
4
4
  mimeType: 'application/json',
5
- annotations: {
6
- audience: ['assistant'],
7
- priority: 1,
8
- lastModified: '2025-09-30T15:00:58Z',
9
- },
10
5
  }, async () => {
11
6
  const [languages, countries] = await Promise.all([
12
7
  context.modules.languages.findLanguages({ includeInactive: false }),
@@ -37,11 +32,6 @@ export const registerLocalizationResources = (server, context) => {
37
32
  server.resource('shop-currencies', 'unchained://shop/currencies', {
38
33
  description: 'Available currencies configured in the shop. Check decimal points for price conversions. All prices are stored as integers.',
39
34
  mimeType: 'application/json',
40
- annotations: {
41
- audience: ['assistant'],
42
- priority: 1,
43
- lastModified: '2025-09-30T15:00:58Z',
44
- },
45
35
  }, async () => {
46
36
  const currencies = await context.modules.currencies.findCurrencies({ includeInactive: false });
47
37
  return {
@@ -65,11 +55,6 @@ export const registerLocalizationResources = (server, context) => {
65
55
  server.resource('shop-countries', 'unchained://shop/countries', {
66
56
  description: 'Available countries configured in the shop. Use these ISO codes for geographic operations.',
67
57
  mimeType: 'application/json',
68
- annotations: {
69
- audience: ['assistant'],
70
- priority: 1,
71
- lastModified: '2025-09-30T15:00:58Z',
72
- },
73
58
  }, async () => {
74
59
  const countries = await context.modules.countries.findCountries({ includeInactive: false });
75
60
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"localization.js","sourceRoot":"","sources":["../../../src/mcp/resources/localization.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"localization.js","sourceRoot":"","sources":["../../../src/mcp/resources/localization.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,94 @@
1
+ import * as session from 'express-session';
2
+ import { Collection, MongoClient, MongoClientOptions, WriteConcernSettings } from 'mongodb';
3
+ export interface CryptoOptions {
4
+ secret: false | string;
5
+ algorithm?: string;
6
+ hashing?: string;
7
+ encodeas?: string;
8
+ key_size?: number;
9
+ iv_size?: number;
10
+ at_size?: number;
11
+ }
12
+ export interface ConnectMongoOptions {
13
+ mongoUrl?: string;
14
+ clientPromise?: Promise<MongoClient>;
15
+ client?: MongoClient;
16
+ collectionName?: string;
17
+ mongoOptions?: MongoClientOptions;
18
+ dbName?: string;
19
+ ttl?: number;
20
+ touchAfter?: number;
21
+ stringify?: boolean;
22
+ createAutoRemoveIdx?: boolean;
23
+ autoRemove?: 'native' | 'interval' | 'disabled';
24
+ autoRemoveInterval?: number;
25
+ serialize?: (a: any) => any;
26
+ unserialize?: (a: any) => any;
27
+ writeOperationOptions?: WriteConcernSettings;
28
+ transformId?: (a: any) => any;
29
+ }
30
+ interface InternalSessionType {
31
+ _id: string;
32
+ session: any;
33
+ expires?: Date;
34
+ lastModified?: Date;
35
+ }
36
+ export default class MongoStore extends session.Store {
37
+ private clientP;
38
+ private crypto;
39
+ private timer?;
40
+ collectionP: Promise<Collection<InternalSessionType>>;
41
+ private options;
42
+ private transformFunctions;
43
+ constructor({ collectionName, ttl, mongoOptions, autoRemove, autoRemoveInterval, touchAfter, stringify, ...required }: ConnectMongoOptions);
44
+ static create(options: ConnectMongoOptions): MongoStore;
45
+ private setAutoRemove;
46
+ private computeStorageId;
47
+ /**
48
+ * promisify and bind the `this.crypto.get` function.
49
+ * Please check !!this.crypto === true before using this getter!
50
+ */
51
+ private get cryptoGet();
52
+ /**
53
+ * Decrypt given session data
54
+ * @param session session data to be decrypt. Mutate the input session.
55
+ */
56
+ private decryptSession;
57
+ /**
58
+ * Get a session from the store given a session ID (sid)
59
+ * @param sid session ID
60
+ */
61
+ get(sid: string, callback: (err: any, session?: session.SessionData | null) => void): void;
62
+ /**
63
+ * Upsert a session into the store given a session ID (sid) and session (session) object.
64
+ * @param sid session ID
65
+ * @param session session object
66
+ */
67
+ set(sid: string, session: session.SessionData, callback?: (err: any) => void): void;
68
+ touch(sid: string, session: session.SessionData & {
69
+ lastModified?: Date;
70
+ }, callback?: (err: any) => void): void;
71
+ /**
72
+ * Get all sessions in the store as an array
73
+ */
74
+ all(callback: (err: any, obj?: session.SessionData[] | Record<string, session.SessionData> | null) => void): void;
75
+ /**
76
+ * Destroy/delete a session from the store given a session ID (sid)
77
+ * @param sid session ID
78
+ */
79
+ destroy(sid: string, callback?: (err: any) => void): void;
80
+ /**
81
+ * Get the count of all sessions in the store
82
+ */
83
+ length(callback: (err: any, length: number) => void): void;
84
+ /**
85
+ * Delete all sessions from the store.
86
+ */
87
+ clear(callback?: (err: any) => void): void;
88
+ /**
89
+ * Close database connection
90
+ */
91
+ close(): Promise<void>;
92
+ }
93
+ export {};
94
+ //# sourceMappingURL=mongo-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongo-store.d.ts","sourceRoot":"","sources":["../src/mongo-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,368 @@
1
+ /*
2
+ MIT License
3
+ Fork of https://github.com/jdesboeufs/connect-mongo#readme Connect Mongo
4
+ Thanks to Casey Banner, Jerome Desboeufs, MC Or
5
+ */
6
+ import { assert } from 'node:console';
7
+ import util from 'node:util';
8
+ import * as session from 'express-session';
9
+ import { MongoClient } from 'mongodb';
10
+ import { createLogger } from '@unchainedshop/logger';
11
+ const logger = createLogger('unchained:api');
12
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
13
+ const noop = () => { };
14
+ const unit = (a) => a;
15
+ function defaultSerializeFunction(session) {
16
+ // Copy each property of the session to a new object
17
+ const obj = {};
18
+ let prop;
19
+ for (prop in session) {
20
+ if (prop === 'cookie') {
21
+ // Convert the cookie instance to an object, if possible
22
+ // This gets rid of the duplicate object under session.cookie.data property
23
+ // @ts-expect-error FIXME:
24
+ obj.cookie = session.cookie.toJSON ? session.cookie.toJSON() : session.cookie;
25
+ }
26
+ else {
27
+ obj[prop] = session[prop];
28
+ }
29
+ }
30
+ return obj;
31
+ }
32
+ function computeTransformFunctions(options) {
33
+ if (options.serialize || options.unserialize) {
34
+ return {
35
+ serialize: options.serialize || defaultSerializeFunction,
36
+ unserialize: options.unserialize || unit,
37
+ };
38
+ }
39
+ if (options.stringify === false) {
40
+ return {
41
+ serialize: defaultSerializeFunction,
42
+ unserialize: unit,
43
+ };
44
+ }
45
+ // Default case
46
+ return {
47
+ serialize: JSON.stringify,
48
+ unserialize: JSON.parse,
49
+ };
50
+ }
51
+ export default class MongoStore extends session.Store {
52
+ clientP;
53
+ crypto = null;
54
+ timer;
55
+ collectionP;
56
+ options;
57
+ // FIXME: remvoe any
58
+ transformFunctions;
59
+ constructor({ collectionName = 'sessions', ttl = 1209600, mongoOptions = {}, autoRemove = 'native', autoRemoveInterval = 10, touchAfter = 0, stringify = true, ...required }) {
60
+ super();
61
+ logger.debug('create MongoStore instance');
62
+ const options = {
63
+ collectionName,
64
+ ttl,
65
+ mongoOptions,
66
+ autoRemove,
67
+ autoRemoveInterval,
68
+ touchAfter,
69
+ stringify,
70
+ crypto: {
71
+ secret: false,
72
+ algorithm: 'aes-256-gcm',
73
+ hashing: 'sha512',
74
+ encodeas: 'base64',
75
+ key_size: 32,
76
+ iv_size: 16,
77
+ at_size: 16,
78
+ },
79
+ ...required,
80
+ };
81
+ // Check params
82
+ assert(options.mongoUrl || options.clientPromise || options.client, 'You must provide either mongoUrl|clientPromise|client in options');
83
+ assert(options.createAutoRemoveIdx === null || options.createAutoRemoveIdx === undefined, 'options.createAutoRemoveIdx has been reverted to autoRemove and autoRemoveInterval');
84
+ assert(!options.autoRemoveInterval || options.autoRemoveInterval <= 71582,
85
+ /* (Math.pow(2, 32) - 1) / (1000 * 60) */ 'autoRemoveInterval is too large. options.autoRemoveInterval is in minutes but not seconds nor mills');
86
+ this.transformFunctions = computeTransformFunctions(options);
87
+ let _clientP;
88
+ if (options.mongoUrl) {
89
+ _clientP = MongoClient.connect(options.mongoUrl, options.mongoOptions);
90
+ }
91
+ else if (options.clientPromise) {
92
+ _clientP = options.clientPromise;
93
+ }
94
+ else if (options.client) {
95
+ _clientP = Promise.resolve(options.client);
96
+ }
97
+ else {
98
+ throw new Error('Cannot init client. Please provide correct options');
99
+ }
100
+ assert(!!_clientP, 'Client is null|undefined');
101
+ this.clientP = _clientP;
102
+ this.options = options;
103
+ this.collectionP = _clientP.then(async (con) => {
104
+ const collection = con.db(options.dbName).collection(options.collectionName);
105
+ await this.setAutoRemove(collection);
106
+ return collection;
107
+ });
108
+ }
109
+ static create(options) {
110
+ return new MongoStore(options);
111
+ }
112
+ setAutoRemove(collection) {
113
+ const removeQuery = () => ({
114
+ expires: {
115
+ $lt: new Date(),
116
+ },
117
+ });
118
+ switch (this.options.autoRemove) {
119
+ case 'native':
120
+ logger.debug('Creating MongoDB TTL index');
121
+ return collection.createIndex({ expires: 1 }, {
122
+ background: true,
123
+ expireAfterSeconds: 0,
124
+ });
125
+ case 'interval':
126
+ logger.debug('create Timer to remove expired sessions');
127
+ this.timer = setInterval(() => collection.deleteMany(removeQuery(), {
128
+ writeConcern: {
129
+ w: 0,
130
+ j: false,
131
+ },
132
+ }), this.options.autoRemoveInterval * 1000 * 60);
133
+ this.timer.unref();
134
+ return Promise.resolve();
135
+ case 'disabled':
136
+ default:
137
+ return Promise.resolve();
138
+ }
139
+ }
140
+ computeStorageId(sessionId) {
141
+ if (this.options.transformId && typeof this.options.transformId === 'function') {
142
+ return this.options.transformId(sessionId);
143
+ }
144
+ return sessionId;
145
+ }
146
+ /**
147
+ * promisify and bind the `this.crypto.get` function.
148
+ * Please check !!this.crypto === true before using this getter!
149
+ */
150
+ get cryptoGet() {
151
+ if (!this.crypto) {
152
+ throw new Error('Check this.crypto before calling this.cryptoGet!');
153
+ }
154
+ return util.promisify(this.crypto.get).bind(this.crypto);
155
+ }
156
+ /**
157
+ * Decrypt given session data
158
+ * @param session session data to be decrypt. Mutate the input session.
159
+ */
160
+ async decryptSession(session) {
161
+ if (this.crypto && session) {
162
+ const plaintext = await this.cryptoGet(this.options.crypto.secret, session.session).catch((err) => {
163
+ throw new Error(err);
164
+ });
165
+ session.session = JSON.parse(plaintext);
166
+ }
167
+ }
168
+ /**
169
+ * Get a session from the store given a session ID (sid)
170
+ * @param sid session ID
171
+ */
172
+ get(sid, callback) {
173
+ (async () => {
174
+ try {
175
+ logger.debug(`MongoStore#get=${sid}`);
176
+ const collection = await this.collectionP;
177
+ const session = await collection.findOne({
178
+ _id: this.computeStorageId(sid),
179
+ $or: [{ expires: { $exists: false } }, { expires: { $gt: new Date() } }],
180
+ });
181
+ if (this.crypto && session) {
182
+ await this.decryptSession(session).catch((err) => callback(err));
183
+ }
184
+ const s = session && this.transformFunctions.unserialize(session.session);
185
+ if (this.options.touchAfter > 0 && session?.lastModified) {
186
+ s.lastModified = session.lastModified;
187
+ }
188
+ this.emit('get', sid);
189
+ callback(null, s === undefined ? null : s);
190
+ }
191
+ catch (error) {
192
+ callback(error);
193
+ }
194
+ })();
195
+ }
196
+ /**
197
+ * Upsert a session into the store given a session ID (sid) and session (session) object.
198
+ * @param sid session ID
199
+ * @param session session object
200
+ */
201
+ set(sid, session, callback = noop) {
202
+ (async () => {
203
+ try {
204
+ logger.debug(`MongoStore#set=${sid}`);
205
+ // Removing the lastModified prop from the session object before update
206
+ // @ts-expect-error Session not typed
207
+ if (this.options.touchAfter > 0 && session?.lastModified) {
208
+ // @ts-expect-error Session not typed
209
+ delete session.lastModified;
210
+ }
211
+ const s = {
212
+ _id: this.computeStorageId(sid),
213
+ session: this.transformFunctions.serialize(session),
214
+ };
215
+ // Expire handling
216
+ if (session?.cookie?.expires) {
217
+ s.expires = new Date(session.cookie.expires);
218
+ }
219
+ else {
220
+ // If there's no expiration date specified, it is
221
+ // browser-session cookie or there is no cookie at all,
222
+ // as per the connect docs.
223
+ //
224
+ // So we set the expiration to two-weeks from now
225
+ // - as is common practice in the industry (e.g Django) -
226
+ // or the default specified in the options.
227
+ s.expires = new Date(Date.now() + this.options.ttl * 1000);
228
+ }
229
+ // Last modify handling
230
+ if (this.options.touchAfter > 0) {
231
+ s.lastModified = new Date();
232
+ }
233
+ if (this.crypto) {
234
+ const cryptoSet = util.promisify(this.crypto.set).bind(this.crypto);
235
+ const data = await cryptoSet(this.options.crypto.secret, s.session).catch((err) => {
236
+ throw new Error(err);
237
+ });
238
+ s.session = data;
239
+ }
240
+ const collection = await this.collectionP;
241
+ const rawResp = await collection.updateOne({ _id: s._id }, { $set: s }, {
242
+ upsert: true,
243
+ writeConcern: this.options.writeOperationOptions,
244
+ });
245
+ if (rawResp.upsertedCount > 0) {
246
+ this.emit('create', sid);
247
+ }
248
+ else {
249
+ this.emit('update', sid);
250
+ }
251
+ this.emit('set', sid);
252
+ }
253
+ catch (error) {
254
+ return callback(error);
255
+ }
256
+ return callback(null);
257
+ })();
258
+ }
259
+ touch(sid, session, callback = noop) {
260
+ (async () => {
261
+ try {
262
+ logger.debug(`MongoStore#touch=${sid}`);
263
+ const updateFields = {};
264
+ const touchAfter = this.options.touchAfter * 1000;
265
+ const lastModified = session.lastModified ? session.lastModified.getTime() : 0;
266
+ const currentDate = new Date();
267
+ // If the given options has a touchAfter property, check if the
268
+ // current timestamp - lastModified timestamp is bigger than
269
+ // the specified, if it's not, don't touch the session
270
+ if (touchAfter > 0 && lastModified > 0) {
271
+ const timeElapsed = currentDate.getTime() - lastModified;
272
+ if (timeElapsed < touchAfter) {
273
+ logger.debug(`Skip touching session=${sid}`);
274
+ return callback(null);
275
+ }
276
+ updateFields.lastModified = currentDate;
277
+ }
278
+ if (session?.cookie?.expires) {
279
+ updateFields.expires = new Date(session.cookie.expires);
280
+ }
281
+ else {
282
+ updateFields.expires = new Date(Date.now() + this.options.ttl * 1000);
283
+ }
284
+ const collection = await this.collectionP;
285
+ const rawResp = await collection.updateOne({ _id: this.computeStorageId(sid) }, { $set: updateFields }, { writeConcern: this.options.writeOperationOptions });
286
+ if (rawResp.matchedCount === 0) {
287
+ return callback(new Error('Unable to find the session to touch'));
288
+ }
289
+ else {
290
+ this.emit('touch', sid, session);
291
+ return callback(null);
292
+ }
293
+ }
294
+ catch (error) {
295
+ return callback(error);
296
+ }
297
+ })();
298
+ }
299
+ /**
300
+ * Get all sessions in the store as an array
301
+ */
302
+ all(callback) {
303
+ (async () => {
304
+ try {
305
+ logger.debug('MongoStore#all()');
306
+ const collection = await this.collectionP;
307
+ const sessions = collection.find({
308
+ $or: [{ expires: { $exists: false } }, { expires: { $gt: new Date() } }],
309
+ });
310
+ const results = [];
311
+ for await (const session of sessions) {
312
+ if (this.crypto && session) {
313
+ await this.decryptSession(session);
314
+ }
315
+ results.push(this.transformFunctions.unserialize(session.session));
316
+ }
317
+ this.emit('all', results);
318
+ callback(null, results);
319
+ }
320
+ catch (error) {
321
+ callback(error);
322
+ }
323
+ })();
324
+ }
325
+ /**
326
+ * Destroy/delete a session from the store given a session ID (sid)
327
+ * @param sid session ID
328
+ */
329
+ destroy(sid, callback = noop) {
330
+ logger.debug(`MongoStore#destroy=${sid}`);
331
+ this.collectionP
332
+ .then((colleciton) => colleciton.deleteOne({ _id: this.computeStorageId(sid) }, { writeConcern: this.options.writeOperationOptions }))
333
+ .then(() => {
334
+ this.emit('destroy', sid);
335
+ callback(null);
336
+ })
337
+ .catch((err) => callback(err));
338
+ }
339
+ /**
340
+ * Get the count of all sessions in the store
341
+ */
342
+ length(callback) {
343
+ logger.debug('MongoStore#length()');
344
+ this.collectionP
345
+ .then((collection) => collection.countDocuments())
346
+ .then((c) => callback(null, c))
347
+ // @ts-expect-error Callback wrong type
348
+ .catch((err) => callback(err));
349
+ }
350
+ /**
351
+ * Delete all sessions from the store.
352
+ */
353
+ clear(callback = noop) {
354
+ logger.debug('MongoStore#clear()');
355
+ this.collectionP
356
+ .then((collection) => collection.drop())
357
+ .then(() => callback(null))
358
+ .catch((err) => callback(err));
359
+ }
360
+ /**
361
+ * Close database connection
362
+ */
363
+ close() {
364
+ logger.debug('MongoStore#close()');
365
+ return this.clientP.then((c) => c.close());
366
+ }
367
+ }
368
+ //# sourceMappingURL=mongo-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongo-store.js","sourceRoot":"","sources":["../src/mongo-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { Context } from '../../context.js';
2
+ export declare const DeliveryProviderInterface: {
3
+ isActive(deliveryProvider: any, _: any, context: Context): Promise<boolean>;
4
+ configurationError(deliveryProvider: any, _: any, context: Context): Promise<import("@unchainedshop/core").DeliveryError | null>;
5
+ interface(deliveryProvider: any): {
6
+ _id: string;
7
+ label: string;
8
+ version: string;
9
+ } | null;
10
+ simulatedPrice(deliveryProvider: any, args: any, context: Context): Promise<{
11
+ amount: number;
12
+ currencyCode: string;
13
+ countryCode: string;
14
+ isTaxable: boolean;
15
+ isNetPrice: any;
16
+ } | null>;
17
+ };
18
+ //# sourceMappingURL=delivery-provider-interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delivery-provider-interface.d.ts","sourceRoot":"","sources":["../../../src/resolvers/type/delivery-provider-interface.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C,eAAO,MAAM,yBAAyB;qDACS,OAAO;+DAKG,OAAO;;;;;;8DAeR,OAAO;;;;;;;CA8B9D,CAAC"}
@@ -0,0 +1,48 @@
1
+ import { DeliveryDirector, DeliveryPricingDirector } from '@unchainedshop/core';
2
+ export const DeliveryProviderInterface = {
3
+ async isActive(deliveryProvider, _, context) {
4
+ const director = await DeliveryDirector.actions(deliveryProvider, {}, context);
5
+ return Boolean(director.isActive());
6
+ },
7
+ async configurationError(deliveryProvider, _, context) {
8
+ const director = await DeliveryDirector.actions(deliveryProvider, {}, context);
9
+ return director.configurationError();
10
+ },
11
+ interface(deliveryProvider) {
12
+ const Adapter = DeliveryDirector.getAdapter(deliveryProvider.adapterKey);
13
+ if (!Adapter)
14
+ return null;
15
+ return {
16
+ _id: Adapter.key,
17
+ label: Adapter.label,
18
+ version: Adapter.version,
19
+ };
20
+ },
21
+ async simulatedPrice(deliveryProvider, args, context) {
22
+ const { loaders, countryCode, user } = context;
23
+ const { currencyCode: forcedCurrencyCode, orderId, useNetPrice, context: providerContext } = args;
24
+ const order = await loaders.orderLoader.load({ orderId });
25
+ const currencyCode = forcedCurrencyCode || order?.currencyCode || context.currencyCode;
26
+ const pricingContext = {
27
+ countryCode,
28
+ currencyCode,
29
+ provider: deliveryProvider,
30
+ order,
31
+ providerContext,
32
+ user: user,
33
+ };
34
+ const calculated = await DeliveryPricingDirector.rebuildCalculation(pricingContext, context);
35
+ if (!calculated?.length)
36
+ return null;
37
+ const pricing = DeliveryPricingDirector.calculationSheet(pricingContext, calculated);
38
+ const orderPrice = pricing.total({ useNetPrice });
39
+ return {
40
+ amount: orderPrice.amount,
41
+ currencyCode: orderPrice.currencyCode,
42
+ countryCode,
43
+ isTaxable: pricing.taxSum() > 0,
44
+ isNetPrice: useNetPrice,
45
+ };
46
+ },
47
+ };
48
+ //# sourceMappingURL=delivery-provider-interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delivery-provider-interface.js","sourceRoot":"","sources":["../../../src/resolvers/type/delivery-provider-interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAGhF,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,KAAK,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC,EAAE,OAAgB;QAClD,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;QAC/E,OAAO,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,gBAAgB,EAAE,CAAC,EAAE,OAAgB;QAC5D,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;QAC/E,OAAO,QAAQ,CAAC,kBAAkB,EAAE,CAAC;IACvC,CAAC;IAED,SAAS,CAAC,gBAAgB;QACxB,MAAM,OAAO,GAAG,gBAAgB,CAAC,UAAU,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QACzE,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAC1B,OAAO;YACL,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,gBAAgB,EAAE,IAAI,EAAE,OAAgB;QAC3D,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;QAC/C,MAAM,EAAE,YAAY,EAAE,kBAAkB,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;QAElG,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QAC1D,MAAM,YAAY,GAAG,kBAAkB,IAAI,KAAK,EAAE,YAAY,IAAI,OAAO,CAAC,YAAY,CAAC;QAEvF,MAAM,cAAc,GAAG;YACrB,WAAW;YACX,YAAY;YACZ,QAAQ,EAAE,gBAAgB;YAC1B,KAAK;YACL,eAAe;YACf,IAAI,EAAE,IAAK;SACZ,CAAC;QAEF,MAAM,UAAU,GAAG,MAAM,uBAAuB,CAAC,kBAAkB,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;QAC7F,IAAI,CAAC,UAAU,EAAE,MAAM;YAAE,OAAO,IAAI,CAAC;QAErC,MAAM,OAAO,GAAG,uBAAuB,CAAC,gBAAgB,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;QACrF,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;QAElD,OAAO;YACL,MAAM,EAAE,UAAU,CAAC,MAAM;YACzB,YAAY,EAAE,UAAU,CAAC,YAAY;YACrC,WAAW;YACX,SAAS,EAAE,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;YAC/B,UAAU,EAAE,WAAW;SACxB,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { Context } from '../../context.js';
2
+ import { DeliveryProvider } from '@unchainedshop/core-delivery';
3
+ export declare const DeliveryProviderPickUp: {
4
+ pickUpLocations(provider: DeliveryProvider, _: never, context: Context): Promise<import("@unchainedshop/core-delivery").DeliveryLocation[]>;
5
+ isActive(deliveryProvider: any, _: any, context: Context): Promise<boolean>;
6
+ configurationError(deliveryProvider: any, _: any, context: Context): Promise<import("@unchainedshop/core").DeliveryError | null>;
7
+ interface(deliveryProvider: any): {
8
+ _id: string;
9
+ label: string;
10
+ version: string;
11
+ } | null;
12
+ simulatedPrice(deliveryProvider: any, args: any, context: Context): Promise<{
13
+ amount: number;
14
+ currencyCode: string;
15
+ countryCode: string;
16
+ isTaxable: boolean;
17
+ isNetPrice: any;
18
+ } | null>;
19
+ };
20
+ //# sourceMappingURL=delivery-provider-pickup-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delivery-provider-pickup-types.d.ts","sourceRoot":"","sources":["../../../src/resolvers/type/delivery-provider-pickup-types.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAGhE,eAAO,MAAM,sBAAsB;8BAED,gBAAgB,KAAK,KAAK,WAAW,OAAO;;;;;;;;;;;;;;;CAI7E,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { DeliveryDirector } from '@unchainedshop/core';
2
+ import { DeliveryProviderInterface } from './delivery-provider-interface.js';
3
+ export const DeliveryProviderPickUp = {
4
+ ...DeliveryProviderInterface,
5
+ async pickUpLocations(provider, _, context) {
6
+ const director = await DeliveryDirector.actions(provider, {}, context);
7
+ return director.pickUpLocations() || [];
8
+ },
9
+ };
10
+ //# sourceMappingURL=delivery-provider-pickup-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delivery-provider-pickup-types.js","sourceRoot":"","sources":["../../../src/resolvers/type/delivery-provider-pickup-types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAE7E,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,GAAG,yBAAyB;IAC5B,KAAK,CAAC,eAAe,CAAC,QAA0B,EAAE,CAAQ,EAAE,OAAgB;QAC1E,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;QACvE,OAAO,QAAQ,CAAC,eAAe,EAAE,IAAI,EAAE,CAAC;IAC1C,CAAC;CACF,CAAC"}