@pinelab/vendure-plugin-webhook 1.2.0 → 1.2.1

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 CHANGED
@@ -1,4 +1,8 @@
1
- # 1.2.0 (2024-07-21)
1
+ # 1.2.1 (2024-06-26)
2
+
3
+ - Extended transformer function with webhook entity to make the event name accessible
4
+
5
+ # 1.2.0 (2024-06-21)
2
6
 
3
7
  - Updated Vendure to 2.2.6
4
8
 
package/README.md CHANGED
@@ -66,11 +66,12 @@ import { RequestTransformer } from '@pinelab/vendure-plugin-webhook';
66
66
  export const stringifyProductTransformer = new RequestTransformer({
67
67
  name: 'Stringify Product events',
68
68
  supportedEvents: [ProductEvent],
69
- transform: (event, injector) => {
69
+ transform: (event, injector, webhook) => {
70
70
  if (event instanceof ProductEvent) {
71
71
  return {
72
- body: JSON.stringify(event),
72
+ body: JSON.stringify({ event: webhook.event, ...event }), // Pass the event name to the body
73
73
  headers: {
74
+ authorization: 'Bearer MyToken',
74
75
  'x-custom-header': 'custom-example-header',
75
76
  'content-type': 'application/json',
76
77
  },
@@ -1,5 +1,6 @@
1
1
  import { Injector, RequestContext, Type, VendureEvent } from '@vendure/core';
2
- export type TransformFn<T extends EventWithContext> = (event: T, injector: Injector) => WebhookRequest | Promise<WebhookRequest>;
2
+ import { Webhook } from './webhook.entity';
3
+ export type TransformFn<T extends EventWithContext> = (event: T, injector: Injector, webhook: Webhook) => WebhookRequest | Promise<WebhookRequest>;
3
4
  export type EventWithContext = VendureEvent & {
4
5
  ctx: RequestContext;
5
6
  };
@@ -162,14 +162,19 @@ let WebhookService = class WebhookService {
162
162
  if (!transformer) {
163
163
  throw Error(`Could not find transformer ${webhook.transformerName}`);
164
164
  }
165
- const request = await transformer.transform(event, new core_2.Injector(this.moduleRef));
165
+ const request = await transformer.transform(event, new core_2.Injector(this.moduleRef), webhook);
166
166
  // Call the webhook with the constructed request
167
- await (0, node_fetch_1.default)(webhook.url, {
168
- method: 'POST',
169
- headers: request.headers,
170
- body: request.body,
171
- });
172
- core_2.Logger.info(`Successfully triggered webhook for event ${event.constructor.name} for channel ${webhook.channelId} with transformer "${webhook.transformerName}"`, constants_1.loggerCtx);
167
+ try {
168
+ await (0, node_fetch_1.default)(webhook.url, {
169
+ method: 'POST',
170
+ headers: request.headers,
171
+ body: request.body,
172
+ });
173
+ core_2.Logger.info(`Successfully triggered webhook for event ${event.constructor.name} for channel ${webhook.channelId} with transformer "${webhook.transformerName}"`, constants_1.loggerCtx);
174
+ }
175
+ catch (error) {
176
+ core_2.Logger.error(`Failed to call webhook for event ${webhook.event} channel ${webhook.channelId}: ${error}`, constants_1.loggerCtx);
177
+ }
173
178
  }
174
179
  };
175
180
  exports.WebhookService = WebhookService;
@@ -1,119 +1,127 @@
1
- <vdr-action-bar>
2
- <vdr-ab-right>
3
- <vdr-action-bar-items locationId="collection-list"></vdr-action-bar-items>
4
- <button class="btn btn-primary" (click)="showCreateModal()">
5
- <clr-icon shape="add"></clr-icon>
6
- Add Webhook
7
- </button>
8
- </vdr-ab-right>
9
- </vdr-action-bar>
10
- <clr-modal [(clrModalOpen)]="showMessage">
11
- <h3 class="modal-title">Add Webhook</h3>
12
- <div class="modal-body">
13
- <div class="popupContainer">
14
- <div class="card">
15
- <div style="width: 100%">
16
- <ul class="list-group list-group-flush">
17
- <li class="list-group-item">
18
- <h4 class="card-title">Request Transformer</h4>
19
- <select
20
- clrSelect
21
- [(ngModel)]="requestTransformerName"
22
- (ngModelChange)="requestTransformerSelected()"
23
- >
24
- <option value="{{ undefined }}">--select---</option>
25
- <option
26
- *ngFor="
27
- let transformers of avaiabelWebhookRequestTransformers
28
- "
29
- [value]="transformers.name"
30
- >
31
- {{ transformers.name }}
32
- </option>
33
- </select>
34
- </li>
35
- <li class="list-group-item">
36
- <h4 class="card-title">Event *</h4>
37
- <select clrSelect [(ngModel)]="eventName">
38
- <option value="{{ undefined }}">--select---</option>
39
- <option
40
- *ngFor="let event of filteredWeebhookEvents"
41
- [value]="event"
1
+ <vdr-page-block>
2
+ <vdr-action-bar>
3
+ <vdr-ab-right>
4
+ <vdr-action-bar-items locationId="collection-list"></vdr-action-bar-items>
5
+ <button class="btn btn-primary" (click)="showCreateModal()">
6
+ <clr-icon shape="add"></clr-icon>
7
+ Add Webhook
8
+ </button>
9
+ </vdr-ab-right>
10
+ </vdr-action-bar>
11
+
12
+ <clr-modal [(clrModalOpen)]="showMessage">
13
+ <h3 class="modal-title">Add Webhook</h3>
14
+ <div class="modal-body">
15
+ <div class="popupContainer">
16
+ <div class="card">
17
+ <div style="width: 100%">
18
+ <ul class="list-group list-group-flush">
19
+ <li class="list-group-item">
20
+ <h4 class="card-title">Request Transformer</h4>
21
+ <select
22
+ clrSelect
23
+ [(ngModel)]="requestTransformerName"
24
+ (ngModelChange)="requestTransformerSelected()"
42
25
  >
43
- {{ event }}
44
- </option>
45
- </select>
46
- </li>
47
- <li class="list-group-item">
48
- <h4 class="card-title">URL *</h4>
49
- <input
50
- clrInput
51
- placeholder="https://"
52
- name="input"
53
- [(ngModel)]="url"
54
- />
55
- </li>
56
- </ul>
26
+ <option value="{{ undefined }}">--select---</option>
27
+ <option
28
+ *ngFor="
29
+ let transformers of avaiabelWebhookRequestTransformers
30
+ "
31
+ [value]="transformers.name"
32
+ >
33
+ {{ transformers.name }}
34
+ </option>
35
+ </select>
36
+ </li>
37
+ <li class="list-group-item">
38
+ <h4 class="card-title">Event *</h4>
39
+ <select clrSelect [(ngModel)]="eventName">
40
+ <option value="{{ undefined }}">--select---</option>
41
+ <option
42
+ *ngFor="let event of filteredWeebhookEvents"
43
+ [value]="event"
44
+ >
45
+ {{ event }}
46
+ </option>
47
+ </select>
48
+ </li>
49
+ <li class="list-group-item">
50
+ <h4 class="card-title">URL *</h4>
51
+ <input
52
+ clrInput
53
+ placeholder="https://"
54
+ name="input"
55
+ [(ngModel)]="url"
56
+ />
57
+ </li>
58
+ </ul>
59
+ </div>
57
60
  </div>
58
61
  </div>
59
62
  </div>
60
- </div>
61
- <div class="modal-footer">
62
- <button type="button" class="btn btn-outline" (click)="showMessage = false">
63
- Cancel
64
- </button>
65
- <button class="btn btn-primary" (click)="create()">Submit</button>
66
- </div>
67
- </clr-modal>
68
- <vdr-data-table
69
- [items]="webhooks"
70
- [itemsPerPage]="itemsPerPage"
71
- [totalItems]="webhooks.length"
72
- [currentPage]="currentPage"
73
- (pageChange)="setPageNumber($event)"
74
- (itemsPerPageChange)="setItemsPerPage($event)"
75
- >
76
- <vdr-dt-column>Event</vdr-dt-column>
77
- <vdr-dt-column>Request Transformer</vdr-dt-column>
78
- <vdr-dt-column>URL</vdr-dt-column>
79
- <vdr-dt-column></vdr-dt-column>
63
+ <div class="modal-footer">
64
+ <button
65
+ type="button"
66
+ class="btn btn-outline"
67
+ (click)="showMessage = false"
68
+ >
69
+ Cancel
70
+ </button>
71
+ <button class="btn btn-primary" (click)="create()">Submit</button>
72
+ </div>
73
+ </clr-modal>
80
74
 
81
- <ng-template let-webhook="item">
82
- <td class="left align-middle">
83
- {{ webhook.event }}
84
- </td>
85
- <td class="left align-middle">
86
- {{ webhook.requestTransformer?.name }}
87
- </td>
88
- <td class="left align-middle">
89
- {{ webhook.url }}
90
- </td>
91
- <td>
92
- <vdr-dropdown>
93
- <button type="button" class="btn btn-link btn-sm" vdrDropdownTrigger>
94
- {{ 'common.actions' | translate }}
95
- <clr-icon shape="caret down"></clr-icon>
96
- </button>
97
- <vdr-dropdown-menu vdrPosition="bottom-right">
98
- <button
99
- type="button"
100
- class="delete-button"
101
- (click)="deleteWeebhook(webhook.id)"
102
- vdrDropdownItem
103
- >
104
- <clr-icon shape="trash" class="is-danger"></clr-icon>
105
- {{ 'common.delete' | translate }}
106
- </button>
107
- <button
108
- type="button"
109
- (click)="duplicate(webhook.requestTransformer?.name, webhook.url)"
110
- vdrDropdownItem
111
- >
112
- <clr-icon shape="copy"></clr-icon>
113
- Duplicate
75
+ <vdr-data-table
76
+ [items]="webhooks"
77
+ [itemsPerPage]="itemsPerPage"
78
+ [totalItems]="webhooks.length"
79
+ [currentPage]="currentPage"
80
+ (pageChange)="setPageNumber($event)"
81
+ (itemsPerPageChange)="setItemsPerPage($event)"
82
+ >
83
+ <vdr-dt-column>Event</vdr-dt-column>
84
+ <vdr-dt-column>Request Transformer</vdr-dt-column>
85
+ <vdr-dt-column>URL</vdr-dt-column>
86
+ <vdr-dt-column></vdr-dt-column>
87
+
88
+ <ng-template let-webhook="item">
89
+ <td class="left align-middle">
90
+ {{ webhook.event }}
91
+ </td>
92
+ <td class="left align-middle">
93
+ {{ webhook.requestTransformer?.name }}
94
+ </td>
95
+ <td class="left align-middle">
96
+ {{ webhook.url }}
97
+ </td>
98
+ <td>
99
+ <vdr-dropdown>
100
+ <button type="button" class="btn btn-link btn-sm" vdrDropdownTrigger>
101
+ {{ 'common.actions' | translate }}
102
+ <clr-icon shape="caret down"></clr-icon>
114
103
  </button>
115
- </vdr-dropdown-menu>
116
- </vdr-dropdown>
117
- </td>
118
- </ng-template>
119
- </vdr-data-table>
104
+ <vdr-dropdown-menu vdrPosition="bottom-right">
105
+ <button
106
+ type="button"
107
+ class="delete-button"
108
+ (click)="deleteWeebhook(webhook.id)"
109
+ vdrDropdownItem
110
+ >
111
+ <clr-icon shape="trash" class="is-danger"></clr-icon>
112
+ {{ 'common.delete' | translate }}
113
+ </button>
114
+ <button
115
+ type="button"
116
+ (click)="duplicate(webhook.requestTransformer?.name, webhook.url)"
117
+ vdrDropdownItem
118
+ >
119
+ <clr-icon shape="copy"></clr-icon>
120
+ Duplicate
121
+ </button>
122
+ </vdr-dropdown-menu>
123
+ </vdr-dropdown>
124
+ </td>
125
+ </ng-template>
126
+ </vdr-data-table>
127
+ </vdr-page-block>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pinelab/vendure-plugin-webhook",
3
- "version": "1.2.0",
3
+ "version": "1.2.1",
4
4
  "description": "Call webhooks based on configured events from Vendure",
5
5
  "author": "Martijn van de Brug <martijn@pinelab.studio>",
6
6
  "homepage": "https://pinelab-plugins.com/",
@@ -23,5 +23,5 @@
23
23
  "test": "vitest run",
24
24
  "lint": "echo 'No linting configured'"
25
25
  },
26
- "gitHead": "a4375f51797b974b3edfb15e6f68926e7ccebe96"
26
+ "gitHead": "89ac3a3a6e1d156b43cd5d65a01ee057bd2ee43a"
27
27
  }