@unchainedshop/platform 4.0.0-rc.2 → 4.0.0-rc.4

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.
@@ -0,0 +1,4 @@
1
+ import { Context } from '@unchainedshop/types/api.js';
2
+ declare const _default: (fn?: (context: Context) => any) => any;
3
+ export default _default;
4
+ //# sourceMappingURL=withAccessToken.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"withAccessToken.d.ts","sourceRoot":"","sources":["../../src/context/withAccessToken.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;8BAOlC,CAAC,OAAO,EAAE,OAAO,KAAK,GAAG,KAAqB,GAAG;AAArE,wBAmCE"}
@@ -0,0 +1,42 @@
1
+ import { createLogger } from '@unchainedshop/logger';
2
+ import { timingSafeEqual } from 'crypto';
3
+ const logger = createLogger('unchained:platform');
4
+ const contextIdentity = (params) => params;
5
+ export default (fn = contextIdentity) => {
6
+ return async (params, unchainedContextFn) => {
7
+ const unchainedContext = await unchainedContextFn(params);
8
+ const newContext = {
9
+ userId: unchainedContext.userId,
10
+ user: unchainedContext.user,
11
+ };
12
+ if (!unchainedContext.userId && params.req.headers.authorization) {
13
+ const [type, userToken] = params.req.headers.authorization.split(' ');
14
+ if (type === 'Bearer' && userToken) {
15
+ const [username, secret] = userToken.split(':');
16
+ const user = await unchainedContext.modules.users.findUser({
17
+ username,
18
+ });
19
+ if (secret && user?.services.token?.secret) {
20
+ try {
21
+ if (timingSafeEqual(Buffer.from(secret), Buffer.from(user?.services.token?.secret))) {
22
+ newContext.userId = user._id;
23
+ newContext.user = user;
24
+ logger.debug('Token login success');
25
+ }
26
+ else {
27
+ throw new Error('Access Token not valid');
28
+ }
29
+ }
30
+ catch (e) {
31
+ logger.warn(`Token login failed: ${e.message}`);
32
+ }
33
+ }
34
+ }
35
+ }
36
+ return fn({
37
+ ...unchainedContext,
38
+ ...newContext,
39
+ });
40
+ };
41
+ };
42
+ //# sourceMappingURL=withAccessToken.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"withAccessToken.js","sourceRoot":"","sources":["../../src/context/withAccessToken.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAEzC,MAAM,MAAM,GAAG,YAAY,CAAC,oBAAoB,CAAC,CAAC;AAElD,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC;AAE3C,eAAe,CAAC,KAAgC,eAAe,EAAO,EAAE;IACtE,OAAO,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,EAAE;QAC1C,MAAM,gBAAgB,GAAG,MAAM,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAC1D,MAAM,UAAU,GAAG;YACjB,MAAM,EAAE,gBAAgB,CAAC,MAAM;YAC/B,IAAI,EAAE,gBAAgB,CAAC,IAAI;SAC5B,CAAC;QACF,IAAI,CAAC,gBAAgB,CAAC,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;YACjE,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACtE,IAAI,IAAI,KAAK,QAAQ,IAAI,SAAS,EAAE,CAAC;gBACnC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAChD,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;oBACzD,QAAQ;iBACT,CAAC,CAAC;gBAEH,IAAI,MAAM,IAAI,IAAI,EAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;oBAC3C,IAAI,CAAC;wBACH,IAAI,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;4BACpF,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC;4BAC7B,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC;4BACvB,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;wBACtC,CAAC;6BAAM,CAAC;4BACN,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;wBAC5C,CAAC;oBACH,CAAC;oBAAC,OAAO,CAAC,EAAE,CAAC;wBACX,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;oBAClD,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,EAAE,CAAC;YACR,GAAG,gBAAgB;YACnB,GAAG,UAAU;SACd,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC,CAAC"}
@@ -11,8 +11,9 @@ export interface SetupWorkqueueOptions extends IntervalWorkerParams, FailedResch
11
11
  }
12
12
  export declare const defaultQueueManagers: WorkQueueQueueManager[];
13
13
  export declare const queueWorkers: any[];
