@vendure/payments-plugin 1.9.5 → 1.9.7
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/package/stripe/metadata-sanitize.d.ts +13 -0
- package/package/stripe/metadata-sanitize.js +33 -0
- package/package/stripe/metadata-sanitize.js.map +1 -0
- package/package/stripe/stripe.plugin.js +4 -4
- package/package/stripe/stripe.service.d.ts +3 -1
- package/package/stripe/stripe.service.js +14 -12
- package/package/stripe/stripe.service.js.map +1 -1
- package/package/stripe/types.d.ts +9 -0
- package/package/stripe/types.js.map +1 -1
- package/package.json +5 -5
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import Stripe from 'stripe';
|
|
2
|
+
/**
|
|
3
|
+
* @description
|
|
4
|
+
* Santitize metadata to ensure it follow Stripe's instructions
|
|
5
|
+
*
|
|
6
|
+
* @link
|
|
7
|
+
* https://stripe.com/docs/api/metadata
|
|
8
|
+
*
|
|
9
|
+
* @Restriction
|
|
10
|
+
* You can specify up to 50 keys, with key names up to 40 characters long and values up to 500 characters long.
|
|
11
|
+
*
|
|
12
|
+
*/
|
|
13
|
+
export declare function sanitizeMetadata(metadata: Stripe.MetadataParam): Stripe.MetadataParam;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sanitizeMetadata = void 0;
|
|
4
|
+
const MAX_KEYS = 50;
|
|
5
|
+
const MAX_KEY_NAME_LENGTH = 40;
|
|
6
|
+
const MAX_VALUE_LENGTH = 500;
|
|
7
|
+
/**
|
|
8
|
+
* @description
|
|
9
|
+
* Santitize metadata to ensure it follow Stripe's instructions
|
|
10
|
+
*
|
|
11
|
+
* @link
|
|
12
|
+
* https://stripe.com/docs/api/metadata
|
|
13
|
+
*
|
|
14
|
+
* @Restriction
|
|
15
|
+
* You can specify up to 50 keys, with key names up to 40 characters long and values up to 500 characters long.
|
|
16
|
+
*
|
|
17
|
+
*/
|
|
18
|
+
function sanitizeMetadata(metadata) {
|
|
19
|
+
if (typeof metadata !== 'object' && metadata !== null)
|
|
20
|
+
return {};
|
|
21
|
+
const keys = Object.keys(metadata)
|
|
22
|
+
.filter(keyName => keyName.length <= MAX_KEY_NAME_LENGTH)
|
|
23
|
+
.filter(keyName => typeof metadata[keyName] !== 'string' ||
|
|
24
|
+
metadata[keyName].length <= MAX_VALUE_LENGTH)
|
|
25
|
+
.slice(0, MAX_KEYS);
|
|
26
|
+
const sanitizedMetadata = keys.reduce((obj, keyName) => {
|
|
27
|
+
obj[keyName] = metadata[keyName];
|
|
28
|
+
return obj;
|
|
29
|
+
}, {});
|
|
30
|
+
return sanitizedMetadata;
|
|
31
|
+
}
|
|
32
|
+
exports.sanitizeMetadata = sanitizeMetadata;
|
|
33
|
+
//# sourceMappingURL=metadata-sanitize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata-sanitize.js","sourceRoot":"","sources":["../../src/stripe/metadata-sanitize.ts"],"names":[],"mappings":";;;AAEA,MAAM,QAAQ,GAAG,EAAE,CAAC;AACpB,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAC/B,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAC7B;;;;;;;;;;GAUG;AACH,SAAgB,gBAAgB,CAAC,QAA8B;IAC3D,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IAEjE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;SAC7B,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,IAAI,mBAAmB,CAAC;SACxD,MAAM,CACH,OAAO,CAAC,EAAE,CACN,OAAO,QAAQ,CAAC,OAAO,CAAC,KAAK,QAAQ;QACpC,QAAQ,CAAC,OAAO,CAAY,CAAC,MAAM,IAAI,gBAAgB,CAC/D;SACA,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAsC,CAAC;IAE7D,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE;QACnD,GAAG,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;QACjC,OAAO,GAAG,CAAC;IACf,CAAC,EAAE,EAA0B,CAAC,CAAC;IAE/B,OAAO,iBAAiB,CAAC;AAC7B,CAAC;AAlBD,4CAkBC"}
|
|
@@ -205,10 +205,10 @@ StripePlugin = StripePlugin_1 = __decorate([
|
|
|
205
205
|
return config;
|
|
206
206
|
},
|
|
207
207
|
shopApiExtensions: {
|
|
208
|
-
schema: graphql_tag_1.gql `
|
|
209
|
-
extend type Mutation {
|
|
210
|
-
createStripePaymentIntent: String
|
|
211
|
-
}
|
|
208
|
+
schema: graphql_tag_1.gql `
|
|
209
|
+
extend type Mutation {
|
|
210
|
+
createStripePaymentIntent: String
|
|
211
|
+
}
|
|
212
212
|
`,
|
|
213
213
|
resolvers: [stripe_resolver_1.StripeResolver],
|
|
214
214
|
},
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
+
import { ModuleRef } from '@nestjs/core';
|
|
2
3
|
import { Order, RequestContext, TransactionalConnection } from '@vendure/core';
|
|
3
4
|
import Stripe from 'stripe';
|
|
4
5
|
import { StripePluginOptions } from './types';
|
|
5
6
|
export declare class StripeService {
|
|
6
7
|
private connection;
|
|
7
8
|
private options;
|
|
9
|
+
private moduleRef;
|
|
8
10
|
protected stripe: Stripe;
|
|
9
|
-
constructor(connection: TransactionalConnection, options: StripePluginOptions);
|
|
11
|
+
constructor(connection: TransactionalConnection, options: StripePluginOptions, moduleRef: ModuleRef);
|
|
10
12
|
createPaymentIntent(ctx: RequestContext, order: Order): Promise<string | undefined>;
|
|
11
13
|
createRefund(paymentIntentId: string, amount: number): Promise<Stripe.Refund | Stripe.StripeError>;
|
|
12
14
|
constructEventFromPayload(payload: Buffer, signature: string): Stripe.Event;
|
|
@@ -17,14 +17,17 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
17
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
18
|
exports.StripeService = void 0;
|
|
19
19
|
const common_1 = require("@nestjs/common");
|
|
20
|
-
const core_1 = require("@
|
|
20
|
+
const core_1 = require("@nestjs/core");
|
|
21
|
+
const core_2 = require("@vendure/core");
|
|
21
22
|
const stripe_1 = __importDefault(require("stripe"));
|
|
22
23
|
const constants_1 = require("./constants");
|
|
24
|
+
const metadata_sanitize_1 = require("./metadata-sanitize");
|
|
23
25
|
const stripe_utils_1 = require("./stripe-utils");
|
|
24
26
|
let StripeService = class StripeService {
|
|
25
|
-
constructor(connection, options) {
|
|
27
|
+
constructor(connection, options, moduleRef) {
|
|
26
28
|
this.connection = connection;
|
|
27
29
|
this.options = options;
|
|
30
|
+
this.moduleRef = moduleRef;
|
|
28
31
|
this.stripe = new stripe_1.default(this.options.apiKey, {
|
|
29
32
|
apiVersion: '2020-08-27',
|
|
30
33
|
});
|
|
@@ -35,6 +38,9 @@ let StripeService = class StripeService {
|
|
|
35
38
|
customerId = await this.getStripeCustomerId(ctx, order);
|
|
36
39
|
}
|
|
37
40
|
const amountInMinorUnits = stripe_utils_1.getAmountInStripeMinorUnits(order);
|
|
41
|
+
const metadata = metadata_sanitize_1.sanitizeMetadata(Object.assign(Object.assign({}, (typeof this.options.metadata === 'function'
|
|
42
|
+
? await this.options.metadata(new core_2.Injector(this.moduleRef), ctx, order)
|
|
43
|
+
: {})), { channelToken: ctx.channel.token, orderId: order.id, orderCode: order.code }));
|
|
38
44
|
const { client_secret } = await this.stripe.paymentIntents.create({
|
|
39
45
|
amount: amountInMinorUnits,
|
|
40
46
|
currency: order.currencyCode.toLowerCase(),
|
|
@@ -42,15 +48,11 @@ let StripeService = class StripeService {
|
|
|
42
48
|
automatic_payment_methods: {
|
|
43
49
|
enabled: true,
|
|
44
50
|
},
|
|
45
|
-
metadata
|
|
46
|
-
channelToken: ctx.channel.token,
|
|
47
|
-
orderId: order.id,
|
|
48
|
-
orderCode: order.code,
|
|
49
|
-
},
|
|
51
|
+
metadata,
|
|
50
52
|
}, { idempotencyKey: `${order.code}_${amountInMinorUnits}` });
|
|
51
53
|
if (!client_secret) {
|
|
52
54
|
// This should never happen
|
|
53
|
-
|
|
55
|
+
core_2.Logger.warn(`Payment intent creation for order ${order.code} did not return client secret`, constants_1.loggerCtx);
|
|
54
56
|
}
|
|
55
57
|
return client_secret !== null && client_secret !== void 0 ? client_secret : undefined;
|
|
56
58
|
}
|
|
@@ -78,7 +80,7 @@ let StripeService = class StripeService {
|
|
|
78
80
|
*/
|
|
79
81
|
async getStripeCustomerId(ctx, activeOrder) {
|
|
80
82
|
// Load relation with customer not available in the response from activeOrderService.getOrderFromContext()
|
|
81
|
-
const order = await this.connection.getRepository(
|
|
83
|
+
const order = await this.connection.getRepository(core_2.Order).findOne(activeOrder.id, {
|
|
82
84
|
relations: ['customer'],
|
|
83
85
|
});
|
|
84
86
|
if (!order || !order.customer) {
|
|
@@ -100,17 +102,17 @@ let StripeService = class StripeService {
|
|
|
100
102
|
name: `${customer.firstName} ${customer.lastName}`,
|
|
101
103
|
});
|
|
102
104
|
stripeCustomerId = newStripeCustomer.id;
|
|
103
|
-
|
|
105
|
+
core_2.Logger.info(`Created Stripe Customer record for customerId ${customer.id}`, constants_1.loggerCtx);
|
|
104
106
|
}
|
|
105
107
|
customer.customFields.stripeCustomerId = stripeCustomerId;
|
|
106
|
-
await this.connection.getRepository(ctx,
|
|
108
|
+
await this.connection.getRepository(ctx, core_2.Customer).save(customer, { reload: false });
|
|
107
109
|
return stripeCustomerId;
|
|
108
110
|
}
|
|
109
111
|
};
|
|
110
112
|
StripeService = __decorate([
|
|
111
113
|
common_1.Injectable(),
|
|
112
114
|
__param(1, common_1.Inject(constants_1.STRIPE_PLUGIN_OPTIONS)),
|
|
113
|
-
__metadata("design:paramtypes", [
|
|
115
|
+
__metadata("design:paramtypes", [core_2.TransactionalConnection, Object, core_1.ModuleRef])
|
|
114
116
|
], StripeService);
|
|
115
117
|
exports.StripeService = StripeService;
|
|
116
118
|
//# sourceMappingURL=stripe.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stripe.service.js","sourceRoot":"","sources":["../../src/stripe/stripe.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,2CAAoD;AACpD,
|
|
1
|
+
{"version":3,"file":"stripe.service.js","sourceRoot":"","sources":["../../src/stripe/stripe.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
+
import { Injector, Order, RequestContext } from '@vendure/core';
|
|
2
3
|
import '@vendure/core/dist/entity/custom-entity-fields';
|
|
3
4
|
import { Request } from 'express';
|
|
5
|
+
import Stripe from 'stripe';
|
|
4
6
|
declare module '@vendure/core/dist/entity/custom-entity-fields' {
|
|
5
7
|
interface CustomCustomerFields {
|
|
6
8
|
stripeCustomerId?: string;
|
|
@@ -34,6 +36,13 @@ export interface StripePluginOptions {
|
|
|
34
36
|
* @default false
|
|
35
37
|
*/
|
|
36
38
|
storeCustomersInStripe?: boolean;
|
|
39
|
+
/**
|
|
40
|
+
* @description
|
|
41
|
+
* Attach extra metadata to Stripe payment intent
|
|
42
|
+
*
|
|
43
|
+
* @since 1.9.7
|
|
44
|
+
*/
|
|
45
|
+
metadata?: (injector: Injector, ctx: RequestContext, order: Order) => Stripe.MetadataParam | Promise<Stripe.MetadataParam>;
|
|
37
46
|
}
|
|
38
47
|
export interface RequestWithRawBody extends Request {
|
|
39
48
|
rawBody: Buffer;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/stripe/types.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/stripe/types.ts"],"names":[],"mappings":";;AACA,0DAAwD"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vendure/payments-plugin",
|
|
3
|
-
"version": "1.9.
|
|
3
|
+
"version": "1.9.7",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"main": "package/index.js",
|
|
6
6
|
"types": "package/index.d.ts",
|
|
@@ -33,9 +33,9 @@
|
|
|
33
33
|
"@mollie/api-client": "^3.6.0",
|
|
34
34
|
"@types/braintree": "^2.22.15",
|
|
35
35
|
"@types/localtunnel": "2.0.1",
|
|
36
|
-
"@vendure/common": "^1.9.
|
|
37
|
-
"@vendure/core": "^1.9.
|
|
38
|
-
"@vendure/testing": "^1.9.
|
|
36
|
+
"@vendure/common": "^1.9.7",
|
|
37
|
+
"@vendure/core": "^1.9.7",
|
|
38
|
+
"@vendure/testing": "^1.9.7",
|
|
39
39
|
"braintree": "^3.0.0",
|
|
40
40
|
"localtunnel": "2.0.1",
|
|
41
41
|
"nock": "^13.1.4",
|
|
@@ -43,5 +43,5 @@
|
|
|
43
43
|
"stripe": "^8.197.0",
|
|
44
44
|
"typescript": "4.3.5"
|
|
45
45
|
},
|
|
46
|
-
"gitHead": "
|
|
46
|
+
"gitHead": "987ce391e09a702dd7016833549a3d275d0e5ca0"
|
|
47
47
|
}
|