@pinelab/vendure-plugin-anonymized-order 1.0.0
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/CHANGELOG.md +3 -0
- package/README.md +38 -0
- package/dist/anonymized-order.resolver.d.ts +10 -0
- package/dist/anonymized-order.resolver.js +39 -0
- package/dist/anonymized-order.service.d.ts +8 -0
- package/dist/anonymized-order.service.js +43 -0
- package/dist/api-extensions.d.ts +1 -0
- package/dist/api-extensions.js +12 -0
- package/dist/constants.d.ts +2 -0
- package/dist/constants.js +5 -0
- package/dist/generated/graphql.d.ts +30 -0
- package/dist/generated/graphql.js +2 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +20 -0
- package/dist/plugin.d.ts +5 -0
- package/dist/plugin.js +38 -0
- package/dist/types.d.ts +5 -0
- package/dist/types.js +2 -0
- package/package.json +31 -0
package/CHANGELOG.md
ADDED
package/README.md
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Vendure Anonymized Order
|
|
2
|
+
|
|
3
|
+
This plugin enables the retrieval of an anonymized customer order. By default, the `anonymizedOrder` query omits the fields `customer`, `billingAddress`, and `shippingAddress` from the order details. However, users have the flexibility to further customize this process by adding a callback, allowing the removal of additional fields as needed.
|
|
4
|
+
|
|
5
|
+
## Getting started
|
|
6
|
+
|
|
7
|
+
Add the plugin to your config:
|
|
8
|
+
|
|
9
|
+
```ts
|
|
10
|
+
import { AnonymizedOrderPlugin } from '@pinelab/vendure-plugin-anonymized-order';
|
|
11
|
+
plugins: [
|
|
12
|
+
AnonymizedOrderPlugin.init({
|
|
13
|
+
anonymizeOrderFn: (order) => {
|
|
14
|
+
order.lines = [];
|
|
15
|
+
},
|
|
16
|
+
}),
|
|
17
|
+
];
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Displaying placed order without requiring the customer to log in
|
|
21
|
+
|
|
22
|
+
The `anonymizedOrder` query can be used to display a customers' placed order permanently, instead of for a limited time only, like the built-in `orderByCode` query. This can be used to show a placed order via a link in email for example.
|
|
23
|
+
|
|
24
|
+
In the order confirmation email, you could have a link like `https://my-storefront.io/order/GX83VCD73?emailAddress=the-customer@email.com`. On your storefront, you'd then use the following query to display the order:
|
|
25
|
+
|
|
26
|
+
```graphql
|
|
27
|
+
anonymizedOrder(orderCode: "GX83VCD73", emailAddress: "the-customer@email.com") {
|
|
28
|
+
id
|
|
29
|
+
code
|
|
30
|
+
totalWithTax
|
|
31
|
+
lines {
|
|
32
|
+
id
|
|
33
|
+
linePriceWithTax
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
This will then return the order without `shippingAddress`, `billingAddress` and `customer` fields.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Order, RequestContext } from '@vendure/core';
|
|
2
|
+
import { AnonymizeOrderService } from './anonymized-order.service';
|
|
3
|
+
export declare class AnonymizeOrderShopResolver {
|
|
4
|
+
private readonly anonymizeOrderService;
|
|
5
|
+
constructor(anonymizeOrderService: AnonymizeOrderService);
|
|
6
|
+
anonymizedOrder(ctx: RequestContext, args: {
|
|
7
|
+
orderCode: string;
|
|
8
|
+
emailAddress: string;
|
|
9
|
+
}): Promise<Order>;
|
|
10
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.AnonymizeOrderShopResolver = void 0;
|
|
16
|
+
const graphql_1 = require("@nestjs/graphql");
|
|
17
|
+
const core_1 = require("@vendure/core");
|
|
18
|
+
const anonymized_order_service_1 = require("./anonymized-order.service");
|
|
19
|
+
let AnonymizeOrderShopResolver = class AnonymizeOrderShopResolver {
|
|
20
|
+
constructor(anonymizeOrderService) {
|
|
21
|
+
this.anonymizeOrderService = anonymizeOrderService;
|
|
22
|
+
}
|
|
23
|
+
async anonymizedOrder(ctx, args) {
|
|
24
|
+
return await this.anonymizeOrderService.getAnonymizedOrder(ctx, args.orderCode, args.emailAddress);
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
__decorate([
|
|
28
|
+
(0, graphql_1.Query)(),
|
|
29
|
+
__param(0, (0, core_1.Ctx)()),
|
|
30
|
+
__param(1, (0, graphql_1.Args)()),
|
|
31
|
+
__metadata("design:type", Function),
|
|
32
|
+
__metadata("design:paramtypes", [core_1.RequestContext, Object]),
|
|
33
|
+
__metadata("design:returntype", Promise)
|
|
34
|
+
], AnonymizeOrderShopResolver.prototype, "anonymizedOrder", null);
|
|
35
|
+
AnonymizeOrderShopResolver = __decorate([
|
|
36
|
+
(0, graphql_1.Resolver)(),
|
|
37
|
+
__metadata("design:paramtypes", [anonymized_order_service_1.AnonymizeOrderService])
|
|
38
|
+
], AnonymizeOrderShopResolver);
|
|
39
|
+
exports.AnonymizeOrderShopResolver = AnonymizeOrderShopResolver;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { AnonymizeOrderPluginOptions } from './types';
|
|
2
|
+
import { Order, OrderService, RequestContext } from '@vendure/core';
|
|
3
|
+
export declare class AnonymizeOrderService {
|
|
4
|
+
private readonly options;
|
|
5
|
+
private readonly orderService;
|
|
6
|
+
constructor(options: AnonymizeOrderPluginOptions, orderService: OrderService);
|
|
7
|
+
getAnonymizedOrder(ctx: RequestContext, orderCode: string, emailAddress: string): Promise<Order>;
|
|
8
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.AnonymizeOrderService = void 0;
|
|
16
|
+
const common_1 = require("@nestjs/common");
|
|
17
|
+
const constants_1 = require("./constants");
|
|
18
|
+
const core_1 = require("@vendure/core");
|
|
19
|
+
let AnonymizeOrderService = class AnonymizeOrderService {
|
|
20
|
+
constructor(options, orderService) {
|
|
21
|
+
this.options = options;
|
|
22
|
+
this.orderService = orderService;
|
|
23
|
+
}
|
|
24
|
+
async getAnonymizedOrder(ctx, orderCode, emailAddress) {
|
|
25
|
+
const order = await this.orderService.findOneByCode(ctx, orderCode);
|
|
26
|
+
if (order && order.customer?.emailAddress === emailAddress) {
|
|
27
|
+
order.customer = undefined;
|
|
28
|
+
order.shippingAddress = {};
|
|
29
|
+
order.billingAddress = {};
|
|
30
|
+
if (this.options?.anonymizeOrderFn) {
|
|
31
|
+
this.options.anonymizeOrderFn(order);
|
|
32
|
+
}
|
|
33
|
+
return order;
|
|
34
|
+
}
|
|
35
|
+
throw new core_1.ForbiddenError();
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
AnonymizeOrderService = __decorate([
|
|
39
|
+
(0, common_1.Injectable)(),
|
|
40
|
+
__param(0, (0, common_1.Inject)(constants_1.PLUGIN_INIT_OPTIONS)),
|
|
41
|
+
__metadata("design:paramtypes", [Object, core_1.OrderService])
|
|
42
|
+
], AnonymizeOrderService);
|
|
43
|
+
exports.AnonymizeOrderService = AnonymizeOrderService;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const anonymizeOrderShopSchema: import("graphql").DocumentNode;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.anonymizeOrderShopSchema = void 0;
|
|
4
|
+
const graphql_tag_1 = require("graphql-tag");
|
|
5
|
+
const scalars = (0, graphql_tag_1.gql) `
|
|
6
|
+
scalar Order
|
|
7
|
+
`;
|
|
8
|
+
exports.anonymizeOrderShopSchema = (0, graphql_tag_1.gql) `
|
|
9
|
+
extend type Query {
|
|
10
|
+
anonymizedOrder(orderCode: String!, emailAddress: String!): Order!
|
|
11
|
+
}
|
|
12
|
+
`;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export type Maybe<T> = T | null;
|
|
2
|
+
export type InputMaybe<T> = Maybe<T>;
|
|
3
|
+
export type Exact<T extends {
|
|
4
|
+
[key: string]: unknown;
|
|
5
|
+
}> = {
|
|
6
|
+
[K in keyof T]: T[K];
|
|
7
|
+
};
|
|
8
|
+
export type MakeOptional<T, K extends keyof T> = Omit<T, K> & {
|
|
9
|
+
[SubKey in K]?: Maybe<T[SubKey]>;
|
|
10
|
+
};
|
|
11
|
+
export type MakeMaybe<T, K extends keyof T> = Omit<T, K> & {
|
|
12
|
+
[SubKey in K]: Maybe<T[SubKey]>;
|
|
13
|
+
};
|
|
14
|
+
/** All built-in and custom scalars, mapped to their actual values */
|
|
15
|
+
export type Scalars = {
|
|
16
|
+
ID: string;
|
|
17
|
+
String: string;
|
|
18
|
+
Boolean: boolean;
|
|
19
|
+
Int: number;
|
|
20
|
+
Float: number;
|
|
21
|
+
Order: any;
|
|
22
|
+
};
|
|
23
|
+
export type Query = {
|
|
24
|
+
__typename?: 'Query';
|
|
25
|
+
anonymizedOrder: Scalars['Order'];
|
|
26
|
+
};
|
|
27
|
+
export type QueryAnonymizedOrderArgs = {
|
|
28
|
+
emailAddress: Scalars['String'];
|
|
29
|
+
orderCode: Scalars['String'];
|
|
30
|
+
};
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./plugin"), exports);
|
|
18
|
+
__exportStar(require("./types"), exports);
|
|
19
|
+
__exportStar(require("./anonymized-order.service"), exports);
|
|
20
|
+
__exportStar(require("./anonymized-order.resolver"), exports);
|
package/dist/plugin.d.ts
ADDED
package/dist/plugin.js
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var AnonymizedOrderPlugin_1;
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.AnonymizedOrderPlugin = void 0;
|
|
11
|
+
const core_1 = require("@vendure/core");
|
|
12
|
+
const anonymized_order_service_1 = require("./anonymized-order.service");
|
|
13
|
+
const constants_1 = require("./constants");
|
|
14
|
+
const anonymized_order_resolver_1 = require("./anonymized-order.resolver");
|
|
15
|
+
const api_extensions_1 = require("./api-extensions");
|
|
16
|
+
let AnonymizedOrderPlugin = AnonymizedOrderPlugin_1 = class AnonymizedOrderPlugin {
|
|
17
|
+
static init(options) {
|
|
18
|
+
this.options = options;
|
|
19
|
+
return AnonymizedOrderPlugin_1;
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
AnonymizedOrderPlugin = AnonymizedOrderPlugin_1 = __decorate([
|
|
23
|
+
(0, core_1.VendurePlugin)({
|
|
24
|
+
providers: [
|
|
25
|
+
anonymized_order_service_1.AnonymizeOrderService,
|
|
26
|
+
{
|
|
27
|
+
provide: constants_1.PLUGIN_INIT_OPTIONS,
|
|
28
|
+
useFactory: () => AnonymizedOrderPlugin_1.options,
|
|
29
|
+
},
|
|
30
|
+
],
|
|
31
|
+
shopApiExtensions: {
|
|
32
|
+
resolvers: [anonymized_order_resolver_1.AnonymizeOrderShopResolver],
|
|
33
|
+
schema: api_extensions_1.anonymizeOrderShopSchema,
|
|
34
|
+
},
|
|
35
|
+
imports: [core_1.PluginCommonModule],
|
|
36
|
+
})
|
|
37
|
+
], AnonymizedOrderPlugin);
|
|
38
|
+
exports.AnonymizedOrderPlugin = AnonymizedOrderPlugin;
|
package/dist/types.d.ts
ADDED
package/dist/types.js
ADDED
package/package.json
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@pinelab/vendure-plugin-anonymized-order",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "This plugin facilitates the retrieval of anonymized customer orders",
|
|
5
|
+
"icon": "incognito",
|
|
6
|
+
"author": "Surafel Tariku <surafelmelese09@gmail.com>",
|
|
7
|
+
"homepage": "https://pinelab-plugins.com/",
|
|
8
|
+
"repository": "https://github.com/Pinelab-studio/pinelab-vendure-plugins",
|
|
9
|
+
"license": "MIT",
|
|
10
|
+
"private": false,
|
|
11
|
+
"publishConfig": {
|
|
12
|
+
"access": "public"
|
|
13
|
+
},
|
|
14
|
+
"engines": {
|
|
15
|
+
"node": ">=16.0.0"
|
|
16
|
+
},
|
|
17
|
+
"main": "dist/index.js",
|
|
18
|
+
"types": "dist/index.d.ts",
|
|
19
|
+
"files": [
|
|
20
|
+
"dist",
|
|
21
|
+
"README.md",
|
|
22
|
+
"CHANGELOG.md"
|
|
23
|
+
],
|
|
24
|
+
"scripts": {
|
|
25
|
+
"start": "yarn ts-node test/dev-server.ts",
|
|
26
|
+
"build": "rimraf dist && yarn graphql-codegen && tsc",
|
|
27
|
+
"test": "vitest run",
|
|
28
|
+
"generate": "graphql-codegen"
|
|
29
|
+
},
|
|
30
|
+
"gitHead": "b6d884add25e1b5a335767af35ba52b13a2037ac"
|
|
31
|
+
}
|