14
- export declare const setupWorkqueue: ({ unchainedAPI, migrationRepository, ...workQueueOptions }: {
14
+ export declare function setupWorkqueue({ unchainedAPI, migrationRepository, ...workQueueOptions }: {
15
15
  unchainedAPI: UnchainedCore;
16
16
  migrationRepository: MigrationRepository<UnchainedCore>;
17
- } & SetupWorkqueueOptions) => Promise<void>;
17
+ } & SetupWorkqueueOptions): Promise<void>;
18
+ export declare function stopWorkqueue(): void;
18
19
  //# sourceMappingURL=setupWorkqueue.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"setupWorkqueue.d.ts","sourceRoot":"","sources":["../../src/setup/setupWorkqueue.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,uBAAuB,EAEvB,oBAAoB,EACpB,UAAU,EACV,OAAO,EACP,aAAa,EACd,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE7D,MAAM,MAAM,qBAAqB,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;AACnE,MAAM,WAAW,qBAAsB,SAAQ,oBAAoB,EAAE,uBAAuB;IAC1F,oBAAoB,CAAC,EAAE,qBAAqB,EAAE,CAAC;IAC/C,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,8BAA8B,CAAC,EAAE,MAAM,CAAC;IACxC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,yBAAyB,CAAC,EAAE,OAAO,CAAC;CACrC;AAQD,eAAO,MAAM,oBAAoB,EAAE,qBAAqB,EAIvD,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,GAAG,EAAO,CAAC;AAEtC,eAAO,MAAM,cAAc,GAAU,4DAIlC;IACD,YAAY,EAAE,aAAa,CAAC;IAC5B,mBAAmB,EAAE,mBAAmB,CAAC,aAAa,CAAC,CAAC;CACzD,GAAG,qBAAqB,kBA4CxB,CAAC"}
