@mainsail/webhooks 0.0.1-alpha.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/LICENSE +623 -0
- package/distribution/conditions.d.ts +15 -0
- package/distribution/conditions.d.ts.map +1 -0
- package/distribution/conditions.js +40 -0
- package/distribution/conditions.js.map +1 -0
- package/distribution/database.d.ts +14 -0
- package/distribution/database.d.ts.map +1 -0
- package/distribution/database.js +79 -0
- package/distribution/database.js.map +1 -0
- package/distribution/defaults.d.ts +12 -0
- package/distribution/defaults.d.ts.map +1 -0
- package/distribution/defaults.js +17 -0
- package/distribution/defaults.js.map +1 -0
- package/distribution/events.d.ts +5 -0
- package/distribution/events.d.ts.map +1 -0
- package/distribution/events.js +9 -0
- package/distribution/events.js.map +1 -0
- package/distribution/identifiers.d.ts +7 -0
- package/distribution/identifiers.d.ts.map +1 -0
- package/distribution/identifiers.js +10 -0
- package/distribution/identifiers.js.map +1 -0
- package/distribution/index.d.ts +2 -0
- package/distribution/index.d.ts.map +1 -0
- package/distribution/index.js +18 -0
- package/distribution/index.js.map +1 -0
- package/distribution/interfaces.d.ts +13 -0
- package/distribution/interfaces.d.ts.map +1 -0
- package/distribution/interfaces.js +3 -0
- package/distribution/interfaces.js.map +1 -0
- package/distribution/listener.d.ts +13 -0
- package/distribution/listener.d.ts.map +1 -0
- package/distribution/listener.js +127 -0
- package/distribution/listener.js.map +1 -0
- package/distribution/server/index.d.ts +2 -0
- package/distribution/server/index.d.ts.map +1 -0
- package/distribution/server/index.js +18 -0
- package/distribution/server/index.js.map +1 -0
- package/distribution/server/plugins/whitelist.d.ts +6 -0
- package/distribution/server/plugins/whitelist.d.ts.map +1 -0
- package/distribution/server/plugins/whitelist.js +27 -0
- package/distribution/server/plugins/whitelist.js.map +1 -0
- package/distribution/server/schema.d.ts +6 -0
- package/distribution/server/schema.d.ts.map +1 -0
- package/distribution/server/schema.js +67 -0
- package/distribution/server/schema.js.map +1 -0
- package/distribution/server/server.d.ts +18 -0
- package/distribution/server/server.d.ts.map +1 -0
- package/distribution/server/server.js +253 -0
- package/distribution/server/server.js.map +1 -0
- package/distribution/server/utils.d.ts +7 -0
- package/distribution/server/utils.d.ts.map +1 -0
- package/distribution/server/utils.js +16 -0
- package/distribution/server/utils.js.map +1 -0
- package/distribution/service-provider.d.ts +10 -0
- package/distribution/service-provider.d.ts.map +1 -0
- package/distribution/service-provider.js +68 -0
- package/distribution/service-provider.js.map +1 -0
- package/package.json +44 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../source/server/server.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAE7F,OAAO,EAAE,SAAS,EAAe,MAAM,qBAAqB,CAAC;AAI7D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAOvC,MAAM,MAAM,eAAe,GAAG;IAAE,QAAQ,EAAE,QAAQ,CAAA;CAAE,CAAC;AACrD,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC;AAExD,qBACa,MAAM;;IAElB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAgC;IAGpD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAY;IAGrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2B;IAIrC,QAAQ,CAAC,aAAa,EAAE,SAAS,CAAC,KAAK,CAAC,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBlE,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAUrB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAUxB,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC;CAiKzF"}
|
|
@@ -0,0 +1,253 @@
|
|
|
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
19
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
20
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
21
|
+
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;
|
|
22
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
23
|
+
};
|
|
24
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
25
|
+
if (mod && mod.__esModule) return mod;
|
|
26
|
+
var result = {};
|
|
27
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
28
|
+
__setModuleDefault(result, mod);
|
|
29
|
+
return result;
|
|
30
|
+
};
|
|
31
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
32
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
33
|
+
};
|
|
34
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
35
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
36
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
37
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
38
|
+
};
|
|
39
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
40
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
41
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
42
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
43
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
44
|
+
};
|
|
45
|
+
var _Server_instances, _Server_server, _Server_getServerOptions, _Server_registerPlugins, _Server_registerRoutes;
|
|
46
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
47
|
+
exports.Server = void 0;
|
|
48
|
+
const boom_1 = __importStar(require("@hapi/boom"));
|
|
49
|
+
const hapi_1 = require("@hapi/hapi");
|
|
50
|
+
const container_1 = require("@mainsail/container");
|
|
51
|
+
const contracts_1 = require("@mainsail/contracts");
|
|
52
|
+
const kernel_1 = require("@mainsail/kernel");
|
|
53
|
+
const crypto_1 = require("crypto");
|
|
54
|
+
const database_1 = require("../database");
|
|
55
|
+
const identifiers_1 = require("../identifiers");
|
|
56
|
+
const whitelist_1 = require("./plugins/whitelist");
|
|
57
|
+
const schema_1 = require("./schema");
|
|
58
|
+
const utils_1 = require("./utils");
|
|
59
|
+
let Server = class Server {
|
|
60
|
+
constructor() {
|
|
61
|
+
_Server_instances.add(this);
|
|
62
|
+
_Server_server.set(this, void 0);
|
|
63
|
+
}
|
|
64
|
+
async register(optionsServer) {
|
|
65
|
+
__classPrivateFieldSet(this, _Server_server, new hapi_1.Server(__classPrivateFieldGet(this, _Server_instances, "m", _Server_getServerOptions).call(this, optionsServer)), "f");
|
|
66
|
+
__classPrivateFieldGet(this, _Server_server, "f").app.database = this.database;
|
|
67
|
+
__classPrivateFieldGet(this, _Server_server, "f").ext({
|
|
68
|
+
async method(request, h) {
|
|
69
|
+
request.headers["content-type"] = "application/json";
|
|
70
|
+
return h.continue;
|
|
71
|
+
},
|
|
72
|
+
type: "onPreHandler",
|
|
73
|
+
});
|
|
74
|
+
await __classPrivateFieldGet(this, _Server_instances, "m", _Server_registerPlugins).call(this, optionsServer);
|
|
75
|
+
__classPrivateFieldGet(this, _Server_instances, "m", _Server_registerRoutes).call(this);
|
|
76
|
+
}
|
|
77
|
+
async boot() {
|
|
78
|
+
try {
|
|
79
|
+
await __classPrivateFieldGet(this, _Server_server, "f").start();
|
|
80
|
+
this.logger.info(`Webhook Server started at ${__classPrivateFieldGet(this, _Server_server, "f").info.uri}`);
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
await this.app.terminate(`Failed to start Webhook Server!`, error);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
async dispose() {
|
|
87
|
+
try {
|
|
88
|
+
await __classPrivateFieldGet(this, _Server_server, "f").stop();
|
|
89
|
+
this.logger.info(`Webhook Server stopped at ${__classPrivateFieldGet(this, _Server_server, "f").info.uri}`);
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
await this.app.terminate(`Failed to stop Webhook Server!`, error);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
async inject(options) {
|
|
96
|
+
return __classPrivateFieldGet(this, _Server_server, "f").inject(options);
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
exports.Server = Server;
|
|
100
|
+
_Server_server = new WeakMap();
|
|
101
|
+
_Server_instances = new WeakSet();
|
|
102
|
+
_Server_getServerOptions = function _Server_getServerOptions(options) {
|
|
103
|
+
options = {
|
|
104
|
+
...options.http,
|
|
105
|
+
whitelist: options.whitelist,
|
|
106
|
+
};
|
|
107
|
+
delete options.http;
|
|
108
|
+
delete options.enabled;
|
|
109
|
+
delete options.whitelist;
|
|
110
|
+
return {
|
|
111
|
+
router: {
|
|
112
|
+
stripTrailingSlash: true,
|
|
113
|
+
},
|
|
114
|
+
routes: {
|
|
115
|
+
/* c8 ignore next 3 */
|
|
116
|
+
payload: {
|
|
117
|
+
async failAction(request, h, error) {
|
|
118
|
+
return (0, boom_1.badData)(error.message);
|
|
119
|
+
},
|
|
120
|
+
},
|
|
121
|
+
/* c8 ignore next 3 */
|
|
122
|
+
validate: {
|
|
123
|
+
async failAction(request, h, error) {
|
|
124
|
+
return (0, boom_1.badData)(error.message);
|
|
125
|
+
},
|
|
126
|
+
},
|
|
127
|
+
},
|
|
128
|
+
...options,
|
|
129
|
+
};
|
|
130
|
+
};
|
|
131
|
+
_Server_registerPlugins = async function _Server_registerPlugins(config) {
|
|
132
|
+
await __classPrivateFieldGet(this, _Server_server, "f").register({
|
|
133
|
+
options: {
|
|
134
|
+
whitelist: config.whitelist,
|
|
135
|
+
},
|
|
136
|
+
plugin: whitelist_1.whitelist,
|
|
137
|
+
});
|
|
138
|
+
};
|
|
139
|
+
_Server_registerRoutes = function _Server_registerRoutes() {
|
|
140
|
+
__classPrivateFieldGet(this, _Server_server, "f").route({
|
|
141
|
+
handler() {
|
|
142
|
+
return { data: "Hello World!" };
|
|
143
|
+
},
|
|
144
|
+
method: "GET",
|
|
145
|
+
path: "/",
|
|
146
|
+
});
|
|
147
|
+
__classPrivateFieldGet(this, _Server_server, "f").route({
|
|
148
|
+
handler: (request) => ({
|
|
149
|
+
// @ts-ignore TODO: check typings
|
|
150
|
+
data: request.server.app.database.all().map((webhook) => {
|
|
151
|
+
webhook = { ...webhook };
|
|
152
|
+
delete webhook.token;
|
|
153
|
+
return webhook;
|
|
154
|
+
}),
|
|
155
|
+
}),
|
|
156
|
+
method: "GET",
|
|
157
|
+
path: "/api/webhooks",
|
|
158
|
+
});
|
|
159
|
+
__classPrivateFieldGet(this, _Server_server, "f").route({
|
|
160
|
+
handler(request, h) {
|
|
161
|
+
const token = (0, crypto_1.randomBytes)(32).toString("hex");
|
|
162
|
+
return h
|
|
163
|
+
.response((0, utils_1.respondWithResource)({
|
|
164
|
+
...request.server.app.database.create({
|
|
165
|
+
...request.payload,
|
|
166
|
+
token: token.slice(0, 32),
|
|
167
|
+
}),
|
|
168
|
+
token,
|
|
169
|
+
}))
|
|
170
|
+
.code(201);
|
|
171
|
+
},
|
|
172
|
+
method: "POST",
|
|
173
|
+
options: {
|
|
174
|
+
plugins: {
|
|
175
|
+
pagination: {
|
|
176
|
+
enabled: false,
|
|
177
|
+
},
|
|
178
|
+
},
|
|
179
|
+
validate: schema_1.store,
|
|
180
|
+
},
|
|
181
|
+
path: "/api/webhooks",
|
|
182
|
+
});
|
|
183
|
+
__classPrivateFieldGet(this, _Server_server, "f").route({
|
|
184
|
+
async handler(request) {
|
|
185
|
+
// @ts-ignore TODO: check typings
|
|
186
|
+
if (!request.server.app.database.hasById(request.params.id)) {
|
|
187
|
+
return boom_1.default.notFound();
|
|
188
|
+
}
|
|
189
|
+
const webhook = kernel_1.Utils.cloneDeep(
|
|
190
|
+
// @ts-ignore TODO: check typings
|
|
191
|
+
request.server.app.database.findById(request.params.id));
|
|
192
|
+
/* c8 ignore next 3 */
|
|
193
|
+
if (!webhook) {
|
|
194
|
+
return boom_1.default.badImplementation();
|
|
195
|
+
}
|
|
196
|
+
delete webhook.token;
|
|
197
|
+
return (0, utils_1.respondWithResource)(webhook);
|
|
198
|
+
},
|
|
199
|
+
method: "GET",
|
|
200
|
+
options: {
|
|
201
|
+
validate: schema_1.show,
|
|
202
|
+
},
|
|
203
|
+
path: "/api/webhooks/{id}",
|
|
204
|
+
});
|
|
205
|
+
__classPrivateFieldGet(this, _Server_server, "f").route({
|
|
206
|
+
handler: (request, h) => {
|
|
207
|
+
// @ts-ignore TODO: check typings
|
|
208
|
+
if (!request.server.app.database.hasById(request.params.id)) {
|
|
209
|
+
return boom_1.default.notFound();
|
|
210
|
+
}
|
|
211
|
+
// @ts-ignore TODO: check typings
|
|
212
|
+
request.server.app.database.update(request.params.id, request.payload);
|
|
213
|
+
return h.response().code(204);
|
|
214
|
+
},
|
|
215
|
+
method: "PUT",
|
|
216
|
+
options: {
|
|
217
|
+
validate: schema_1.update,
|
|
218
|
+
},
|
|
219
|
+
path: "/api/webhooks/{id}",
|
|
220
|
+
});
|
|
221
|
+
__classPrivateFieldGet(this, _Server_server, "f").route({
|
|
222
|
+
handler: (request, h) => {
|
|
223
|
+
// @ts-ignore TODO: check typings
|
|
224
|
+
if (!request.server.app.database.hasById(request.params.id)) {
|
|
225
|
+
return boom_1.default.notFound();
|
|
226
|
+
}
|
|
227
|
+
// @ts-ignore TODO: check typings
|
|
228
|
+
request.server.app.database.destroy(request.params.id);
|
|
229
|
+
return h.response().code(204);
|
|
230
|
+
},
|
|
231
|
+
method: "DELETE",
|
|
232
|
+
options: {
|
|
233
|
+
validate: schema_1.destroy,
|
|
234
|
+
},
|
|
235
|
+
path: "/api/webhooks/{id}",
|
|
236
|
+
});
|
|
237
|
+
};
|
|
238
|
+
__decorate([
|
|
239
|
+
(0, container_1.inject)(contracts_1.Identifiers.Application.Instance),
|
|
240
|
+
__metadata("design:type", Object)
|
|
241
|
+
], Server.prototype, "app", void 0);
|
|
242
|
+
__decorate([
|
|
243
|
+
(0, container_1.inject)(identifiers_1.InternalIdentifiers.Database),
|
|
244
|
+
__metadata("design:type", database_1.Database)
|
|
245
|
+
], Server.prototype, "database", void 0);
|
|
246
|
+
__decorate([
|
|
247
|
+
(0, container_1.inject)(contracts_1.Identifiers.Services.Log.Service),
|
|
248
|
+
__metadata("design:type", Object)
|
|
249
|
+
], Server.prototype, "logger", void 0);
|
|
250
|
+
exports.Server = Server = __decorate([
|
|
251
|
+
(0, container_1.injectable)()
|
|
252
|
+
], Server);
|
|
253
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../source/server/server.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mDAA2C;AAC3C,qCAA6F;AAC7F,mDAAyD;AACzD,mDAA6D;AAC7D,6CAAyC;AACzC,mCAAqC;AAErC,0CAAuC;AACvC,gDAAqD;AAErD,mDAAgD;AAChD,qCAAwD;AACxD,mCAA8C;AAMvC,IAAM,MAAM,GAAZ,MAAM,MAAM;IAAZ;;QAUN,iCAAwB;IAyMzB,CAAC;IAvMO,KAAK,CAAC,QAAQ,CAAC,aAAyC;QAC9D,uBAAA,IAAI,kBAAW,IAAI,aAAU,CAAC,uBAAA,IAAI,mDAAkB,MAAtB,IAAI,EAAmB,aAAa,CAAC,CAAC,MAAA,CAAC;QACrE,uBAAA,IAAI,sBAAQ,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAE1C,uBAAA,IAAI,sBAAQ,CAAC,GAAG,CAAC;YAChB,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACtB,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,kBAAkB,CAAC;gBAErD,OAAO,CAAC,CAAC,QAAQ,CAAC;YACnB,CAAC;YACD,IAAI,EAAE,cAAc;SACpB,CAAC,CAAC;QAEH,MAAM,uBAAA,IAAI,kDAAiB,MAArB,IAAI,EAAkB,aAAa,CAAC,CAAC;QAE3C,uBAAA,IAAI,iDAAgB,MAApB,IAAI,CAAkB,CAAC;IACxB,CAAC;IAEM,KAAK,CAAC,IAAI;QAChB,IAAI,CAAC;YACJ,MAAM,uBAAA,IAAI,sBAAQ,CAAC,KAAK,EAAE,CAAC;YAE3B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,6BAA6B,uBAAA,IAAI,sBAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACxE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;QACpE,CAAC;IACF,CAAC;IAEM,KAAK,CAAC,OAAO;QACnB,IAAI,CAAC;YACJ,MAAM,uBAAA,IAAI,sBAAQ,CAAC,IAAI,EAAE,CAAC;YAE1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,6BAA6B,uBAAA,IAAI,sBAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACxE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;QACnE,CAAC;IACF,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,OAAqC;QACxD,OAAO,uBAAA,IAAI,sBAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;CA+JD,CAAA;AAnNY,wBAAM;;;6DAsDA,OAA4B;IAC7C,OAAO,GAAG;QACT,GAAG,OAAO,CAAC,IAAI;QACf,SAAS,EAAE,OAAO,CAAC,SAAS;KAC5B,CAAC;IAEF,OAAO,OAAO,CAAC,IAAI,CAAC;IACpB,OAAO,OAAO,CAAC,OAAO,CAAC;IACvB,OAAO,OAAO,CAAC,SAAS,CAAC;IAEzB,OAAO;QACN,MAAM,EAAE;YACP,kBAAkB,EAAE,IAAI;SACxB;QACD,MAAM,EAAE;YACP,sBAAsB;YACtB,OAAO,EAAE;gBACR,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,EAAE,KAAK;oBACjC,OAAO,IAAA,cAAO,EAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC/B,CAAC;aACD;YACD,sBAAsB;YACtB,QAAQ,EAAE;gBACT,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,EAAE,KAAK;oBACjC,OAAO,IAAA,cAAO,EAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC/B,CAAC;aACD;SACD;QACD,GAAG,OAAO;KACV,CAAC;AACH,CAAC;0BAED,KAAK,kCAAkB,MAAkC;IACxD,MAAM,uBAAA,IAAI,sBAAQ,CAAC,QAAQ,CAAC;QAC3B,OAAO,EAAE;YACR,SAAS,EAAE,MAAM,CAAC,SAAS;SAC3B;QACD,MAAM,EAAE,qBAAS;KACjB,CAAC,CAAC;AACJ,CAAC;;IAGA,uBAAA,IAAI,sBAAQ,CAAC,KAAK,CAAC;QAClB,OAAO;YACN,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;QACjC,CAAC;QACD,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,GAAG;KACT,CAAC,CAAC;IAEH,uBAAA,IAAI,sBAAQ,CAAC,KAAK,CAAC;QAClB,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACtB,iCAAiC;YACjC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;gBACvD,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;gBACzB,OAAO,OAAO,CAAC,KAAK,CAAC;gBACrB,OAAO,OAAO,CAAC;YAChB,CAAC,CAAC;SACF,CAAC;QACF,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,eAAe;KACrB,CAAC,CAAC;IAEH,uBAAA,IAAI,sBAAQ,CAAC,KAAK,CAAC;QAClB,OAAO,CAAC,OAAY,EAAE,CAAC;YACtB,MAAM,KAAK,GAAW,IAAA,oBAAW,EAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAEtD,OAAO,CAAC;iBACN,QAAQ,CACR,IAAA,2BAAmB,EAAC;gBACnB,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;oBACrC,GAAG,OAAO,CAAC,OAAO;oBAClB,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;iBACzB,CAAC;gBACF,KAAK;aACL,CAAC,CACF;iBACA,IAAI,CAAC,GAAG,CAAC,CAAC;QACb,CAAC;QACD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACR,OAAO,EAAE;gBACR,UAAU,EAAE;oBACX,OAAO,EAAE,KAAK;iBACd;aACD;YACD,QAAQ,EAAE,cAAK;SACf;QACD,IAAI,EAAE,eAAe;KACrB,CAAC,CAAC;IAEH,uBAAA,IAAI,sBAAQ,CAAC,KAAK,CAAC;QAClB,KAAK,CAAC,OAAO,CAAC,OAAO;YACpB,iCAAiC;YACjC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC7D,OAAO,cAAI,CAAC,QAAQ,EAAE,CAAC;YACxB,CAAC;YAED,MAAM,OAAO,GAAwB,cAAK,CAAC,SAAS;YACnD,iCAAiC;YACjC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CACvD,CAAC;YAEF,sBAAsB;YACtB,IAAI,CAAC,OAAO,EAAE,CAAC;gBACd,OAAO,cAAI,CAAC,iBAAiB,EAAE,CAAC;YACjC,CAAC;YAED,OAAO,OAAO,CAAC,KAAK,CAAC;YAErB,OAAO,IAAA,2BAAmB,EAAC,OAAO,CAAC,CAAC;QACrC,CAAC;QACD,MAAM,EAAE,KAAK;QACb,OAAO,EAAE;YACR,QAAQ,EAAE,aAAI;SACd;QACD,IAAI,EAAE,oBAAoB;KAC1B,CAAC,CAAC;IAEH,uBAAA,IAAI,sBAAQ,CAAC,KAAK,CAAC;QAClB,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE;YACvB,iCAAiC;YACjC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC7D,OAAO,cAAI,CAAC,QAAQ,EAAE,CAAC;YACxB,CAAC;YAED,iCAAiC;YACjC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,OAAkB,CAAC,CAAC;YAElF,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/B,CAAC;QACD,MAAM,EAAE,KAAK;QACb,OAAO,EAAE;YACR,QAAQ,EAAE,eAAM;SAChB;QACD,IAAI,EAAE,oBAAoB;KAC1B,CAAC,CAAC;IAEH,uBAAA,IAAI,sBAAQ,CAAC,KAAK,CAAC;QAClB,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE;YACvB,iCAAiC;YACjC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC7D,OAAO,cAAI,CAAC,QAAQ,EAAE,CAAC;YACxB,CAAC;YAED,iCAAiC;YACjC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAEvD,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/B,CAAC;QACD,MAAM,EAAE,QAAQ;QAChB,OAAO,EAAE;YACR,QAAQ,EAAE,gBAAO;SACjB;QACD,IAAI,EAAE,oBAAoB;KAC1B,CAAC,CAAC;AACJ,CAAC;AAhNgB;IADhB,IAAA,kBAAM,EAAC,uBAAW,CAAC,WAAW,CAAC,QAAQ,CAAC;;mCACW;AAGnC;IADhB,IAAA,kBAAM,EAAC,iCAAmB,CAAC,QAAQ,CAAC;8BACT,mBAAQ;wCAAC;AAGpB;IADhB,IAAA,kBAAM,EAAC,uBAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC;;sCACS;iBARtC,MAAM;IADlB,IAAA,sBAAU,GAAE;GACA,MAAM,CAmNlB"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Boom } from "@hapi/boom";
|
|
2
|
+
import { Webhook } from "../interfaces";
|
|
3
|
+
export declare const transformResource: (model: any) => Webhook;
|
|
4
|
+
export declare const respondWithResource: (data: any) => {
|
|
5
|
+
data: Webhook;
|
|
6
|
+
} | Boom<Webhook>;
|
|
7
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../source/server/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAY,MAAM,YAAY,CAAC;AAE5C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,eAAO,MAAM,iBAAiB,kBAAY,OAOxC,CAAC;AAEH,eAAO,MAAM,mBAAmB;UAAmB,OAAO;iBACJ,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.respondWithResource = exports.transformResource = void 0;
|
|
4
|
+
const boom_1 = require("@hapi/boom");
|
|
5
|
+
const transformResource = (model) => ({
|
|
6
|
+
conditions: model.conditions,
|
|
7
|
+
enabled: model.enabled,
|
|
8
|
+
event: model.event,
|
|
9
|
+
id: model.id,
|
|
10
|
+
target: model.target,
|
|
11
|
+
token: model.token,
|
|
12
|
+
});
|
|
13
|
+
exports.transformResource = transformResource;
|
|
14
|
+
const respondWithResource = (data) => data ? { data: (0, exports.transformResource)(data) } : (0, boom_1.notFound)();
|
|
15
|
+
exports.respondWithResource = respondWithResource;
|
|
16
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../source/server/utils.ts"],"names":[],"mappings":";;;AAAA,qCAA4C;AAIrC,MAAM,iBAAiB,GAAG,CAAC,KAAK,EAAW,EAAE,CAAC,CAAC;IACrD,UAAU,EAAE,KAAK,CAAC,UAAU;IAC5B,OAAO,EAAE,KAAK,CAAC,OAAO;IACtB,KAAK,EAAE,KAAK,CAAC,KAAK;IAClB,EAAE,EAAE,KAAK,CAAC,EAAE;IACZ,MAAM,EAAE,KAAK,CAAC,MAAM;IACpB,KAAK,EAAE,KAAK,CAAC,KAAK;CAClB,CAAC,CAAC;AAPU,QAAA,iBAAiB,qBAO3B;AAEI,MAAM,mBAAmB,GAAG,CAAC,IAAI,EAAqC,EAAE,CAC9E,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAA,yBAAiB,EAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAA,eAAQ,GAAE,CAAC;AAD1C,QAAA,mBAAmB,uBACuB"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Providers } from "@mainsail/kernel";
|
|
2
|
+
export declare class ServiceProvider extends Providers.ServiceProvider {
|
|
3
|
+
#private;
|
|
4
|
+
register(): Promise<void>;
|
|
5
|
+
boot(): Promise<void>;
|
|
6
|
+
dispose(): Promise<void>;
|
|
7
|
+
bootWhen(): Promise<boolean>;
|
|
8
|
+
configSchema(): object;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=service-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-provider.d.ts","sourceRoot":"","sources":["../source/service-provider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAQ7C,qBAAa,eAAgB,SAAQ,SAAS,CAAC,eAAe;;IAChD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBzB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxB,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC;IAIlC,YAAY,IAAI,MAAM;CAqB7B"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
3
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
4
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
5
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
6
|
+
};
|
|
7
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
8
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
9
|
+
};
|
|
10
|
+
var _ServiceProvider_instances, _ServiceProvider_startListeners;
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.ServiceProvider = void 0;
|
|
13
|
+
const contracts_1 = require("@mainsail/contracts");
|
|
14
|
+
const kernel_1 = require("@mainsail/kernel");
|
|
15
|
+
const joi_1 = __importDefault(require("joi"));
|
|
16
|
+
const database_1 = require("./database");
|
|
17
|
+
const identifiers_1 = require("./identifiers");
|
|
18
|
+
const listener_1 = require("./listener");
|
|
19
|
+
const server_1 = require("./server");
|
|
20
|
+
class ServiceProvider extends kernel_1.Providers.ServiceProvider {
|
|
21
|
+
constructor() {
|
|
22
|
+
super(...arguments);
|
|
23
|
+
_ServiceProvider_instances.add(this);
|
|
24
|
+
}
|
|
25
|
+
async register() {
|
|
26
|
+
// Setup Database...
|
|
27
|
+
this.app.bind(identifiers_1.InternalIdentifiers.Database).to(database_1.Database).inSingletonScope();
|
|
28
|
+
this.app.get(identifiers_1.InternalIdentifiers.Database).boot();
|
|
29
|
+
// Setup Server...
|
|
30
|
+
this.app.bind(identifiers_1.InternalIdentifiers.Server).to(server_1.Server).inSingletonScope();
|
|
31
|
+
await this.app
|
|
32
|
+
.get(identifiers_1.InternalIdentifiers.Server)
|
|
33
|
+
.register(this.config().get("server"));
|
|
34
|
+
// Setup Listeners...
|
|
35
|
+
__classPrivateFieldGet(this, _ServiceProvider_instances, "m", _ServiceProvider_startListeners).call(this);
|
|
36
|
+
}
|
|
37
|
+
async boot() {
|
|
38
|
+
await this.app.get(identifiers_1.InternalIdentifiers.Server).boot();
|
|
39
|
+
}
|
|
40
|
+
async dispose() {
|
|
41
|
+
await this.app.get(identifiers_1.InternalIdentifiers.Server).dispose();
|
|
42
|
+
}
|
|
43
|
+
async bootWhen() {
|
|
44
|
+
return this.config().get("enabled") === true;
|
|
45
|
+
}
|
|
46
|
+
configSchema() {
|
|
47
|
+
return joi_1.default.object({
|
|
48
|
+
enabled: joi_1.default.boolean().required(),
|
|
49
|
+
server: joi_1.default.object({
|
|
50
|
+
http: joi_1.default.object({
|
|
51
|
+
host: joi_1.default.string()
|
|
52
|
+
.ip({ version: ["ipv4", "ipv6"] })
|
|
53
|
+
.required(),
|
|
54
|
+
port: joi_1.default.number().integer().min(1).max(65535).required(),
|
|
55
|
+
}).required(),
|
|
56
|
+
whitelist: joi_1.default.array().items(joi_1.default.string()).required(),
|
|
57
|
+
}).required(),
|
|
58
|
+
timeout: joi_1.default.number().integer().min(1).required(),
|
|
59
|
+
}).unknown(true);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
exports.ServiceProvider = ServiceProvider;
|
|
63
|
+
_ServiceProvider_instances = new WeakSet(), _ServiceProvider_startListeners = function _ServiceProvider_startListeners() {
|
|
64
|
+
this.app
|
|
65
|
+
.get(contracts_1.Identifiers.Services.EventDispatcher.Service)
|
|
66
|
+
.listen("*", this.app.resolve(listener_1.Listener));
|
|
67
|
+
};
|
|
68
|
+
//# sourceMappingURL=service-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-provider.js","sourceRoot":"","sources":["../source/service-provider.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mDAA6D;AAC7D,6CAA6C;AAC7C,8CAAsB;AAEtB,yCAAsC;AACtC,+CAAoD;AACpD,yCAAsC;AACtC,qCAAkC;AAElC,MAAa,eAAgB,SAAQ,kBAAS,CAAC,eAAe;IAA9D;;;IAmDA,CAAC;IAlDO,KAAK,CAAC,QAAQ;QACpB,oBAAoB;QACpB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAW,iCAAmB,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,mBAAQ,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAEtF,IAAI,CAAC,GAAG,CAAC,GAAG,CAAW,iCAAmB,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QAE5D,kBAAkB;QAClB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,iCAAmB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,eAAM,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAExE,MAAM,IAAI,CAAC,GAAG;aACZ,GAAG,CAAS,iCAAmB,CAAC,MAAM,CAAC;aACvC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAA6B,QAAQ,CAAE,CAAC,CAAC;QAErE,qBAAqB;QACrB,uBAAA,IAAI,mEAAgB,MAApB,IAAI,CAAkB,CAAC;IACxB,CAAC;IAEM,KAAK,CAAC,IAAI;QAChB,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAM,iCAAmB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5D,CAAC;IAEM,KAAK,CAAC,OAAO;QACnB,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAM,iCAAmB,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC;IAC/D,CAAC;IAEM,KAAK,CAAC,QAAQ;QACpB,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC;IAC9C,CAAC;IAEM,YAAY;QAClB,OAAO,aAAG,CAAC,MAAM,CAAC;YACjB,OAAO,EAAE,aAAG,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;YACjC,MAAM,EAAE,aAAG,CAAC,MAAM,CAAC;gBAClB,IAAI,EAAE,aAAG,CAAC,MAAM,CAAC;oBAChB,IAAI,EAAE,aAAG,CAAC,MAAM,EAAE;yBAChB,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;yBACjC,QAAQ,EAAE;oBACZ,IAAI,EAAE,aAAG,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAM,CAAC,CAAC,QAAQ,EAAE;iBAC1D,CAAC,CAAC,QAAQ,EAAE;gBACb,SAAS,EAAE,aAAG,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,aAAG,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;aACrD,CAAC,CAAC,QAAQ,EAAE;YACb,OAAO,EAAE,aAAG,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;SACjD,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAClB,CAAC;CAOD;AAnDD,0CAmDC;;IAJC,IAAI,CAAC,GAAG;SACN,GAAG,CAAmC,uBAAW,CAAC,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC;SACnF,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,mBAAQ,CAAC,CAAC,CAAC;AAC3C,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@mainsail/webhooks",
|
|
3
|
+
"version": "0.0.1-alpha.1",
|
|
4
|
+
"description": "Webhooks service for the Mainsail blockchain",
|
|
5
|
+
"license": "GPL-3.0-only",
|
|
6
|
+
"contributors": [],
|
|
7
|
+
"main": "distribution/index.js",
|
|
8
|
+
"files": [
|
|
9
|
+
"/distribution"
|
|
10
|
+
],
|
|
11
|
+
"dependencies": {
|
|
12
|
+
"@hapi/boom": "10.0.1",
|
|
13
|
+
"@hapi/hapi": "21.3.2",
|
|
14
|
+
"fs-extra": "11.2.0",
|
|
15
|
+
"joi": "17.11.0",
|
|
16
|
+
"lowdb": "1.0.0",
|
|
17
|
+
"uuid": "9.0.1",
|
|
18
|
+
"@mainsail/container": "0.0.1-alpha.1",
|
|
19
|
+
"@mainsail/contracts": "0.0.1-alpha.1",
|
|
20
|
+
"@mainsail/kernel": "0.0.1-alpha.1",
|
|
21
|
+
"@mainsail/utils": "0.0.1-alpha.1"
|
|
22
|
+
},
|
|
23
|
+
"devDependencies": {
|
|
24
|
+
"@types/fs-extra": "11.0.4",
|
|
25
|
+
"@types/tmp": "0.2.6",
|
|
26
|
+
"@types/uuid": "9.0.7",
|
|
27
|
+
"import-fresh": "3.3.0",
|
|
28
|
+
"tmp": "0.2.1",
|
|
29
|
+
"uvu": "^0.5.6"
|
|
30
|
+
},
|
|
31
|
+
"engines": {
|
|
32
|
+
"node": ">=20.x"
|
|
33
|
+
},
|
|
34
|
+
"scripts": {
|
|
35
|
+
"build": "pnpm run clean && tsc",
|
|
36
|
+
"build:watch": "pnpm run clean && tsc -w",
|
|
37
|
+
"clean": "del distribution",
|
|
38
|
+
"release": "pnpm publish --access public",
|
|
39
|
+
"test": "uvu -r tsm source .test.ts",
|
|
40
|
+
"test:coverage": "c8 pnpm run test",
|
|
41
|
+
"test:coverage:html": "c8 -r html --all pnpm run test",
|
|
42
|
+
"test:file": "uvu -r tsm source"
|
|
43
|
+
}
|
|
44
|
+
}
|