@unchainedshop/platform 3.1.15 → 4.0.0-rc.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/bulk-importer/createBulkImporter.d.ts +3 -5
- package/lib/bulk-importer/createBulkImporter.d.ts.map +1 -1
- package/lib/bulk-importer/createBulkImporter.js.map +1 -1
- package/lib/platform-index.d.ts +1 -0
- package/lib/platform-index.d.ts.map +1 -1
- package/lib/platform-index.js +1 -0
- package/lib/platform-index.js.map +1 -1
- package/lib/setup/setupWorkqueue.d.ts +16 -12
- package/lib/setup/setupWorkqueue.d.ts.map +1 -1
- package/lib/setup/setupWorkqueue.js +50 -12
- package/lib/setup/setupWorkqueue.js.map +1 -1
- package/lib/startPlatform.d.ts +1 -5
- package/lib/startPlatform.d.ts.map +1 -1
- package/lib/startPlatform.js +20 -33
- package/lib/startPlatform.js.map +1 -1
- package/lib/templates/order-parser/getOrderPositionsData.d.ts +4 -4
- package/lib/templates/order-parser/getOrderPositionsData.d.ts.map +1 -1
- package/lib/templates/order-parser/getOrderPositionsData.js +1 -1
- package/lib/templates/order-parser/getOrderPositionsData.js.map +1 -1
- package/lib/templates/order-parser/getOrderSummaryData.d.ts +8 -8
- package/lib/templates/order-parser/getOrderSummaryData.d.ts.map +1 -1
- package/lib/templates/order-parser/getOrderSummaryData.js +1 -1
- package/lib/templates/order-parser/getOrderSummaryData.js.map +1 -1
- package/lib/templates/order-parser/index.d.ts +1 -1
- package/lib/templates/order-parser/index.d.ts.map +1 -1
- package/lib/templates/order-parser/index.js.map +1 -1
- package/lib/templates/resolveForwardDeliveryTemplate.js +1 -1
- package/lib/templates/resolveForwardDeliveryTemplate.js.map +1 -1
- package/lib/templates/resolveOrderConfirmationTemplate.js +1 -1
- package/lib/templates/resolveOrderConfirmationTemplate.js.map +1 -1
- package/lib/templates/resolveOrderRejectionTemplate.js +1 -1
- package/lib/templates/resolveOrderRejectionTemplate.js.map +1 -1
- package/package.json +11 -11
- package/src/bulk-importer/createBulkImporter.ts +3 -5
- package/src/platform-index.ts +1 -0
- package/src/setup/setupWorkqueue.ts +94 -26
- package/src/startPlatform.ts +23 -39
- package/src/templates/order-parser/getOrderPositionsData.ts +3 -3
- package/src/templates/order-parser/getOrderSummaryData.ts +3 -3
- package/src/templates/order-parser/index.ts +1 -1
- package/src/templates/resolveForwardDeliveryTemplate.ts +1 -1
- package/src/templates/resolveOrderConfirmationTemplate.ts +1 -1
- package/src/templates/resolveOrderRejectionTemplate.ts +1 -1
- package/lib/context/withAccessToken.d.ts +0 -4
- package/lib/context/withAccessToken.d.ts.map +0 -1
- package/lib/context/withAccessToken.js +0 -42
- package/lib/context/withAccessToken.js.map +0 -1
- package/lib/setup/setupCarts.d.ts +0 -8
- package/lib/setup/setupCarts.d.ts.map +0 -1
- package/lib/setup/setupCarts.js +0 -20
- package/lib/setup/setupCarts.js.map +0 -1
- package/lib/templates/order-parser/formatAddress.d.ts +0 -3
- package/lib/templates/order-parser/formatAddress.d.ts.map +0 -1
- package/lib/templates/order-parser/formatAddress.js +0 -14
- package/lib/templates/order-parser/formatAddress.js.map +0 -1
- package/lib/templates/order-parser/formatPrice.d.ts +0 -6
- package/lib/templates/order-parser/formatPrice.d.ts.map +0 -1
- package/lib/templates/order-parser/formatPrice.js +0 -6
- package/lib/templates/order-parser/formatPrice.js.map +0 -1
- package/src/setup/setupCarts.ts +0 -35
|
@@ -7,11 +7,11 @@ import { createLogger } from '@unchainedshop/logger';
|
|
|
7
7
|
|
|
8
8
|
const logger = createLogger('unchained:bulk-import');
|
|
9
9
|
|
|
10
|
-
export
|
|
10
|
+
export interface BulkImportOperationResult {
|
|
11
11
|
entity: string;
|
|
12
12
|
operation: string;
|
|
13
13
|
success: boolean;
|
|
14
|
-
}
|
|
14
|
+
}
|
|
15
15
|
export type BulkImportOperation = (
|
|
16
16
|
payload: any,
|
|
17
17
|
options: {
|
|
@@ -23,9 +23,7 @@ export type BulkImportOperation = (
|
|
|
23
23
|
unchainedAPI: UnchainedCore,
|
|
24
24
|
) => Promise<BulkImportOperationResult>;
|
|
25
25
|
|
|
26
|
-
export type BulkImportHandler =
|
|
27
|
-
[x: string]: BulkImportOperation;
|
|
28
|
-
};
|
|
26
|
+
export type BulkImportHandler = Record<string, BulkImportOperation>;
|
|
29
27
|
|
|
30
28
|
let bulkOperationHandlers: Record<string, BulkImportHandler> = {};
|
|
31
29
|
|
package/src/platform-index.ts
CHANGED
|
@@ -2,6 +2,7 @@ export * from './startPlatform.js';
|
|
|
2
2
|
export * from './context/index.js';
|
|
3
3
|
export * from './bulk-importer/createBulkImporter.js';
|
|
4
4
|
export * from './templates/index.js';
|
|
5
|
+
export * from './migrations/runMigrations.js';
|
|
5
6
|
|
|
6
7
|
import { MessagingDirector, getAllAdapters } from '@unchainedshop/core';
|
|
7
8
|
import { getRegisteredEvents } from '@unchainedshop/events';
|
|
@@ -1,29 +1,97 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
import {
|
|
2
|
+
EventListenerWorker,
|
|
3
|
+
FailedRescheduler,
|
|
4
|
+
FailedReschedulerParams,
|
|
5
|
+
IntervalWorker,
|
|
6
|
+
IntervalWorkerParams,
|
|
7
|
+
IScheduler,
|
|
8
|
+
IWorker,
|
|
9
|
+
UnchainedCore,
|
|
10
|
+
} from '@unchainedshop/core';
|
|
11
|
+
import { runMigrations } from '../migrations/runMigrations.js';
|
|
12
|
+
import { MigrationRepository } from '@unchainedshop/mongodb';
|
|
13
|
+
import { setImmediate } from 'node:timers/promises';
|
|
14
|
+
|
|
15
|
+
export type WorkQueueQueueManager = IWorker<any> | IScheduler<any>;
|
|
16
|
+
export interface SetupWorkqueueOptions extends IntervalWorkerParams, FailedReschedulerParams {
|
|
17
|
+
enabledQueueManagers?: WorkQueueQueueManager[];
|
|
18
|
+
invalidateProviders?: boolean;
|
|
19
|
+
providerInvalidationMaxAgeDays?: number;
|
|
20
|
+
assignCartForUsers?: boolean;
|
|
8
21
|
disableWorker?: boolean;
|
|
9
|
-
|
|
10
|
-
workerId?: string;
|
|
11
|
-
retryInput?: (
|
|
12
|
-
workData: WorkData,
|
|
13
|
-
priorInput: Record<string, any>,
|
|
14
|
-
) => Promise<Record<string, any> | null>;
|
|
22
|
+
skipInvalidationOnStartup?: boolean;
|
|
15
23
|
}
|
|
16
24
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
25
|
+
const {
|
|
26
|
+
UNCHAINED_DISABLE_PROVIDER_INVALIDATION,
|
|
27
|
+
UNCHAINED_DISABLE_WORKER,
|
|
28
|
+
UNCHAINED_ASSIGN_CART_FOR_USERS,
|
|
29
|
+
} = process.env;
|
|
30
|
+
|
|
31
|
+
export const defaultQueueManagers: WorkQueueQueueManager[] = [
|
|
32
|
+
FailedRescheduler,
|
|
33
|
+
EventListenerWorker,
|
|
34
|
+
IntervalWorker,
|
|
35
|
+
];
|
|
36
|
+
|
|
37
|
+
export const queueWorkers: any[] = [];
|
|
38
|
+
|
|
39
|
+
export async function setupWorkqueue({
|
|
40
|
+
unchainedAPI,
|
|
41
|
+
migrationRepository,
|
|
42
|
+
...workQueueOptions
|
|
43
|
+
}: {
|
|
44
|
+
unchainedAPI: UnchainedCore;
|
|
45
|
+
migrationRepository: MigrationRepository<UnchainedCore>;
|
|
46
|
+
} & SetupWorkqueueOptions) {
|
|
47
|
+
if (workQueueOptions.disableWorker || UNCHAINED_DISABLE_WORKER) return;
|
|
48
|
+
|
|
49
|
+
// Run migrations
|
|
50
|
+
await runMigrations({ migrationRepository, unchainedAPI });
|
|
51
|
+
|
|
52
|
+
// Start queue managers
|
|
53
|
+
(workQueueOptions?.enabledQueueManagers || defaultQueueManagers).forEach((f) => {
|
|
54
|
+
const handler = f.actions(workQueueOptions, unchainedAPI);
|
|
55
|
+
queueWorkers.push(handler);
|
|
56
|
+
handler.start();
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
// Invalidate providers on carts
|
|
60
|
+
if (workQueueOptions.invalidateProviders ?? !UNCHAINED_DISABLE_PROVIDER_INVALIDATION) {
|
|
61
|
+
const orders = await unchainedAPI.modules.orders.findCartsToInvalidate(
|
|
62
|
+
workQueueOptions.providerInvalidationMaxAgeDays,
|
|
63
|
+
);
|
|
64
|
+
await Promise.allSettled(
|
|
65
|
+
orders.map(async (order) => {
|
|
66
|
+
await unchainedAPI.services.orders.updateCalculation(order._id);
|
|
67
|
+
}),
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// Ensure users have carts
|
|
72
|
+
if (workQueueOptions.assignCartForUsers ?? Boolean(UNCHAINED_ASSIGN_CART_FOR_USERS)) {
|
|
73
|
+
const users = await unchainedAPI.modules.users.findUsers({});
|
|
74
|
+
|
|
75
|
+
await Promise.all(
|
|
76
|
+
users.map((user) => {
|
|
77
|
+
const locale = unchainedAPI.modules.users.userLocale(user);
|
|
78
|
+
return unchainedAPI.services.orders.nextUserCart({
|
|
79
|
+
user,
|
|
80
|
+
countryCode: locale.region,
|
|
81
|
+
});
|
|
82
|
+
}),
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// Setup filter cache
|
|
87
|
+
if (!workQueueOptions?.skipInvalidationOnStartup) {
|
|
88
|
+
await setImmediate(async () => unchainedAPI.services.filters.invalidateFilterCache());
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export function stopWorkqueue() {
|
|
93
|
+
queueWorkers.forEach((worker) => {
|
|
94
|
+
worker?.stop();
|
|
95
|
+
});
|
|
96
|
+
queueWorkers.length = 0;
|
|
97
|
+
}
|
package/src/startPlatform.ts
CHANGED
|
@@ -4,14 +4,13 @@ import { initDb, mongodb, stopDb } from '@unchainedshop/mongodb';
|
|
|
4
4
|
import { defaultLogger } from '@unchainedshop/logger';
|
|
5
5
|
import { UnchainedCore } from '@unchainedshop/core';
|
|
6
6
|
import { BulkImportHandler, createBulkImporterFactory } from './bulk-importer/createBulkImporter.js';
|
|
7
|
-
import { runMigrations } from './migrations/runMigrations.js';
|
|
8
7
|
import { setupAccounts } from './setup/setupAccounts.js';
|
|
9
8
|
import { setupUploadHandlers } from './setup/setupUploadHandlers.js';
|
|
10
|
-
import { SetupCartsOptions, setupCarts } from './setup/setupCarts.js';
|
|
11
9
|
import { setupTemplates, MessageTypes } from './setup/setupTemplates.js';
|
|
12
|
-
import { SetupWorkqueueOptions, setupWorkqueue } from './setup/setupWorkqueue.js';
|
|
10
|
+
import { SetupWorkqueueOptions, stopWorkqueue, setupWorkqueue } from './setup/setupWorkqueue.js';
|
|
13
11
|
import { createMigrationRepository } from './migrations/migrationRepository.js';
|
|
14
12
|
import { IRoleOptionConfig } from '@unchainedshop/roles';
|
|
13
|
+
|
|
15
14
|
export { MessageTypes };
|
|
16
15
|
|
|
17
16
|
export type PlatformOptions = {
|
|
@@ -19,7 +18,7 @@ export type PlatformOptions = {
|
|
|
19
18
|
handlers?: Record<string, BulkImportHandler>;
|
|
20
19
|
};
|
|
21
20
|
rolesOptions?: IRoleOptionConfig;
|
|
22
|
-
workQueueOptions?: SetupWorkqueueOptions
|
|
21
|
+
workQueueOptions?: SetupWorkqueueOptions;
|
|
23
22
|
} & Omit<UnchainedCoreOptions, 'bulkImporter' | 'migrationRepository' | 'db'> &
|
|
24
23
|
Omit<UnchainedServerOptions, 'roles' | 'unchainedAPI'>;
|
|
25
24
|
|
|
@@ -31,8 +30,6 @@ const REQUIRED_ENV_VARIABLES = [
|
|
|
31
30
|
'UNCHAINED_TOKEN_SECRET',
|
|
32
31
|
];
|
|
33
32
|
|
|
34
|
-
const { UNCHAINED_DISABLE_WORKER } = process.env;
|
|
35
|
-
|
|
36
33
|
const exitOnMissingEnvironmentVariables = () => {
|
|
37
34
|
const failedEnv = REQUIRED_ENV_VARIABLES.filter((key) => !process.env[key]);
|
|
38
35
|
if (failedEnv.length > 0) {
|
|
@@ -50,13 +47,6 @@ const existOnInvalidEnvironmentVariables = () => {
|
|
|
50
47
|
}
|
|
51
48
|
};
|
|
52
49
|
|
|
53
|
-
const checkWorkQueueEnabled = (options: SetupWorkqueueOptions) => {
|
|
54
|
-
if (options?.disableWorker) return false;
|
|
55
|
-
return !UNCHAINED_DISABLE_WORKER;
|
|
56
|
-
};
|
|
57
|
-
|
|
58
|
-
export const queueWorkers: Array<any> = [];
|
|
59
|
-
|
|
60
50
|
export const startPlatform = async ({
|
|
61
51
|
modules,
|
|
62
52
|
services,
|
|
@@ -73,8 +63,6 @@ export const startPlatform = async ({
|
|
|
73
63
|
exitOnMissingEnvironmentVariables();
|
|
74
64
|
existOnInvalidEnvironmentVariables();
|
|
75
65
|
|
|
76
|
-
const isWorkQueueEnabled = checkWorkQueueEnabled(workQueueOptions);
|
|
77
|
-
|
|
78
66
|
const configuredRoles = roles.configureRoles(rolesOptions);
|
|
79
67
|
|
|
80
68
|
// Configure database
|
|
@@ -94,51 +82,47 @@ export const startPlatform = async ({
|
|
|
94
82
|
options,
|
|
95
83
|
});
|
|
96
84
|
|
|
97
|
-
|
|
98
|
-
await runMigrations({ migrationRepository, unchainedAPI });
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
// Setup accountsjs specific extensions and event handlers
|
|
85
|
+
// Setup Accounts specific extensions and event handlers
|
|
102
86
|
setupAccounts(unchainedAPI);
|
|
103
87
|
|
|
104
|
-
// Setup
|
|
88
|
+
// Setup Messaging Templates
|
|
105
89
|
setupTemplates(unchainedAPI);
|
|
106
90
|
|
|
107
|
-
// Setup
|
|
91
|
+
// Setup File Upload Handlers
|
|
108
92
|
setupUploadHandlers(unchainedAPI);
|
|
109
93
|
|
|
110
|
-
// Start
|
|
94
|
+
// Start GraphQL Server
|
|
111
95
|
const graphqlHandler = await startAPIServer({
|
|
112
96
|
unchainedAPI,
|
|
113
97
|
roles: configuredRoles,
|
|
114
98
|
...arbitraryAPIServerConfiguration,
|
|
115
99
|
});
|
|
116
100
|
|
|
117
|
-
// Setup
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
// Setup filter cache
|
|
125
|
-
if (!workQueueOptions?.skipInvalidationOnStartup) {
|
|
126
|
-
setImmediate(() => unchainedAPI.services.filters.invalidateFilterCache());
|
|
127
|
-
}
|
|
101
|
+
// Setup Work Queue
|
|
102
|
+
await setupWorkqueue({
|
|
103
|
+
unchainedAPI,
|
|
104
|
+
migrationRepository,
|
|
105
|
+
...workQueueOptions,
|
|
106
|
+
});
|
|
128
107
|
|
|
129
108
|
const { default: packageJson } = await import(`${import.meta.dirname}/../package.json`, {
|
|
130
109
|
with: { type: 'json' },
|
|
131
110
|
});
|
|
132
111
|
defaultLogger.info(`Unchained Engine running`, { version: packageJson.version });
|
|
133
112
|
|
|
134
|
-
|
|
135
|
-
defaultLogger.
|
|
113
|
+
const cleanup = (signal) => async () => {
|
|
114
|
+
defaultLogger.debug('Stopping Workqueue', { signal });
|
|
115
|
+
stopWorkqueue();
|
|
116
|
+
defaultLogger.debug('Stopping GraphQL server', { signal });
|
|
136
117
|
await graphqlHandler.dispose();
|
|
137
|
-
defaultLogger.
|
|
118
|
+
defaultLogger.debug('Stopping DB Connection', { signal });
|
|
138
119
|
await stopDb();
|
|
139
|
-
defaultLogger.info(`Unchained Engine stopped`, { version: packageJson.version });
|
|
120
|
+
defaultLogger.info(`Unchained Engine stopped`, { signal, version: packageJson.version });
|
|
140
121
|
process.exit(0);
|
|
141
|
-
}
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
process.on('SIGTERM', cleanup('SIGTERM'));
|
|
125
|
+
process.on('SIGINT', cleanup('SIGINT'));
|
|
142
126
|
|
|
143
127
|
return { unchainedAPI, graphqlHandler, db };
|
|
144
128
|
};
|
|
@@ -3,11 +3,11 @@ import { Order } from '@unchainedshop/core-orders';
|
|
|
3
3
|
import { ProductPricingSheet } from '@unchainedshop/core';
|
|
4
4
|
import { ch } from '@unchainedshop/utils';
|
|
5
5
|
|
|
6
|
-
type PriceFormatter = ({ amount,
|
|
6
|
+
type PriceFormatter = ({ amount, currencyCode }: { amount: number; currencyCode: string }) => string;
|
|
7
7
|
|
|
8
8
|
export const getOrderPositionsData = async (
|
|
9
9
|
order: Order,
|
|
10
|
-
params: { locale:
|
|
10
|
+
params: { locale: Intl.Locale; useNetPrice?: boolean; format?: PriceFormatter },
|
|
11
11
|
context: UnchainedCore,
|
|
12
12
|
) => {
|
|
13
13
|
const { modules } = context;
|
|
@@ -25,7 +25,7 @@ export const getOrderPositionsData = async (
|
|
|
25
25
|
|
|
26
26
|
const positionPricing = ProductPricingSheet({
|
|
27
27
|
calculation: orderPosition.calculation,
|
|
28
|
-
|
|
28
|
+
currencyCode: order.currencyCode,
|
|
29
29
|
quantity: orderPosition.quantity,
|
|
30
30
|
});
|
|
31
31
|
|
|
@@ -2,11 +2,11 @@ import { Order } from '@unchainedshop/core-orders';
|
|
|
2
2
|
import { UnchainedCore, OrderPricingSheet, OrderPricingRowCategory } from '@unchainedshop/core';
|
|
3
3
|
import { ch } from '@unchainedshop/utils';
|
|
4
4
|
|
|
5
|
-
type PriceFormatter = ({ amount,
|
|
5
|
+
type PriceFormatter = ({ amount, currencyCode }: { amount: number; currencyCode: string }) => string;
|
|
6
6
|
|
|
7
7
|
export const getOrderSummaryData = async (
|
|
8
8
|
order: Order,
|
|
9
|
-
params: { locale
|
|
9
|
+
params: { locale: Intl.Locale; useNetPrice?: boolean; format?: PriceFormatter },
|
|
10
10
|
context: UnchainedCore,
|
|
11
11
|
) => {
|
|
12
12
|
const { modules } = context;
|
|
@@ -30,7 +30,7 @@ export const getOrderSummaryData = async (
|
|
|
30
30
|
const billingAddress = ch.addressToString(order.billingAddress);
|
|
31
31
|
const orderPricing = OrderPricingSheet({
|
|
32
32
|
calculation: order.calculation,
|
|
33
|
-
|
|
33
|
+
currencyCode: order.currencyCode,
|
|
34
34
|
});
|
|
35
35
|
|
|
36
36
|
const paymentTotal = orderPricing.total({
|
|
@@ -36,7 +36,7 @@ Total: {{summary.prices.gross}}
|
|
|
36
36
|
`;
|
|
37
37
|
|
|
38
38
|
export const transformOrderToText = async (
|
|
39
|
-
{ order, locale }: { order: Order; locale:
|
|
39
|
+
{ order, locale }: { order: Order; locale: Intl.Locale },
|
|
40
40
|
context: UnchainedCore,
|
|
41
41
|
) => {
|
|
42
42
|
return mustache.render(
|
|
@@ -31,7 +31,7 @@ export const resolveForwardDeliveryTemplate: TemplateResolver = async ({ config,
|
|
|
31
31
|
{
|
|
32
32
|
shopName: EMAIL_WEBSITE_NAME,
|
|
33
33
|
shopUrl: EMAIL_WEBSITE_URL,
|
|
34
|
-
orderDetails: await transformOrderToText({ order, locale: systemLocale
|
|
34
|
+
orderDetails: await transformOrderToText({ order, locale: systemLocale }, context),
|
|
35
35
|
},
|
|
36
36
|
undefined,
|
|
37
37
|
{ escape: (t) => t },
|
|
@@ -30,7 +30,7 @@ export const resolveOrderConfirmationTemplate: TemplateResolver<{
|
|
|
30
30
|
{
|
|
31
31
|
shopName: EMAIL_WEBSITE_NAME,
|
|
32
32
|
shopUrl: EMAIL_WEBSITE_URL,
|
|
33
|
-
orderDetails: await transformOrderToText({ order, locale }, context),
|
|
33
|
+
orderDetails: await transformOrderToText({ order, locale: new Intl.Locale(locale) }, context),
|
|
34
34
|
},
|
|
35
35
|
undefined,
|
|
36
36
|
{ escape: (t) => t },
|
|
@@ -31,7 +31,7 @@ export const resolveOrderRejectionTemplate: TemplateResolver = async ({ orderId,
|
|
|
31
31
|
{
|
|
32
32
|
shopName: EMAIL_WEBSITE_NAME,
|
|
33
33
|
shopUrl: EMAIL_WEBSITE_URL,
|
|
34
|
-
orderDetails: await transformOrderToText({ order, locale }, context),
|
|
34
|
+
orderDetails: await transformOrderToText({ order, locale: new Intl.Locale(locale) }, context),
|
|
35
35
|
},
|
|
36
36
|
undefined,
|
|
37
37
|
{ escape: (t) => t },
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,42 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { UnchainedCore } from '@unchainedshop/core';
|
|
2
|
-
export interface SetupCartsOptions {
|
|
3
|
-
invalidateProviders?: boolean;
|
|
4
|
-
providerInvalidationMaxAgeDays?: number;
|
|
5
|
-
assignCartForUsers?: boolean;
|
|
6
|
-
}
|
|
7
|
-
export declare const setupCarts: (unchainedAPI: UnchainedCore, options?: SetupCartsOptions) => Promise<void>;
|
|
8
|
-
//# sourceMappingURL=setupCarts.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"setupCarts.d.ts","sourceRoot":"","sources":["../../src/setup/setupCarts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,MAAM,WAAW,iBAAiB;IAChC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,8BAA8B,CAAC,EAAE,MAAM,CAAC;IACxC,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAGD,eAAO,MAAM,UAAU,GAAU,cAAc,aAAa,EAAE,UAAS,iBAAsB,kBAyB5F,CAAC"}
|
package/lib/setup/setupCarts.js
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
const { UNCHAINED_DISABLE_PROVIDER_INVALIDATION, UNCHAINED_ASSIGN_CART_FOR_USERS } = process.env;
|
|
2
|
-
export const setupCarts = async (unchainedAPI, options = {}) => {
|
|
3
|
-
if (options.invalidateProviders ?? !UNCHAINED_DISABLE_PROVIDER_INVALIDATION) {
|
|
4
|
-
const orders = await unchainedAPI.modules.orders.findCartsToInvalidate(options.providerInvalidationMaxAgeDays);
|
|
5
|
-
await Promise.allSettled(orders.map(async (order) => {
|
|
6
|
-
await unchainedAPI.services.orders.updateCalculation(order._id);
|
|
7
|
-
}));
|
|
8
|
-
}
|
|
9
|
-
if (options.assignCartForUsers ?? Boolean(UNCHAINED_ASSIGN_CART_FOR_USERS)) {
|
|
10
|
-
const users = await unchainedAPI.modules.users.findUsers({});
|
|
11
|
-
await Promise.all(users.map((user) => {
|
|
12
|
-
const locale = unchainedAPI.modules.users.userLocale(user);
|
|
13
|
-
return unchainedAPI.services.orders.nextUserCart({
|
|
14
|
-
user,
|
|
15
|
-
countryCode: locale.region,
|
|
16
|
-
});
|
|
17
|
-
}));
|
|
18
|
-
}
|
|
19
|
-
};
|
|
20
|
-
//# sourceMappingURL=setupCarts.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"setupCarts.js","sourceRoot":"","sources":["../../src/setup/setupCarts.ts"],"names":[],"mappings":"AAOA,MAAM,EAAE,uCAAuC,EAAE,+BAA+B,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;AAEjG,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,EAAE,YAA2B,EAAE,UAA6B,EAAE,EAAE,EAAE;IAC/F,IAAI,OAAO,CAAC,mBAAmB,IAAI,CAAC,uCAAuC,EAAE,CAAC;QAC5E,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,qBAAqB,CACpE,OAAO,CAAC,8BAA8B,CACvC,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,IAAI,OAAO,CAAC,kBAAkB,IAAI,OAAO,CAAC,+BAA+B,CAAC,EAAE,CAAC;QAC3E,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;AACH,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,14 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1 +0,0 @@
|
|
|
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/src/setup/setupCarts.ts
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { UnchainedCore } from '@unchainedshop/core';
|
|
2
|
-
|
|
3
|
-
export interface SetupCartsOptions {
|
|
4
|
-
invalidateProviders?: boolean;
|
|
5
|
-
providerInvalidationMaxAgeDays?: number;
|
|
6
|
-
assignCartForUsers?: boolean;
|
|
7
|
-
}
|
|
8
|
-
const { UNCHAINED_DISABLE_PROVIDER_INVALIDATION, UNCHAINED_ASSIGN_CART_FOR_USERS } = process.env;
|
|
9
|
-
|
|
10
|
-
export const setupCarts = async (unchainedAPI: UnchainedCore, options: SetupCartsOptions = {}) => {
|
|
11
|
-
if (options.invalidateProviders ?? !UNCHAINED_DISABLE_PROVIDER_INVALIDATION) {
|
|
12
|
-
const orders = await unchainedAPI.modules.orders.findCartsToInvalidate(
|
|
13
|
-
options.providerInvalidationMaxAgeDays,
|
|
14
|
-
);
|
|
15
|
-
await Promise.allSettled(
|
|
16
|
-
orders.map(async (order) => {
|
|
17
|
-
await unchainedAPI.services.orders.updateCalculation(order._id);
|
|
18
|
-
}),
|
|
19
|
-
);
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
if (options.assignCartForUsers ?? Boolean(UNCHAINED_ASSIGN_CART_FOR_USERS)) {
|
|
23
|
-
const users = await unchainedAPI.modules.users.findUsers({});
|
|
24
|
-
|
|
25
|
-
await Promise.all(
|
|
26
|
-
users.map((user) => {
|
|
27
|
-
const locale = unchainedAPI.modules.users.userLocale(user);
|
|
28
|
-
return unchainedAPI.services.orders.nextUserCart({
|
|
29
|
-
user,
|
|
30
|
-
countryCode: locale.region,
|
|
31
|
-
});
|
|
32
|
-
}),
|
|
33
|
-
);
|
|
34
|
-
}
|
|
35
|
-
};
|