1
+ {"version":3,"file":"setupWorkqueue.d.ts","sourceRoot":"","sources":["../../src/setup/setupWorkqueue.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,uBAAuB,EAEvB,oBAAoB,EACpB,UAAU,EACV,OAAO,EACP,aAAa,EACd,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAG7D,MAAM,MAAM,qBAAqB,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;AACnE,MAAM,WAAW,qBAAsB,SAAQ,oBAAoB,EAAE,uBAAuB;IAC1F,oBAAoB,CAAC,EAAE,qBAAqB,EAAE,CAAC;IAC/C,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,8BAA8B,CAAC,EAAE,MAAM,CAAC;IACxC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,yBAAyB,CAAC,EAAE,OAAO,CAAC;CACrC;AAQD,eAAO,MAAM,oBAAoB,EAAE,qBAAqB,EAIvD,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,GAAG,EAAO,CAAC;AAEtC,wBAAsB,cAAc,CAAC,EACnC,YAAY,EACZ,mBAAmB,EACnB,GAAG,gBAAgB,EACpB,EAAE;IACD,YAAY,EAAE,aAAa,CAAC;IAC5B,mBAAmB,EAAE,mBAAmB,CAAC,aAAa,CAAC,CAAC;CACzD,GAAG,qBAAqB,iBA4CxB;AAED,wBAAgB,aAAa,SAK5B"}
@@ -1,5 +1,6 @@
1
1
  import { EventListenerWorker, FailedRescheduler, IntervalWorker, } from '@unchainedshop/core';
2
2
  import { runMigrations } from '../migrations/runMigrations.js';
3
+ import { setImmediate } from 'node:timers/promises';
3
4
  const { UNCHAINED_DISABLE_PROVIDER_INVALIDATION, UNCHAINED_DISABLE_WORKER, UNCHAINED_ASSIGN_CART_FOR_USERS, } = process.env;
4
5
  export const defaultQueueManagers = [
5
6
  FailedRescheduler,
@@ -7,7 +8,7 @@ export const defaultQueueManagers = [
7
8
  IntervalWorker,
8
9
  ];
9
10
  export const queueWorkers = [];
10
- export const setupWorkqueue = async ({ unchainedAPI, migrationRepository, ...workQueueOptions }) => {
11
+ export async function setupWorkqueue({ unchainedAPI, migrationRepository, ...workQueueOptions }) {
11
12
  if (workQueueOptions.disableWorker || UNCHAINED_DISABLE_WORKER)
12
13
  return;
13
14
  // Run migrations
@@ -38,7 +39,13 @@ export const setupWorkqueue = async ({ unchainedAPI, migrationRepository, ...wor
38
39
  }
39
40
  // Setup filter cache
40
41
  if (!workQueueOptions?.skipInvalidationOnStartup) {
41
- setImmediate(() => unchainedAPI.services.filters.invalidateFilterCache());
42
+ await setImmediate(async () => unchainedAPI.services.filters.invalidateFilterCache());
42
43
  }
43
- };
44
+ }
45
+ export function stopWorkqueue() {
46
+ queueWorkers.forEach((worker) => {
47
+ worker?.stop();
48
+ });
49
+ queueWorkers.length = 0;
50
+ }
44
51
  //# sourceMappingURL=setupWorkqueue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"setupWorkqueue.js","sourceRoot":"","sources":["../../src/setup/setupWorkqueue.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EAEjB,cAAc,GAKf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAa/D,MAAM,EACJ,uCAAuC,EACvC,wBAAwB,EACxB,+BAA+B,GAChC,GAAG,OAAO,CAAC,GAAG,CAAC;AAEhB,MAAM,CAAC,MAAM,oBAAoB,GAA4B;IAC3D,iBAAiB;IACjB,mBAAmB;IACnB,cAAc;CACf,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAU,EAAE,CAAC;AAEtC,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAAE,EACnC,YAAY,EACZ,mBAAmB,EACnB,GAAG,gBAAgB,EAII,EAAE,EAAE;IAC3B,IAAI,gBAAgB,CAAC,aAAa,IAAI,wBAAwB;QAAE,OAAO;IAEvE,iBAAiB;IACjB,MAAM,aAAa,CAAC,EAAE,mBAAmB,EAAE,YAAY,EAAE,CAAC,CAAC;IAE3D,uBAAuB;IACvB,CAAC,gBAAgB,EAAE,oBAAoB,IAAI,oBAAoB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;QAC7E,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;QAC1D,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3B,OAAO,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,gCAAgC;IAChC,IAAI,gBAAgB,CAAC,mBAAmB,IAAI,CAAC,uCAAuC,EAAE,CAAC;QACrF,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,qBAAqB,CACpE,gBAAgB,CAAC,8BAA8B,CAChD,CAAC;QACF,MAAM,OAAO,CAAC,UAAU,CACtB,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACzB,MAAM,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAClE,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IAED,0BAA0B;IAC1B,IAAI,gBAAgB,CAAC,kBAAkB,IAAI,OAAO,CAAC,+BAA+B,CAAC,EAAE,CAAC;QACpF,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAE7D,MAAM,OAAO,CAAC,GAAG,CACf,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACjB,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAC3D,OAAO,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC;gBAC/C,IAAI;gBACJ,WAAW,EAAE,MAAM,CAAC,MAAM;aAC3B,CAAC,CAAC;QACL,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IAED,qBAAqB;IACrB,IAAI,CAAC,gBAAgB,EAAE,yBAAyB,EAAE,CAAC;QACjD,YAAY,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAC;IAC5E,CAAC;AACH,CAAC,CAAC"}
1
+ {"version":3,"file":"setupWorkqueue.js","sourceRoot":"","sources":["../../src/setup/setupWorkqueue.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EAEjB,cAAc,GAKf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAE/D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAYpD,MAAM,EACJ,uCAAuC,EACvC,wBAAwB,EACxB,+BAA+B,GAChC,GAAG,OAAO,CAAC,GAAG,CAAC;AAEhB,MAAM,CAAC,MAAM,oBAAoB,GAA4B;IAC3D,iBAAiB;IACjB,mBAAmB;IACnB,cAAc;CACf,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAU,EAAE,CAAC;AAEtC,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,EACnC,YAAY,EACZ,mBAAmB,EACnB,GAAG,gBAAgB,EAII;IACvB,IAAI,gBAAgB,CAAC,aAAa,IAAI,wBAAwB;QAAE,OAAO;IAEvE,iBAAiB;IACjB,MAAM,aAAa,CAAC,EAAE,mBAAmB,EAAE,YAAY,EAAE,CAAC,CAAC;IAE3D,uBAAuB;IACvB,CAAC,gBAAgB,EAAE,oBAAoB,IAAI,oBAAoB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;QAC7E,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;QAC1D,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3B,OAAO,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,gCAAgC;IAChC,IAAI,gBAAgB,CAAC,mBAAmB,IAAI,CAAC,uCAAuC,EAAE,CAAC;QACrF,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,qBAAqB,CACpE,gBAAgB,CAAC,8BAA8B,CAChD,CAAC;QACF,MAAM,OAAO,CAAC,UAAU,CACtB,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACzB,MAAM,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAClE,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IAED,0BAA0B;IAC1B,IAAI,gBAAgB,CAAC,kBAAkB,IAAI,OAAO,CAAC,+BAA+B,CAAC,EAAE,CAAC;QACpF,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAE7D,MAAM,OAAO,CAAC,GAAG,CACf,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACjB,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAC3D,OAAO,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC;gBAC/C,IAAI;gBACJ,WAAW,EAAE,MAAM,CAAC,MAAM;aAC3B,CAAC,CAAC;QACL,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IAED,qBAAqB;IACrB,IAAI,CAAC,gBAAgB,EAAE,yBAAyB,EAAE,CAAC;QACjD,MAAM,YAAY,CAAC,KAAK,IAAI,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAC;IACxF,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,YAAY,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;QAC9B,MAAM,EAAE,IAAI,EAAE,CAAC;IACjB,CAAC,CAAC,CAAC;IACH,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;AAC1B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"startPlatform.d.ts","sourceRoot":"","sources":["../src/startPlatform.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAY,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAAU,OAAO,EAAU,MAAM,wBAAwB,CAAC;AAEjE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAA6B,MAAM,uCAAuC,CAAC;AAGrG,OAAO,EAAkB,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAkB,MAAM,2BAA2B,CAAC;AAElF,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,CAAC;AAExB,MAAM,MAAM,eAAe,GAAG;IAC5B,YAAY,CAAC,EAAE;QACb,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;KAC9C,CAAC;IACF,YAAY,CAAC,EAAE,iBAAiB,CAAC;IACjC,gBAAgB,CAAC,EAAE,qBAAqB,CAAC;CAC1C,GAAG,IAAI,CAAC,oBAAoB,EAAE,cAAc,GAAG,qBAAqB,GAAG,IAAI,CAAC,GAC3E,IAAI,CAAC,sBAAsB,EAAE,OAAO,GAAG,cAAc,CAAC,CAAC;AA2BzD,eAAO,MAAM,aAAa,GAAU,uIAQjC,eAAe,KAAG,OAAO,CAAC;IAC3B,YAAY,EAAE,aAAa,CAAC;IAC5B,cAAc,EAAE,GAAG,CAAC;IACpB,EAAE,EAAE,OAAO,CAAC,EAAE,CAAC;CAChB,CAsEA,CAAC"}
1
+ {"version":3,"file":"startPlatform.d.ts","sourceRoot":"","sources":["../src/startPlatform.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAY,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAAU,OAAO,EAAU,MAAM,wBAAwB,CAAC;AAEjE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAA6B,MAAM,uCAAuC,CAAC;AAGrG,OAAO,EAAkB,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAiC,MAAM,2BAA2B,CAAC;AAEjG,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,OAAO,EAAE,YAAY,EAAE,CAAC;AAExB,MAAM,MAAM,eAAe,GAAG;IAC5B,YAAY,CAAC,EAAE;QACb,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;KAC9C,CAAC;IACF,YAAY,CAAC,EAAE,iBAAiB,CAAC;IACjC,gBAAgB,CAAC,EAAE,qBAAqB,CAAC;CAC1C,GAAG,IAAI,CAAC,oBAAoB,EAAE,cAAc,GAAG,qBAAqB,GAAG,IAAI,CAAC,GAC3E,IAAI,CAAC,sBAAsB,EAAE,OAAO,GAAG,cAAc,CAAC,CAAC;AA2BzD,eAAO,MAAM,aAAa,GAAU,uIAQjC,eAAe,KAAG,OAAO,CAAC;IAC3B,YAAY,EAAE,aAAa,CAAC;IAC5B,cAAc,EAAE,GAAG,CAAC;IACpB,EAAE,EAAE,OAAO,CAAC,EAAE,CAAC;CAChB,CAkEA,CAAC"}
@@ -6,7 +6,7 @@ import { createBulkImporterFactory } from './bulk-importer/createBulkImporter.js
6
6
  import { setupAccounts } from './setup/setupAccounts.js';
7
7
  import { setupUploadHandlers } from './setup/setupUploadHandlers.js';
8
8
  import { setupTemplates, MessageTypes } from './setup/setupTemplates.js';
9
- import { setupWorkqueue } from './setup/setupWorkqueue.js';
9
+ import { stopWorkqueue, setupWorkqueue } from './setup/setupWorkqueue.js';
10
10
  import { createMigrationRepository } from './migrations/migrationRepository.js';
11
11
  export { MessageTypes };
12
12
  const REQUIRED_ENV_VARIABLES = [
@@ -69,22 +69,18 @@ export const startPlatform = async ({ modules, services, options, rolesOptions =
69
69
  with: { type: 'json' },
70
70
  });
71
71
  defaultLogger.info(`Unchained Engine running`, { version: packageJson.version });
72
- process.on('SIGTERM', async () => {
73
- defaultLogger.info('Stopping GraphQL server (SIGTERM)');
72
+ const cleanup = (signal) => async () => {
73
+ defaultLogger.debug('Stopping Workqueue', { signal });
74
+ stopWorkqueue();
75
+ defaultLogger.debug('Stopping GraphQL server', { signal });
74
76
  await graphqlHandler.dispose();
75
- defaultLogger.info('Stopping DB Connection (SIGTERM)');
77
+ defaultLogger.debug('Stopping DB Connection', { signal });
76
78
  await stopDb();
77
- defaultLogger.info(`Unchained Engine stopped`, { version: packageJson.version });
79
+ defaultLogger.info(`Unchained Engine stopped`, { signal, version: packageJson.version });
78
80
  process.exit(0);
79
- });
80
- process.on('SIGINT', async () => {
81
- defaultLogger.info('Stopping GraphQL server (SIGINT)');
82
- await graphqlHandler.dispose();
83
- defaultLogger.info('Stopping DB Connection (SIGINT)');
84
- await stopDb();
85
- defaultLogger.info(`Unchained Engine stopped`, { version: packageJson.version });
86
- process.exit(0);
87
- });
81
+ };
82
+ process.on('SIGTERM', cleanup('SIGTERM'));
83
+ process.on('SIGINT', cleanup('SIGINT'));
88
84
  return { unchainedAPI, graphqlHandler, db };
89
85
  };
90
86
  //# sourceMappingURL=startPlatform.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"startPlatform.js","sourceRoot":"","sources":["../src/startPlatform.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"startPlatform.js","sourceRoot":"","sources":["../src/startPlatform.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Address } from '@unchainedshop/types/common.js';
2
+ export declare const formatAddress: (address: Address) => string;
3
+ //# sourceMappingURL=formatAddress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatAddress.d.ts","sourceRoot":"","sources":["../../../src/templates/order-parser/formatAddress.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAEzD,eAAO,MAAM,aAAa,YAAa,OAAO,WAY7C,CAAC"}
@@ -0,0 +1,14 @@
1
+ export const formatAddress = (address) => {
2
+ return [
3
+ [address.firstName, address.lastName].filter(Boolean).join(' '),
4
+ address.company,
5
+ address.addressLine,
6
+ address.addressLine2,
7
+ [address.postalCode, address.city].filter(Boolean).join(' '),
8
+ address.regionCode,
9
+ [address.countryCode].filter(Boolean).join(''),
10
+ ]
11
+ .filter(Boolean)
12
+ .join('\n');
13
+ };
14
+ //# sourceMappingURL=formatAddress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatAddress.js","sourceRoot":"","sources":["../../../src/templates/order-parser/formatAddress.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,OAAgB,EAAE,EAAE;IAChD,OAAO;QACL,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QAC/D,OAAO,CAAC,OAAO;QACf,OAAO,CAAC,WAAW;QACnB,OAAO,CAAC,YAAY;QACpB,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QAC5D,OAAO,CAAC,UAAU;QAClB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;KAC/C;SACE,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ export declare const formatPrice: ({ amount, currency }: {
2
+ amount: number;
3
+ currency: string;
4
+ }) => string;
5
+ export default formatPrice;
6
+ //# sourceMappingURL=formatPrice.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatPrice.d.ts","sourceRoot":"","sources":["../../../src/templates/order-parser/formatPrice.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,yBAA0B;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,WAGrF,CAAC;AAEF,eAAe,WAAW,CAAC"}
@@ -0,0 +1,6 @@
1
+ export const formatPrice = ({ amount, currency }) => {
2
+ const fixedPrice = amount / 100;
3
+ return `${currency} ${fixedPrice}`;
4
+ };
5
+ export default formatPrice;
6
+ //# sourceMappingURL=formatPrice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatPrice.js","sourceRoot":"","sources":["../../../src/templates/order-parser/formatPrice.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAwC,EAAE,EAAE;IACxF,MAAM,UAAU,GAAG,MAAM,GAAG,GAAG,CAAC;IAChC,OAAO,GAAG,QAAQ,IAAI,UAAU,EAAE,CAAC;AACrC,CAAC,CAAC;AAEF,eAAe,WAAW,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unchainedshop/platform",
3
- "version": "4.0.0-rc.2",
3
+ "version": "4.0.0-rc.4",
4
4
  "main": "lib/platform-index.js",
5
5
  "types": "lib/platform-index.d.ts",
6
6
  "type": "module",
@@ -31,25 +31,27 @@
31
31
  },
32
32
  "homepage": "https://github.com/unchainedshop/unchained#readme",
33
33
  "engines": {
34
- "node": ">=22.0.0"
34
+ "node": ">=22.0.0",
35
+ "npm": ">=10.0.0"
35
36
  },
36
37
  "dependencies": {
37
- "@unchainedshop/api": "^4.0.0-rc.2",
38
- "@unchainedshop/core": "^4.0.0-rc.2",
39
- "@unchainedshop/events": "^4.0.0-rc.2",
40
- "@unchainedshop/file-upload": "^4.0.0-rc.2",
41
- "@unchainedshop/logger": "^4.0.0-rc.2",
42
- "@unchainedshop/mongodb": "^4.0.0-rc.2",
43
- "@unchainedshop/plugins": "^4.0.0-rc.2",
44
- "@unchainedshop/roles": "^4.0.0-rc.2",
45
- "@unchainedshop/utils": "^4.0.0-rc.2",
38
+ "@unchainedshop/api": "^4.0.0-rc.4",
39
+ "@unchainedshop/core": "^4.0.0-rc.4",
40
+ "@unchainedshop/events": "^4.0.0-rc.4",
41
+ "@unchainedshop/file-upload": "^4.0.0-rc.4",
42
+ "@unchainedshop/logger": "^4.0.0-rc.4",
43
+ "@unchainedshop/mongodb": "^4.0.0-rc.4",
44
+ "@unchainedshop/plugins": "^4.0.0-rc.4",
45
+ "@unchainedshop/roles": "^4.0.0-rc.4",
46
+ "@unchainedshop/utils": "^4.0.0-rc.4",
46
47
  "mustache": "^4.2.0",
47
- "safe-stable-stringify": "^2.5.0"
48
+ "safe-stable-stringify": "^2.5.0",
49
+ "ai": "^4.3.16"
48
50
  },
49
51
  "devDependencies": {
50
- "@types/mustache": "^4.2.5",
51
- "@types/node": "^22.15.3",
52
- "tsx": "^4.19.4",
52
+ "@types/mustache": "^4.2.6",
53
+ "@types/node": "^24.0.4",
54
+ "tsx": "^4.20.3",
53
55
  "typescript": "^5.8.3"
54
56
  }
55
57
  }
@@ -10,6 +10,7 @@ import {
10
10
  } from '@unchainedshop/core';
11
11
  import { runMigrations } from '../migrations/runMigrations.js';
12
12
  import { MigrationRepository } from '@unchainedshop/mongodb';
13
+ import { setImmediate } from 'node:timers/promises';
13
14
 
14
15
  export type WorkQueueQueueManager = IWorker<any> | IScheduler<any>;
15
16
  export interface SetupWorkqueueOptions extends IntervalWorkerParams, FailedReschedulerParams {
@@ -35,14 +36,14 @@ export const defaultQueueManagers: WorkQueueQueueManager[] = [
35
36
 
36
37
  export const queueWorkers: any[] = [];
37
38
 
38
- export const setupWorkqueue = async ({
39
+ export async function setupWorkqueue({
39
40
  unchainedAPI,
40
41
  migrationRepository,
41
42
  ...workQueueOptions
42
43
  }: {
43
44
  unchainedAPI: UnchainedCore;
44
45
  migrationRepository: MigrationRepository<UnchainedCore>;
45
- } & SetupWorkqueueOptions) => {
46
+ } & SetupWorkqueueOptions) {
46
47
  if (workQueueOptions.disableWorker || UNCHAINED_DISABLE_WORKER) return;
47
48
 
48
49
  // Run migrations
@@ -84,6 +85,13 @@ export const setupWorkqueue = async ({
84
85
 
85
86
  // Setup filter cache
86
87
  if (!workQueueOptions?.skipInvalidationOnStartup) {
87
- setImmediate(() => unchainedAPI.services.filters.invalidateFilterCache());
88
+ await setImmediate(async () => unchainedAPI.services.filters.invalidateFilterCache());
88
89
  }
89
- };
90
+ }
91
+
92
+ export function stopWorkqueue() {
93
+ queueWorkers.forEach((worker) => {
94
+ worker?.stop();
95
+ });
96
+ queueWorkers.length = 0;
97
+ }
@@ -7,9 +7,10 @@ import { BulkImportHandler, createBulkImporterFactory } from './bulk-importer/cr
7
7
  import { setupAccounts } from './setup/setupAccounts.js';
8
8
  import { setupUploadHandlers } from './setup/setupUploadHandlers.js';
9
9
  import { setupTemplates, MessageTypes } from './setup/setupTemplates.js';
10
- import { SetupWorkqueueOptions, setupWorkqueue } from './setup/setupWorkqueue.js';
10
+ import { SetupWorkqueueOptions, stopWorkqueue, setupWorkqueue } from './setup/setupWorkqueue.js';
11
11
  import { createMigrationRepository } from './migrations/migrationRepository.js';
12
12
  import { IRoleOptionConfig } from '@unchainedshop/roles';
13
+
13
14
  export { MessageTypes };
14
15
 
15
16
  export type PlatformOptions = {
@@ -109,23 +110,19 @@ export const startPlatform = async ({
109
110
  });
110
111
  defaultLogger.info(`Unchained Engine running`, { version: packageJson.version });
111
112
 
112
- process.on('SIGTERM', async () => {
113
- defaultLogger.info('Stopping GraphQL server (SIGTERM)');
113
+ const cleanup = (signal) => async () => {
114
+ defaultLogger.debug('Stopping Workqueue', { signal });
115
+ stopWorkqueue();
116
+ defaultLogger.debug('Stopping GraphQL server', { signal });
114
117
  await graphqlHandler.dispose();
115
- defaultLogger.info('Stopping DB Connection (SIGTERM)');
118
+ defaultLogger.debug('Stopping DB Connection', { signal });
116
119
  await stopDb();
117
- defaultLogger.info(`Unchained Engine stopped`, { version: packageJson.version });
120
+ defaultLogger.info(`Unchained Engine stopped`, { signal, version: packageJson.version });
118
121
  process.exit(0);
119
- });
122
+ };
120
123
 
121
- process.on('SIGINT', async () => {
122
- defaultLogger.info('Stopping GraphQL server (SIGINT)');
123
- await graphqlHandler.dispose();
124
- defaultLogger.info('Stopping DB Connection (SIGINT)');
125
- await stopDb();
126
- defaultLogger.info(`Unchained Engine stopped`, { version: packageJson.version });
127
- process.exit(0);
128
- });
124
+ process.on('SIGTERM', cleanup('SIGTERM'));
125
+ process.on('SIGINT', cleanup('SIGINT'));
129
126
 
130
127
  return { unchainedAPI, graphqlHandler, db };
131
128
  };