@reactionary/source 0.0.48 → 0.0.52
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/core/package.json +4 -3
- package/core/src/cache/cache.interface.ts +1 -1
- package/core/src/cache/memory-cache.ts +2 -2
- package/core/src/cache/noop-cache.ts +1 -1
- package/core/src/cache/redis-cache.ts +1 -1
- package/core/src/client/client-builder.ts +4 -4
- package/core/src/client/client.ts +12 -12
- package/core/src/decorators/reactionary.decorator.ts +22 -2
- package/core/src/index.ts +14 -14
- package/core/src/initialization.ts +1 -1
- package/core/src/providers/analytics.provider.ts +2 -2
- package/core/src/providers/base.provider.ts +5 -5
- package/core/src/providers/cart.provider.ts +6 -6
- package/core/src/providers/category.provider.ts +4 -9
- package/core/src/providers/checkout.provider.ts +156 -0
- package/core/src/providers/identity.provider.ts +5 -5
- package/core/src/providers/index.ts +13 -12
- package/core/src/providers/inventory.provider.ts +4 -4
- package/core/src/providers/order.provider.ts +31 -0
- package/core/src/providers/price.provider.ts +5 -5
- package/core/src/providers/product.provider.ts +5 -5
- package/core/src/providers/profile.provider.ts +5 -5
- package/core/src/providers/search.provider.ts +4 -4
- package/core/src/providers/store.provider.ts +4 -4
- package/core/src/schemas/capabilities.schema.ts +2 -1
- package/core/src/schemas/models/analytics.model.ts +1 -1
- package/core/src/schemas/models/cart.model.ts +3 -28
- package/core/src/schemas/models/category.model.ts +2 -2
- package/core/src/schemas/models/checkout.model.ts +66 -0
- package/core/src/schemas/models/cost.model.ts +21 -0
- package/core/src/schemas/models/identifiers.model.ts +23 -2
- package/core/src/schemas/models/identity.model.ts +8 -5
- package/core/src/schemas/models/index.ts +19 -15
- package/core/src/schemas/models/inventory.model.ts +2 -2
- package/core/src/schemas/models/order.model.ts +46 -0
- package/core/src/schemas/models/payment.model.ts +5 -12
- package/core/src/schemas/models/price.model.ts +3 -3
- package/core/src/schemas/models/product.model.ts +6 -3
- package/core/src/schemas/models/profile.model.ts +2 -2
- package/core/src/schemas/models/search.model.ts +2 -3
- package/core/src/schemas/models/shipping-method.model.ts +34 -3
- package/core/src/schemas/models/store.model.ts +2 -2
- package/core/src/schemas/mutations/analytics.mutation.ts +2 -2
- package/core/src/schemas/mutations/cart.mutation.ts +5 -5
- package/core/src/schemas/mutations/checkout.mutation.ts +50 -0
- package/core/src/schemas/mutations/identity.mutation.ts +1 -1
- package/core/src/schemas/mutations/index.ts +10 -10
- package/core/src/schemas/mutations/profile.mutation.ts +1 -1
- package/core/src/schemas/queries/cart.query.ts +2 -2
- package/core/src/schemas/queries/category.query.ts +3 -3
- package/core/src/schemas/queries/checkout.query.ts +22 -0
- package/core/src/schemas/queries/identity.query.ts +1 -1
- package/core/src/schemas/queries/index.ts +13 -12
- package/core/src/schemas/queries/inventory.query.ts +2 -2
- package/core/src/schemas/queries/order.query.ts +9 -0
- package/core/src/schemas/queries/price.query.ts +2 -2
- package/core/src/schemas/queries/product.query.ts +9 -2
- package/core/src/schemas/queries/profile.query.ts +1 -1
- package/core/src/schemas/queries/search.query.ts +2 -2
- package/core/src/schemas/queries/store.query.ts +1 -1
- package/core/src/schemas/session.schema.ts +3 -3
- package/core/tsconfig.json +3 -2
- package/examples/next/next.config.js +17 -6
- package/examples/next/src/app/page.tsx +1 -2
- package/examples/node/package.json +2 -1
- package/examples/node/src/basic/basic-node-setup.spec.ts +1 -1
- package/examples/node/tsconfig.json +2 -1
- package/examples/node/tsconfig.spec.json +3 -2
- package/package.json +3 -1
- package/providers/algolia/package.json +2 -1
- package/providers/algolia/src/core/initialize.ts +5 -5
- package/providers/algolia/src/index.ts +5 -5
- package/providers/algolia/src/providers/product.provider.ts +8 -2
- package/providers/algolia/src/providers/search.provider.ts +1 -1
- package/providers/algolia/src/test/search.provider.spec.ts +1 -1
- package/providers/algolia/tsconfig.json +2 -1
- package/providers/algolia/tsconfig.spec.json +3 -2
- package/providers/commercetools/{jest.config.ts → jest.config.cjs} +1 -1
- package/providers/commercetools/package.json +3 -2
- package/providers/commercetools/src/core/client.ts +63 -32
- package/providers/commercetools/src/core/initialize.ts +20 -16
- package/providers/commercetools/src/index.ts +10 -10
- package/providers/commercetools/src/providers/cart.provider.ts +14 -19
- package/providers/commercetools/src/providers/category.provider.ts +3 -12
- package/providers/commercetools/src/providers/checkout.provider.ts +644 -0
- package/providers/commercetools/src/providers/identity.provider.ts +8 -8
- package/providers/commercetools/src/providers/index.ts +12 -9
- package/providers/commercetools/src/providers/inventory.provider.ts +2 -4
- package/providers/commercetools/src/providers/order.provider.ts +163 -0
- package/providers/commercetools/src/providers/price.provider.ts +3 -3
- package/providers/commercetools/src/providers/product.provider.ts +24 -6
- package/providers/commercetools/src/providers/profile.provider.ts +2 -2
- package/providers/commercetools/src/providers/search.provider.ts +3 -5
- package/providers/commercetools/src/providers/store.provider.ts +3 -3
- package/providers/commercetools/src/schema/capabilities.schema.ts +2 -1
- package/providers/commercetools/src/schema/commercetools.schema.ts +7 -5
- package/providers/commercetools/src/schema/configuration.schema.ts +2 -0
- package/providers/commercetools/src/test/cart.provider.spec.ts +24 -4
- package/providers/commercetools/src/test/category.provider.spec.ts +3 -3
- package/providers/commercetools/src/test/checkout.provider.spec.ts +312 -0
- package/providers/commercetools/src/test/identity.provider.spec.ts +3 -3
- package/providers/commercetools/src/test/inventory.provider.spec.ts +2 -2
- package/providers/commercetools/src/test/price.provider.spec.ts +4 -4
- package/providers/commercetools/src/test/product.provider.spec.ts +22 -5
- package/providers/commercetools/src/test/profile.provider.spec.ts +3 -3
- package/providers/commercetools/src/test/search.provider.spec.ts +2 -2
- package/providers/commercetools/src/test/store.provider.spec.ts +2 -2
- package/providers/commercetools/src/test/test-utils.ts +14 -0
- package/providers/commercetools/tsconfig.json +2 -1
- package/providers/commercetools/tsconfig.spec.json +4 -3
- package/providers/fake/{jest.config.ts → jest.config.cjs} +1 -1
- package/providers/fake/package.json +2 -2
- package/providers/fake/src/core/initialize.ts +6 -6
- package/providers/fake/src/index.ts +4 -4
- package/providers/fake/src/providers/analytics.provider.ts +1 -1
- package/providers/fake/src/providers/cart.provider.ts +2 -2
- package/providers/fake/src/providers/category.provider.ts +7 -3
- package/providers/fake/src/providers/identity.provider.ts +1 -1
- package/providers/fake/src/providers/index.ts +9 -9
- package/providers/fake/src/providers/inventory.provider.ts +1 -1
- package/providers/fake/src/providers/price.provider.ts +1 -1
- package/providers/fake/src/providers/product.provider.ts +10 -4
- package/providers/fake/src/providers/search.provider.ts +2 -5
- package/providers/fake/src/providers/store.provider.ts +2 -3
- package/providers/fake/src/test/cart.provider.spec.ts +3 -3
- package/providers/fake/src/test/category.provider.spec.ts +2 -2
- package/providers/fake/src/test/price.provider.spec.ts +2 -2
- package/providers/fake/src/test/product.provider.spec.ts +8 -8
- package/providers/fake/src/test/test-utils.ts +1 -1
- package/providers/fake/tsconfig.json +2 -1
- package/providers/fake/tsconfig.spec.json +1 -3
- package/providers/posthog/package.json +4 -4
- package/providers/posthog/project.json +2 -2
- package/providers/posthog/src/core/initialize.ts +2 -2
- package/providers/posthog/src/index.ts +3 -3
- package/providers/posthog/tsconfig.json +2 -1
- package/tsconfig.base.json +3 -4
- package/.claude/settings.local.json +0 -28
- package/core/src/providers/cart-payment.provider.ts +0 -57
- package/core/src/schemas/mutations/cart-payment.mutation.ts +0 -21
- package/core/src/schemas/queries/cart-payment.query.ts +0 -12
- package/otel/README.md +0 -227
- package/otel/eslint.config.mjs +0 -23
- package/otel/package.json +0 -11
- package/otel/pnpm-lock.yaml +0 -805
- package/otel/project.json +0 -33
- package/otel/src/index.ts +0 -22
- package/otel/src/metrics.ts +0 -76
- package/otel/src/provider-instrumentation.ts +0 -108
- package/otel/src/test/otel.spec.ts +0 -8
- package/otel/src/trace-decorator.ts +0 -226
- package/otel/src/tracer.ts +0 -83
- package/otel/src/trpc-middleware.ts +0 -128
- package/otel/tsconfig.json +0 -23
- package/otel/tsconfig.lib.json +0 -23
- package/otel/tsconfig.spec.json +0 -28
- package/otel/vite.config.ts +0 -24
- package/providers/commercetools/src/providers/cart-payment.provider.ts +0 -193
- package/providers/commercetools/src/test/cart-payment.provider.spec.ts +0 -145
- package/trpc/README.md +0 -7
- package/trpc/__mocks__/superjson.js +0 -25
- package/trpc/eslint.config.mjs +0 -19
- package/trpc/jest.config.ts +0 -14
- package/trpc/package.json +0 -14
- package/trpc/project.json +0 -31
- package/trpc/src/client.ts +0 -175
- package/trpc/src/index.ts +0 -44
- package/trpc/src/integration.spec.ts +0 -223
- package/trpc/src/server.ts +0 -125
- package/trpc/src/test-utils.ts +0 -31
- package/trpc/src/transparent-client.spec.ts +0 -162
- package/trpc/src/types.ts +0 -144
- package/trpc/tsconfig.json +0 -16
- package/trpc/tsconfig.lib.json +0 -10
- package/trpc/tsconfig.spec.json +0 -15
package/otel/tsconfig.json
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"extends": "../tsconfig.base.json",
|
|
3
|
-
"compilerOptions": {
|
|
4
|
-
"module": "commonjs",
|
|
5
|
-
"forceConsistentCasingInFileNames": true,
|
|
6
|
-
"strict": true,
|
|
7
|
-
"importHelpers": true,
|
|
8
|
-
"noImplicitOverride": true,
|
|
9
|
-
"noImplicitReturns": true,
|
|
10
|
-
"noFallthroughCasesInSwitch": true,
|
|
11
|
-
"noPropertyAccessFromIndexSignature": true
|
|
12
|
-
},
|
|
13
|
-
"files": [],
|
|
14
|
-
"include": [],
|
|
15
|
-
"references": [
|
|
16
|
-
{
|
|
17
|
-
"path": "./tsconfig.lib.json"
|
|
18
|
-
},
|
|
19
|
-
{
|
|
20
|
-
"path": "./tsconfig.spec.json"
|
|
21
|
-
}
|
|
22
|
-
]
|
|
23
|
-
}
|
package/otel/tsconfig.lib.json
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"extends": "./tsconfig.json",
|
|
3
|
-
"compilerOptions": {
|
|
4
|
-
"outDir": "../dist/out-tsc",
|
|
5
|
-
"declaration": true,
|
|
6
|
-
"types": ["node"]
|
|
7
|
-
},
|
|
8
|
-
"include": ["src/**/*.ts"],
|
|
9
|
-
"exclude": [
|
|
10
|
-
"vite.config.ts",
|
|
11
|
-
"vite.config.mts",
|
|
12
|
-
"vitest.config.ts",
|
|
13
|
-
"vitest.config.mts",
|
|
14
|
-
"src/**/*.test.ts",
|
|
15
|
-
"src/**/*.spec.ts",
|
|
16
|
-
"src/**/*.test.tsx",
|
|
17
|
-
"src/**/*.spec.tsx",
|
|
18
|
-
"src/**/*.test.js",
|
|
19
|
-
"src/**/*.spec.js",
|
|
20
|
-
"src/**/*.test.jsx",
|
|
21
|
-
"src/**/*.spec.jsx"
|
|
22
|
-
]
|
|
23
|
-
}
|
package/otel/tsconfig.spec.json
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"extends": "./tsconfig.json",
|
|
3
|
-
"compilerOptions": {
|
|
4
|
-
"outDir": "../dist/out-tsc",
|
|
5
|
-
"types": [
|
|
6
|
-
"vitest/globals",
|
|
7
|
-
"vitest/importMeta",
|
|
8
|
-
"vite/client",
|
|
9
|
-
"node",
|
|
10
|
-
"vitest"
|
|
11
|
-
]
|
|
12
|
-
},
|
|
13
|
-
"include": [
|
|
14
|
-
"vite.config.ts",
|
|
15
|
-
"vite.config.mts",
|
|
16
|
-
"vitest.config.ts",
|
|
17
|
-
"vitest.config.mts",
|
|
18
|
-
"src/**/*.test.ts",
|
|
19
|
-
"src/**/*.spec.ts",
|
|
20
|
-
"src/**/*.test.tsx",
|
|
21
|
-
"src/**/*.spec.tsx",
|
|
22
|
-
"src/**/*.test.js",
|
|
23
|
-
"src/**/*.spec.js",
|
|
24
|
-
"src/**/*.test.jsx",
|
|
25
|
-
"src/**/*.spec.jsx",
|
|
26
|
-
"src/**/*.d.ts"
|
|
27
|
-
]
|
|
28
|
-
}
|
package/otel/vite.config.ts
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { defineConfig } from 'vite';
|
|
2
|
-
import { nxViteTsPaths } from '@nx/vite/plugins/nx-tsconfig-paths.plugin';
|
|
3
|
-
import { nxCopyAssetsPlugin } from '@nx/vite/plugins/nx-copy-assets.plugin';
|
|
4
|
-
|
|
5
|
-
export default defineConfig(() => ({
|
|
6
|
-
root: __dirname,
|
|
7
|
-
cacheDir: '../node_modules/.vite/otel',
|
|
8
|
-
plugins: [nxViteTsPaths(), nxCopyAssetsPlugin(['*.md'])],
|
|
9
|
-
// Uncomment this if you are using workers.
|
|
10
|
-
// worker: {
|
|
11
|
-
// plugins: [ nxViteTsPaths() ],
|
|
12
|
-
// },
|
|
13
|
-
test: {
|
|
14
|
-
watch: false,
|
|
15
|
-
globals: true,
|
|
16
|
-
environment: 'node',
|
|
17
|
-
include: ['src/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'],
|
|
18
|
-
reporters: ['default'],
|
|
19
|
-
coverage: {
|
|
20
|
-
reportsDirectory: '../coverage/otel',
|
|
21
|
-
provider: 'v8' as const,
|
|
22
|
-
},
|
|
23
|
-
},
|
|
24
|
-
}));
|
|
@@ -1,193 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
import type { CommercetoolsConfiguration } from "../schema/configuration.schema";
|
|
3
|
-
import { CommercetoolsClient } from "../core/client";
|
|
4
|
-
import type { Payment as CTPayment} from "@commercetools/platform-sdk";
|
|
5
|
-
import { PaymentStatus } from "@commercetools/platform-sdk";
|
|
6
|
-
import { traced } from "@reactionary/otel";
|
|
7
|
-
import type { CommercetoolsCartIdentifier} from "../schema/commercetools.schema";
|
|
8
|
-
import { CommercetoolsCartIdentifierSchema, CommercetoolsCartPaymentInstructionIdentifierSchema } from "../schema/commercetools.schema";
|
|
9
|
-
import { CartPaymentProvider, PaymentMethodIdentifierSchema, } from "@reactionary/core";
|
|
10
|
-
import type { CartPaymentQueryByCart, CartPaymentMutationAddPayment, CartPaymentMutationCancelPayment, Session, RequestContext , Cache, CartPaymentInstruction, Currency} from "@reactionary/core";
|
|
11
|
-
import type z from "zod";
|
|
12
|
-
|
|
13
|
-
export class CommercetoolsCartPaymentProvider<
|
|
14
|
-
T extends CartPaymentInstruction = CartPaymentInstruction
|
|
15
|
-
> extends CartPaymentProvider<T> {
|
|
16
|
-
protected config: CommercetoolsConfiguration;
|
|
17
|
-
|
|
18
|
-
constructor(config: CommercetoolsConfiguration, schema: z.ZodType<T>, cache: Cache) {
|
|
19
|
-
super(schema, cache);
|
|
20
|
-
|
|
21
|
-
this.config = config;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
protected async getClient(reqCtx: RequestContext) {
|
|
25
|
-
const client = await new CommercetoolsClient(this.config).getClient(reqCtx);
|
|
26
|
-
|
|
27
|
-
return {
|
|
28
|
-
payments: client.withProjectKey({ projectKey: this.config.projectKey }).me().payments(),
|
|
29
|
-
carts: client.withProjectKey({ projectKey: this.config.projectKey }).me().carts()
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
@traced()
|
|
36
|
-
public override async getByCartIdentifier(payload: CartPaymentQueryByCart, reqCtx: RequestContext): Promise<T[]> {
|
|
37
|
-
const client = await this.getClient(reqCtx);
|
|
38
|
-
|
|
39
|
-
const ctId = payload.cart as CommercetoolsCartIdentifier;
|
|
40
|
-
const ctVersion = ctId.version || 0;
|
|
41
|
-
|
|
42
|
-
const cart = await client.carts.withId({ ID: ctId.key })
|
|
43
|
-
.get({
|
|
44
|
-
queryArgs: {
|
|
45
|
-
expand: 'paymentInfo.payments[*]',
|
|
46
|
-
},
|
|
47
|
-
})
|
|
48
|
-
.execute();
|
|
49
|
-
|
|
50
|
-
let payments = (cart.body.paymentInfo?.payments || []).map(x => x.obj!).filter(x => x);
|
|
51
|
-
if (payload.status) {
|
|
52
|
-
payments = payments.filter(payment => payload.status!.some(status => payment.paymentStatus?.interfaceCode === status));
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
// Map over the payments and parse each one
|
|
56
|
-
const parsedPayments = payments.map(payment => this.parseSingle(payment, reqCtx));
|
|
57
|
-
|
|
58
|
-
// Commercetools does not link carts to payments, but the other way around, so for this we have to synthesize the link.
|
|
59
|
-
const returnPayments = parsedPayments.map(x => {
|
|
60
|
-
x.cart = { key: cart.body.id, version: cart.body.version || 0 };
|
|
61
|
-
return x;
|
|
62
|
-
});
|
|
63
|
-
return returnPayments;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
public override async initiatePaymentForCart(payload: CartPaymentMutationAddPayment, reqCtx: RequestContext): Promise<T> {
|
|
69
|
-
const client = await this.getClient(reqCtx);
|
|
70
|
-
const cartId = payload.cart as CommercetoolsCartIdentifier;
|
|
71
|
-
const response = await client.payments.post({
|
|
72
|
-
body: {
|
|
73
|
-
|
|
74
|
-
amountPlanned: {
|
|
75
|
-
centAmount: Math.round(payload.paymentInstruction.amount.value * 100),
|
|
76
|
-
currencyCode: payload.paymentInstruction.amount.currency
|
|
77
|
-
},
|
|
78
|
-
paymentMethodInfo: {
|
|
79
|
-
method: payload.paymentInstruction.paymentMethod.method,
|
|
80
|
-
name: {
|
|
81
|
-
[reqCtx.languageContext.locale]: payload.paymentInstruction.paymentMethod.name
|
|
82
|
-
},
|
|
83
|
-
paymentInterface: payload.paymentInstruction.paymentMethod.paymentProcessor
|
|
84
|
-
},
|
|
85
|
-
custom:{
|
|
86
|
-
type: {
|
|
87
|
-
typeId: 'type',
|
|
88
|
-
key: 'reactionaryPaymentCustomFields',
|
|
89
|
-
},
|
|
90
|
-
fields: {
|
|
91
|
-
cartId: cartId.key,
|
|
92
|
-
cartVersion: cartId.version + '',
|
|
93
|
-
}
|
|
94
|
-
},
|
|
95
|
-
|
|
96
|
-
},
|
|
97
|
-
}).execute();
|
|
98
|
-
|
|
99
|
-
// Now add the payment to the cart
|
|
100
|
-
const ctId = payload.cart as CommercetoolsCartIdentifier
|
|
101
|
-
const updatedCart = await client.carts.withId({ ID: ctId.key }).post({
|
|
102
|
-
body: {
|
|
103
|
-
version: ctId.version,
|
|
104
|
-
actions: [
|
|
105
|
-
{
|
|
106
|
-
'action': 'addPayment',
|
|
107
|
-
'payment': {
|
|
108
|
-
'typeId': 'payment',
|
|
109
|
-
'id': response.body.id
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
]
|
|
113
|
-
}
|
|
114
|
-
}).execute();
|
|
115
|
-
|
|
116
|
-
const payment = this.parseSingle(response.body, reqCtx);
|
|
117
|
-
|
|
118
|
-
// we return the newest cart version so caller can update their cart reference, if they want to.
|
|
119
|
-
// hopefully this wont cause excessive confusion
|
|
120
|
-
payment.cart = CommercetoolsCartIdentifierSchema.parse({
|
|
121
|
-
key: updatedCart.body.id,
|
|
122
|
-
version: updatedCart.body.version || 0
|
|
123
|
-
});
|
|
124
|
-
return payment;
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
@traced()
|
|
129
|
-
public override async cancelPaymentInstruction(payload: CartPaymentMutationCancelPayment, reqCtx: RequestContext): Promise<T> {
|
|
130
|
-
const client = await this.getClient(reqCtx);
|
|
131
|
-
|
|
132
|
-
// get newest version
|
|
133
|
-
const newestVersion = await client.payments.withId({ ID: payload.paymentInstruction.key }).get().execute();
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
// we set the planned amount to 0, which effectively cancels the payment, and also allows the backend to clean it up.
|
|
137
|
-
// Note: This does NOT remove the payment from the cart, as that would be a breaking change to the cart, and we want to avoid that during checkout.
|
|
138
|
-
// Instead, the payment will remain on the cart, but with status 'canceled', and can be removed later if needed.
|
|
139
|
-
// This also allows us to keep a record of the payment instruction for auditing purposes.
|
|
140
|
-
// The cart can be re-used, and a new payment instruction can be added to it later.
|
|
141
|
-
// The frontend should ignore any payment instructions with status 'canceled' when displaying payment options to the user.
|
|
142
|
-
const response = await client.payments.withId({ ID: payload.paymentInstruction.key }).post({
|
|
143
|
-
body: {
|
|
144
|
-
version: newestVersion.body.version,
|
|
145
|
-
actions: [
|
|
146
|
-
{
|
|
147
|
-
action: 'changeAmountPlanned',
|
|
148
|
-
amount: {
|
|
149
|
-
centAmount: 0,
|
|
150
|
-
currencyCode: newestVersion.body.amountPlanned.currencyCode
|
|
151
|
-
}
|
|
152
|
-
},
|
|
153
|
-
]
|
|
154
|
-
}
|
|
155
|
-
}).execute();
|
|
156
|
-
|
|
157
|
-
const payment = this.parseSingle(response.body, reqCtx);
|
|
158
|
-
payment.cart = payload.cart;
|
|
159
|
-
return payment;
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
@traced()
|
|
165
|
-
protected override parseSingle(_body: unknown, reqCtx: RequestContext): T {
|
|
166
|
-
const body = _body as CTPayment;
|
|
167
|
-
|
|
168
|
-
const base = this.newModel();
|
|
169
|
-
base.identifier = CommercetoolsCartPaymentInstructionIdentifierSchema.parse({
|
|
170
|
-
key: body.id,
|
|
171
|
-
version: body.version || 0
|
|
172
|
-
});
|
|
173
|
-
|
|
174
|
-
base.amount = {
|
|
175
|
-
value: body.amountPlanned.centAmount / 100,
|
|
176
|
-
currency: body.amountPlanned.currencyCode as Currency,
|
|
177
|
-
};
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
base.paymentMethod = PaymentMethodIdentifierSchema.parse({
|
|
181
|
-
key: body.paymentMethodInfo?.method
|
|
182
|
-
});
|
|
183
|
-
|
|
184
|
-
// FIXME: seems wrong
|
|
185
|
-
base.status = body.paymentStatus?.interfaceCode as unknown as any;
|
|
186
|
-
|
|
187
|
-
base.cart = { key: '', version: 0 };
|
|
188
|
-
|
|
189
|
-
return this.assert(base);
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
}
|
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
import 'dotenv/config';
|
|
2
|
-
import type {
|
|
3
|
-
Cart, RequestContext} from '@reactionary/core';
|
|
4
|
-
import { CartPaymentInstructionSchema,
|
|
5
|
-
CartSchema,
|
|
6
|
-
IdentitySchema,
|
|
7
|
-
NoOpCache, createInitialRequestContext
|
|
8
|
-
} from '@reactionary/core';
|
|
9
|
-
import {
|
|
10
|
-
getCommercetoolsTestConfiguration,
|
|
11
|
-
} from './test-utils';
|
|
12
|
-
import { CommercetoolsCartProvider } from '../providers/cart.provider';
|
|
13
|
-
import { CommercetoolsIdentityProvider } from '../providers/identity.provider';
|
|
14
|
-
import { CommercetoolsCartPaymentProvider } from '../providers/cart-payment.provider';
|
|
15
|
-
|
|
16
|
-
const testData = {
|
|
17
|
-
skuWithoutTiers: 'SGB-01',
|
|
18
|
-
skuWithTiers: 'GMCT-01',
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
describe('Commercetools Cart Payment Provider', () => {
|
|
22
|
-
let provider: CommercetoolsCartPaymentProvider;
|
|
23
|
-
let cartProvider: CommercetoolsCartProvider;
|
|
24
|
-
let identityProvider: CommercetoolsIdentityProvider;
|
|
25
|
-
let reqCtx: RequestContext;
|
|
26
|
-
|
|
27
|
-
beforeAll(() => {
|
|
28
|
-
provider = new CommercetoolsCartPaymentProvider(
|
|
29
|
-
getCommercetoolsTestConfiguration(),
|
|
30
|
-
CartPaymentInstructionSchema,
|
|
31
|
-
new NoOpCache()
|
|
32
|
-
);
|
|
33
|
-
cartProvider = new CommercetoolsCartProvider(
|
|
34
|
-
getCommercetoolsTestConfiguration(),
|
|
35
|
-
CartSchema,
|
|
36
|
-
new NoOpCache()
|
|
37
|
-
);
|
|
38
|
-
identityProvider = new CommercetoolsIdentityProvider(
|
|
39
|
-
getCommercetoolsTestConfiguration(),
|
|
40
|
-
IdentitySchema,
|
|
41
|
-
new NoOpCache()
|
|
42
|
-
);
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
beforeEach(() => {
|
|
46
|
-
reqCtx = createInitialRequestContext();
|
|
47
|
-
});
|
|
48
|
-
|
|
49
|
-
describe('anonymous sessions', () => {
|
|
50
|
-
let cart: Cart;
|
|
51
|
-
|
|
52
|
-
beforeEach(async () => {
|
|
53
|
-
cart = await cartProvider.add(
|
|
54
|
-
{
|
|
55
|
-
cart: { key: '', version: 0 },
|
|
56
|
-
sku: {
|
|
57
|
-
key: testData.skuWithoutTiers,
|
|
58
|
-
},
|
|
59
|
-
quantity: 1,
|
|
60
|
-
},
|
|
61
|
-
reqCtx
|
|
62
|
-
);
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
it('a new cart will return 0 payment instructions', async () => {
|
|
66
|
-
const payments = await provider.getByCartIdentifier(
|
|
67
|
-
{ cart: cart.identifier, status: undefined },
|
|
68
|
-
reqCtx
|
|
69
|
-
);
|
|
70
|
-
expect(payments.length).toBe(0);
|
|
71
|
-
});
|
|
72
|
-
|
|
73
|
-
it('can initiate a new payment', async () => {
|
|
74
|
-
const payment = await provider.initiatePaymentForCart(
|
|
75
|
-
{
|
|
76
|
-
cart: cart.identifier,
|
|
77
|
-
paymentInstruction: {
|
|
78
|
-
paymentMethod: {
|
|
79
|
-
method: 'stripe',
|
|
80
|
-
name: 'Stripe',
|
|
81
|
-
paymentProcessor: 'stripe',
|
|
82
|
-
},
|
|
83
|
-
amount: {
|
|
84
|
-
value: cart.price.grandTotal.value,
|
|
85
|
-
currency: cart.price.grandTotal.currency,
|
|
86
|
-
},
|
|
87
|
-
protocolData: [{ key: 'test-key', value: 'test-value' }],
|
|
88
|
-
},
|
|
89
|
-
},
|
|
90
|
-
reqCtx
|
|
91
|
-
);
|
|
92
|
-
|
|
93
|
-
expect(payment.identifier.key).toBeDefined();
|
|
94
|
-
|
|
95
|
-
// verify that we can fetch it again.
|
|
96
|
-
const payments = await provider.getByCartIdentifier(
|
|
97
|
-
{ cart: cart.identifier, status: undefined },
|
|
98
|
-
reqCtx
|
|
99
|
-
);
|
|
100
|
-
expect(payments.length).toBe(1);
|
|
101
|
-
expect(payments[0].identifier.key).toBe(payment.identifier.key);
|
|
102
|
-
});
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
it('can cancel an in-progress payment', async () => {
|
|
106
|
-
const payment = await provider.initiatePaymentForCart(
|
|
107
|
-
{
|
|
108
|
-
cart: cart.identifier,
|
|
109
|
-
paymentInstruction: {
|
|
110
|
-
paymentMethod: {
|
|
111
|
-
method: 'stripe',
|
|
112
|
-
name: 'Stripe',
|
|
113
|
-
paymentProcessor: 'stripe',
|
|
114
|
-
},
|
|
115
|
-
amount: {
|
|
116
|
-
value: cart.price.grandTotal.value,
|
|
117
|
-
currency: cart.price.grandTotal.currency,
|
|
118
|
-
},
|
|
119
|
-
protocolData: [{ key: 'test-key', value: 'test-value' }],
|
|
120
|
-
},
|
|
121
|
-
},
|
|
122
|
-
reqCtx
|
|
123
|
-
);
|
|
124
|
-
expect(payment.identifier.key).toBeDefined();
|
|
125
|
-
|
|
126
|
-
const cancelledPayment = await provider.cancelPaymentInstruction(
|
|
127
|
-
{
|
|
128
|
-
cart: cart.identifier,
|
|
129
|
-
paymentInstruction: payment.identifier
|
|
130
|
-
},
|
|
131
|
-
reqCtx
|
|
132
|
-
);
|
|
133
|
-
expect(cancelledPayment.status).toBe('canceled');
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
// verify that it is gone
|
|
137
|
-
const payments = await provider.getByCartIdentifier(
|
|
138
|
-
{ cart: cart.identifier, status: undefined },
|
|
139
|
-
reqCtx
|
|
140
|
-
);
|
|
141
|
-
expect(payments.length).toBe(0);
|
|
142
|
-
expect(payments[0].identifier.key).toBe(payment.identifier.key);
|
|
143
|
-
});
|
|
144
|
-
});
|
|
145
|
-
});
|
package/trpc/README.md
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
// Mock superjson for Jest testing
|
|
2
|
-
module.exports = {
|
|
3
|
-
default: {
|
|
4
|
-
stringify: JSON.stringify,
|
|
5
|
-
parse: JSON.parse,
|
|
6
|
-
serialize: (obj) => ({ json: obj, meta: undefined }),
|
|
7
|
-
deserialize: (data) => data.json,
|
|
8
|
-
output: {
|
|
9
|
-
serialize: (obj) => ({ json: obj, meta: undefined })
|
|
10
|
-
},
|
|
11
|
-
input: {
|
|
12
|
-
deserialize: (data) => data.json
|
|
13
|
-
}
|
|
14
|
-
},
|
|
15
|
-
stringify: JSON.stringify,
|
|
16
|
-
parse: JSON.parse,
|
|
17
|
-
serialize: (obj) => ({ json: obj, meta: undefined }),
|
|
18
|
-
deserialize: (data) => data.json,
|
|
19
|
-
output: {
|
|
20
|
-
serialize: (obj) => ({ json: obj, meta: undefined })
|
|
21
|
-
},
|
|
22
|
-
input: {
|
|
23
|
-
deserialize: (data) => data.json
|
|
24
|
-
}
|
|
25
|
-
};
|
package/trpc/eslint.config.mjs
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import baseConfig from '../eslint.config.mjs';
|
|
2
|
-
|
|
3
|
-
export default [
|
|
4
|
-
...baseConfig,
|
|
5
|
-
{
|
|
6
|
-
files: ['**/*.json'],
|
|
7
|
-
rules: {
|
|
8
|
-
'@nx/dependency-checks': [
|
|
9
|
-
'error',
|
|
10
|
-
{
|
|
11
|
-
ignoredFiles: ['{projectRoot}/eslint.config.{js,cjs,mjs}'],
|
|
12
|
-
},
|
|
13
|
-
],
|
|
14
|
-
},
|
|
15
|
-
languageOptions: {
|
|
16
|
-
parser: await import('jsonc-eslint-parser'),
|
|
17
|
-
},
|
|
18
|
-
},
|
|
19
|
-
];
|
package/trpc/jest.config.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
export default {
|
|
2
|
-
displayName: 'trpc',
|
|
3
|
-
preset: '../jest.preset.js',
|
|
4
|
-
testEnvironment: 'node',
|
|
5
|
-
testTimeout: 15000,
|
|
6
|
-
transform: {
|
|
7
|
-
'^.+\\.[tj]s$': ['ts-jest', { tsconfig: '<rootDir>/tsconfig.spec.json' }],
|
|
8
|
-
},
|
|
9
|
-
moduleFileExtensions: ['ts', 'js', 'html'],
|
|
10
|
-
moduleNameMapper: {
|
|
11
|
-
'^superjson$': '<rootDir>/__mocks__/superjson.js',
|
|
12
|
-
},
|
|
13
|
-
coverageDirectory: '../coverage/trpc',
|
|
14
|
-
};
|
package/trpc/package.json
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@reactionary/trpc",
|
|
3
|
-
"version": "0.0.1",
|
|
4
|
-
"type": "commonjs",
|
|
5
|
-
"main": "./src/index.js",
|
|
6
|
-
"types": "./src/index.d.ts",
|
|
7
|
-
"dependencies": {
|
|
8
|
-
"@trpc/server": "^11.1.2",
|
|
9
|
-
"@reactionary/core": "0.0.1",
|
|
10
|
-
"@reactionary/otel": "0.0.1",
|
|
11
|
-
"superjson": "^2.2.2",
|
|
12
|
-
"zod": "4.1.9"
|
|
13
|
-
}
|
|
14
|
-
}
|
package/trpc/project.json
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "trpc",
|
|
3
|
-
"$schema": "../node_modules/nx/schemas/project-schema.json",
|
|
4
|
-
"sourceRoot": "trpc/src",
|
|
5
|
-
"projectType": "library",
|
|
6
|
-
"release": {
|
|
7
|
-
"version": {
|
|
8
|
-
"manifestRootsToUpdate": ["dist/{projectRoot}"],
|
|
9
|
-
"currentVersionResolver": "git-tag",
|
|
10
|
-
"fallbackCurrentVersionResolver": "disk"
|
|
11
|
-
}
|
|
12
|
-
},
|
|
13
|
-
"tags": [],
|
|
14
|
-
"targets": {
|
|
15
|
-
"build": {
|
|
16
|
-
"executor": "@nx/esbuild:esbuild",
|
|
17
|
-
"outputs": ["{options.outputPath}"],
|
|
18
|
-
"options": {
|
|
19
|
-
"outputPath": "dist/trpc",
|
|
20
|
-
"main": "trpc/src/index.ts",
|
|
21
|
-
"tsConfig": "trpc/tsconfig.lib.json",
|
|
22
|
-
"format": ["esm"]
|
|
23
|
-
}
|
|
24
|
-
},
|
|
25
|
-
"nx-release-publish": {
|
|
26
|
-
"options": {
|
|
27
|
-
"packageRoot": "dist/{projectRoot}"
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
}
|