@upsnap/strapi 1.0.10 β†’ 1.0.11

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/README.md CHANGED
@@ -26,17 +26,7 @@ Track monitoring incidents with detailed timelines, status history, recovery tra
26
26
 
27
27
  ## πŸ”” Rich Notification Integrations
28
28
  Get real-time alerts through multiple channels:
29
- Email
30
- Slack
31
- Discord
32
- SMS
33
- Telegram
34
- Google Chat
35
- Microsoft Teams
36
- Webhooks
37
- PagerDuty
38
- Zapier
39
- …and more integrations coming soon.
29
+ Email, Slack, Discord, SMS, Telegram, Google Chat, Microsoft Teams, Webhooks, PagerDuty, Zapier, and more.
40
30
 
41
31
  ## 🌐 Website Monitoring
42
32
  Comprehensive website health monitoring including availability, performance checks, SSL status, and content integrity monitoring in one place.
@@ -50,7 +40,6 @@ Comprehensive website health monitoring including availability, performance chec
50
40
  - Nodejs ">=18.0.0 <=22.x.x"
51
41
  - React 18 (provided by Strapi)
52
42
 
53
-
54
43
  ## πŸ“¦ Installation
55
44
 
56
45
  Install via npm:
@@ -68,9 +57,12 @@ yarn add @upsnap/strapi
68
57
  Enable it in confing/plugins:
69
58
 
70
59
  ```bash
71
- upsnap: {
72
- enabled: true,
73
- }
60
+ module.exports = {
61
+ // ...
62
+ upsnap: {
63
+ enabled: true,
64
+ },
65
+ };
74
66
  ```
75
67
 
76
68
  Restart Strapi:
@@ -87,23 +79,18 @@ Upsnap will appear in your admin sidebar.
87
79
 
88
80
  After installing the plugin and restarting Strapi:
89
81
 
90
- 1. Go to **Upsnap β†’ Settings β†’ API Token**
91
- Add your API Token from https://upsnap.ai website
92
-
93
- 2. Add a new monitor
94
- or select a primary monitor if one is already created
95
-
96
- 3. Configure monitoring options
97
-
98
- 4. Save and go to dashboard
82
+ 1. Authenticate: Go to Upsnap β†’ Settings and login with your UpSnap account or register for a new one directly within the plugin.
83
+ 2. Add Monitor: Add a new monitor or select a primary monitor if one is already created.
84
+ 3. Configure: Set up your monitoring options and notification channels.
85
+ 4. Save: Save your settings and head to the dashboard to see your site's health in real-time.
99
86
 
100
87
 
101
88
  ## Documentation
102
- [Full Documentation](https://github.com/Appfoster/upsnap/wiki)
89
+ [Full Documentation](https://github.com/Appfoster/upsnap-docs/blob/master/strapi/Home.md)
103
90
 
104
91
  ## Issue Tracking
105
92
  [GitHub Issues](https://github.com/Appfoster/upsnap-strapi/issues)
106
- [Changelog](https://github.com/Appfoster/upsnap/blob/main/CHANGELOG.md)
93
+ [Changelog](https://github.com/Appfoster/upsnap-docs/blob/master/strapi/changelog.md)
107
94
 
108
95
  ## Contact
109
96
  **Email**: support@upsnap.ai
@@ -1,29 +1,44 @@
1
1
  "use strict";
2
2
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
- const bootstrap = ({ strapi }) => {
4
- };
5
- const destroy = ({ strapi }) => {
6
- };
7
- const register = ({ strapi }) => {
8
- };
9
- const config = {
10
- default: {},
11
- validator() {
12
- }
13
- };
14
- const contentTypes = {};
15
- const controller = ({ strapi }) => ({
16
- index(ctx) {
17
- ctx.body = strapi.plugin("upsnap").service("service").getWelcomeMessage();
18
- }
19
- });
20
3
  const BACKEND_URL = "https://api.upsnap.ai/v1";
21
4
  const LIGHTHOUSE_CHECKS = ["performance", "accessibility", "bestPractices", "seo", "pwa"];
22
- const service = ({ strapi }) => ({
5
+ const version = "1.0.11";
6
+ const repository = { "type": "git", "url": "https://github.com/Appfoster/upsnap-strapi" };
7
+ const keywords = [];
8
+ const type = "commonjs";
9
+ const exports$1 = { "./package.json": "./package.json", "./strapi-admin": { "types": "./dist/admin/src/index.d.ts", "source": "./admin/src/index.ts", "import": "./dist/admin/index.mjs", "require": "./dist/admin/index.js", "default": "./dist/admin/index.js" }, "./strapi-server": { "types": "./dist/server/src/index.d.ts", "source": "./server/src/index.ts", "import": "./dist/server/index.mjs", "require": "./dist/server/index.js", "default": "./dist/server/index.js" } };
10
+ const files = ["dist"];
11
+ const scripts = { "build": "strapi-plugin build", "watch": "strapi-plugin watch", "watch:link": "strapi-plugin watch:link", "verify": "strapi-plugin verify", "test:ts:front": "run -T tsc -p admin/tsconfig.json", "test:ts:back": "run -T tsc -p server/tsconfig.json" };
12
+ const dependencies = { "@strapi/design-system": "^2.0.0-rc.30", "@strapi/icons": "^2.0.0-rc.30", "axios": "^1.13.5", "react-apexcharts": "^2.0.1", "react-intl": "^6.6.0", "react-toastify": "^11.0.5" };
13
+ const devDependencies = { "@strapi/sdk-plugin": "^6.0.1", "@strapi/strapi": "^5.37.1", "@strapi/typescript-utils": "^5.37.1", "@types/react": "^19.2.14", "@types/react-dom": "^19.2.3", "prettier": "^3.8.1", "react": "^18.3.1", "react-dom": "^18.3.1", "react-router-dom": "^6.30.3", "styled-components": "^6.3.11", "typescript": "^5.9.3" };
14
+ const peerDependencies = { "@strapi/sdk-plugin": "^5.4.0", "@strapi/strapi": "^5.0.0", "react": "^18.3.1", "react-dom": "^18.3.1", "react-router-dom": "^6.30.3", "styled-components": "^6.3.11" };
15
+ const strapi = { "kind": "plugin", "name": "upsnap", "displayName": "Upsnap", "description": "Complete website health monitoring for Strapi, including uptime, SSL certificates, broken links, performance metrics, domain health, and mixed content issues." };
16
+ const name = "@upsnap/strapi";
17
+ const description = "Complete website health monitoring for Strapi, including uptime, SSL certificates, broken links, performance metrics, domain health, and mixed content issues.";
18
+ const license = "MIT";
19
+ const author = "Upsnap <support@upsnap.ai>";
20
+ const packageJson = {
21
+ version,
22
+ repository,
23
+ keywords,
24
+ type,
25
+ exports: exports$1,
26
+ files,
27
+ scripts,
28
+ dependencies,
29
+ devDependencies,
30
+ peerDependencies,
31
+ strapi,
32
+ name,
33
+ description,
34
+ license,
35
+ author
36
+ };
37
+ const service = ({ strapi: strapi2 }) => ({
23
38
  getWelcomeMessage() {
24
39
  return "Welcome to Strapi πŸš€";
25
40
  },
26
- settingsStore: strapi.store({
41
+ settingsStore: strapi2.store({
27
42
  type: "plugin",
28
43
  name: "upsnap",
29
44
  key: "settings"
@@ -61,11 +76,65 @@ const service = ({ strapi }) => ({
61
76
  data: await response.arrayBuffer(),
62
77
  headers: response.headers
63
78
  };
79
+ },
80
+ async trackInstallation() {
81
+ try {
82
+ const settings2 = await this.settingsStore.get();
83
+ if (settings2?.installationTracked) {
84
+ return;
85
+ }
86
+ const pluginVersion = packageJson.version;
87
+ const strapiVersion = strapi2.config.get("info.strapi");
88
+ const siteUrl = strapi2.config.get("server.url") || `http://${strapi2.config.get("server.host") || "localhost"}:${strapi2.config.get("server.port") || 1337}`;
89
+ const response = await this.makeBackendRequest(
90
+ "/installation-data",
91
+ {
92
+ method: "POST",
93
+ body: JSON.stringify({
94
+ platform: "strapi",
95
+ details: {
96
+ version: pluginVersion,
97
+ site_url: siteUrl,
98
+ strapi_version: strapiVersion
99
+ }
100
+ })
101
+ },
102
+ true
103
+ );
104
+ if (response?.status === "success") {
105
+ await this.settingsStore.set({
106
+ value: {
107
+ ...settings2,
108
+ installationTracked: true
109
+ }
110
+ });
111
+ }
112
+ } catch (error) {
113
+ console.log("UpSnap: Failed to track installation data ", error);
114
+ }
115
+ }
116
+ });
117
+ const bootstrap = async ({ strapi: strapi2 }) => {
118
+ await service({ strapi: strapi2 }).trackInstallation();
119
+ };
120
+ const destroy = ({ strapi: strapi2 }) => {
121
+ };
122
+ const register = ({ strapi: strapi2 }) => {
123
+ };
124
+ const config = {
125
+ default: {},
126
+ validator() {
127
+ }
128
+ };
129
+ const contentTypes = {};
130
+ const controller = ({ strapi: strapi2 }) => ({
131
+ index(ctx) {
132
+ ctx.body = strapi2.plugin("upsnap").service("service").getWelcomeMessage();
64
133
  }
65
134
  });
66
- const settings = ({ strapi }) => ({
135
+ const settings = ({ strapi: strapi2 }) => ({
67
136
  async get(ctx) {
68
- const settings2 = await service({ strapi }).settingsStore.get();
137
+ const settings2 = await service({ strapi: strapi2 }).settingsStore.get();
69
138
  ctx.body = {
70
139
  token: settings2?.token ?? null,
71
140
  primaryMonitorId: settings2?.primaryMonitorId ?? null
@@ -74,7 +143,7 @@ const settings = ({ strapi }) => ({
74
143
  async set(ctx) {
75
144
  const { token, logOut } = ctx.request.body;
76
145
  if (!logOut) {
77
- const isValidData = await service({ strapi }).makeBackendRequest("/tokens/validate", {
146
+ const isValidData = await service({ strapi: strapi2 }).makeBackendRequest("/tokens/validate", {
78
147
  method: "POST",
79
148
  body: JSON.stringify({ token })
80
149
  }, true);
@@ -83,7 +152,7 @@ const settings = ({ strapi }) => ({
83
152
  return;
84
153
  }
85
154
  }
86
- const store = service({ strapi }).settingsStore;
155
+ const store = service({ strapi: strapi2 }).settingsStore;
87
156
  const current = await store.get() || {};
88
157
  await store.set({
89
158
  value: {
@@ -95,7 +164,7 @@ const settings = ({ strapi }) => ({
95
164
  },
96
165
  async setPrimaryMonitorId(ctx) {
97
166
  const { monitorId } = ctx.request.body;
98
- const store = service({ strapi }).settingsStore;
167
+ const store = service({ strapi: strapi2 }).settingsStore;
99
168
  const current = await store.get() || {};
100
169
  await store.set({
101
170
  value: {
@@ -106,7 +175,7 @@ const settings = ({ strapi }) => ({
106
175
  ctx.body = { ok: true };
107
176
  },
108
177
  async getPrimaryMonitorId(ctx) {
109
- const settings2 = await service({ strapi }).settingsStore.get();
178
+ const settings2 = await service({ strapi: strapi2 }).settingsStore.get();
110
179
  ctx.body = { primaryMonitorId: settings2?.primaryMonitorId };
111
180
  }
112
181
  });
@@ -334,10 +403,10 @@ function buildBrokenLinksErrorResponse(raw) {
334
403
  data: raw
335
404
  };
336
405
  }
337
- const monitor = ({ strapi }) => ({
406
+ const monitor = ({ strapi: strapi2 }) => ({
338
407
  async getById(ctx) {
339
408
  const monitorId = ctx.params.id;
340
- const token = await service({ strapi }).getToken();
409
+ const token = await service({ strapi: strapi2 }).getToken();
341
410
  const monitorResponse = await fetch(`${BACKEND_URL}/user/monitors/${monitorId}`, {
342
411
  method: "GET",
343
412
  headers: {
@@ -349,7 +418,7 @@ const monitor = ({ strapi }) => ({
349
418
  ctx.body = { monitor: monitor2 };
350
419
  },
351
420
  async get(ctx) {
352
- const monitorsData = await service({ strapi }).makeBackendRequest(
421
+ const monitorsData = await service({ strapi: strapi2 }).makeBackendRequest(
353
422
  `/user/monitors`,
354
423
  {
355
424
  method: "GET"
@@ -360,7 +429,7 @@ const monitor = ({ strapi }) => ({
360
429
  async getMonitorUptimeStats(ctx) {
361
430
  const monitorId = ctx.params.id;
362
431
  const { region } = ctx.query;
363
- const uptimeStatsData = await service({ strapi }).makeBackendRequest(
432
+ const uptimeStatsData = await service({ strapi: strapi2 }).makeBackendRequest(
364
433
  `/user/monitors/${monitorId}/uptime-stats?uptime_stats_time_frames=day,week,month&region=${region}`,
365
434
  {
366
435
  method: "GET"
@@ -371,7 +440,7 @@ const monitor = ({ strapi }) => ({
371
440
  async getMonitorHistogram(ctx) {
372
441
  const monitorId = ctx.params.id;
373
442
  const { region } = ctx.query;
374
- const histogramData = await service({ strapi }).makeBackendRequest(
443
+ const histogramData = await service({ strapi: strapi2 }).makeBackendRequest(
375
444
  `/user/monitors/${monitorId}/histogram?region=${region}`,
376
445
  {
377
446
  method: "GET"
@@ -381,7 +450,7 @@ const monitor = ({ strapi }) => ({
381
450
  },
382
451
  async getHealthChecks(ctx) {
383
452
  const { monitorUrl } = ctx.request.body;
384
- const healthCheckData = await service({ strapi }).makeBackendRequest(`/healthcheck`, {
453
+ const healthCheckData = await service({ strapi: strapi2 }).makeBackendRequest(`/healthcheck`, {
385
454
  method: "POST",
386
455
  headers: {
387
456
  "X-Requested-From": "craft"
@@ -397,7 +466,7 @@ const monitor = ({ strapi }) => ({
397
466
  },
398
467
  async getUptimeHealthCheck(ctx) {
399
468
  const { monitorUrl } = ctx.request.body;
400
- const uptimeHealthCheckData = await service({ strapi }).makeBackendRequest(
469
+ const uptimeHealthCheckData = await service({ strapi: strapi2 }).makeBackendRequest(
401
470
  `/healthcheck`,
402
471
  {
403
472
  method: "POST",
@@ -422,7 +491,7 @@ const monitor = ({ strapi }) => ({
422
491
  },
423
492
  async getSslHealthCheck(ctx) {
424
493
  const { monitorUrl } = ctx.request.body;
425
- const sslHealthCheckData = await service({ strapi }).makeBackendRequest(`/healthcheck`, {
494
+ const sslHealthCheckData = await service({ strapi: strapi2 }).makeBackendRequest(`/healthcheck`, {
426
495
  method: "POST",
427
496
  headers: {
428
497
  "X-Requested-From": "craft"
@@ -444,7 +513,7 @@ const monitor = ({ strapi }) => ({
444
513
  },
445
514
  async getDomainHealthCheck(ctx) {
446
515
  const { monitorUrl } = ctx.request.body;
447
- const domainHealthCheckData = await service({ strapi }).makeBackendRequest(
516
+ const domainHealthCheckData = await service({ strapi: strapi2 }).makeBackendRequest(
448
517
  `/healthcheck`,
449
518
  {
450
519
  method: "POST",
@@ -469,7 +538,7 @@ const monitor = ({ strapi }) => ({
469
538
  },
470
539
  async getLighthouseHealthCheck(ctx) {
471
540
  const { monitorUrl, strategy } = ctx.request.body;
472
- const lighthouseHealthCheckData = await service({ strapi }).makeBackendRequest(
541
+ const lighthouseHealthCheckData = await service({ strapi: strapi2 }).makeBackendRequest(
473
542
  `/healthcheck`,
474
543
  {
475
544
  method: "POST",
@@ -499,7 +568,7 @@ const monitor = ({ strapi }) => ({
499
568
  },
500
569
  async getBrokenLinksHealthCheck(ctx) {
501
570
  const { monitorUrl } = ctx.request.body;
502
- const brokenLinksHealthCheckData = await service({ strapi }).makeBackendRequest(
571
+ const brokenLinksHealthCheckData = await service({ strapi: strapi2 }).makeBackendRequest(
503
572
  `/healthcheck`,
504
573
  {
505
574
  method: "POST",
@@ -528,7 +597,7 @@ const monitor = ({ strapi }) => ({
528
597
  },
529
598
  async getMixedContentHealthCheck(ctx) {
530
599
  const { monitorUrl } = ctx.request.body;
531
- const mixedContentHealthCheckData = await service({ strapi }).makeBackendRequest(
600
+ const mixedContentHealthCheckData = await service({ strapi: strapi2 }).makeBackendRequest(
532
601
  `/healthcheck`,
533
602
  {
534
603
  method: "POST",
@@ -547,7 +616,7 @@ const monitor = ({ strapi }) => ({
547
616
  async getMonitorResponseTime(ctx) {
548
617
  const monitorId = ctx.params.id;
549
618
  const { start, end, region } = ctx.query;
550
- const responseTimeData = await service({ strapi }).makeBackendRequest(
619
+ const responseTimeData = await service({ strapi: strapi2 }).makeBackendRequest(
551
620
  `/user/monitors/${monitorId}/response-time?start=${start}&end=${end}&region=${region || "default"}`,
552
621
  {
553
622
  method: "GET"
@@ -557,7 +626,7 @@ const monitor = ({ strapi }) => ({
557
626
  },
558
627
  async getMonitorIncidents(ctx) {
559
628
  const monitorId = ctx.params.id;
560
- const incidentsData = await service({ strapi }).makeBackendRequest(
629
+ const incidentsData = await service({ strapi: strapi2 }).makeBackendRequest(
561
630
  `/user/monitors/incidents?monitorId=${monitorId}&page=1&page_size=20&time_range=7D`,
562
631
  {
563
632
  method: "GET"
@@ -567,7 +636,7 @@ const monitor = ({ strapi }) => ({
567
636
  },
568
637
  async getMonitorSettings(ctx) {
569
638
  const monitorId = ctx.params.id;
570
- const monitorSettingsData = await service({ strapi }).makeBackendRequest(
639
+ const monitorSettingsData = await service({ strapi: strapi2 }).makeBackendRequest(
571
640
  `/user/monitors/settings?id=${monitorId}`,
572
641
  {
573
642
  method: "GET"
@@ -577,7 +646,7 @@ const monitor = ({ strapi }) => ({
577
646
  },
578
647
  async createMonitor(ctx) {
579
648
  const { ...data } = ctx.request.body;
580
- const monitorsData = await service({ strapi }).makeBackendRequest(`/user/monitors`, {
649
+ const monitorsData = await service({ strapi: strapi2 }).makeBackendRequest(`/user/monitors`, {
581
650
  method: "POST",
582
651
  body: JSON.stringify(data)
583
652
  });
@@ -586,7 +655,7 @@ const monitor = ({ strapi }) => ({
586
655
  async updateMonitor(ctx) {
587
656
  const monitorId = ctx.params.id;
588
657
  const { ...data } = ctx.request.body;
589
- const monitorsData = await service({ strapi }).makeBackendRequest(
658
+ const monitorsData = await service({ strapi: strapi2 }).makeBackendRequest(
590
659
  `/user/monitors/${monitorId}`,
591
660
  {
592
661
  method: "PUT",
@@ -597,7 +666,7 @@ const monitor = ({ strapi }) => ({
597
666
  },
598
667
  async deleteMonitor(ctx) {
599
668
  const monitorId = ctx.params.id;
600
- const monitorsData = await service({ strapi }).makeBackendRequest(
669
+ const monitorsData = await service({ strapi: strapi2 }).makeBackendRequest(
601
670
  `/user/monitors/${monitorId}`,
602
671
  {
603
672
  method: "DELETE"
@@ -607,7 +676,7 @@ const monitor = ({ strapi }) => ({
607
676
  },
608
677
  async deleteMonitors(ctx) {
609
678
  const { monitorIds } = ctx.request.body;
610
- const monitorsData = await service({ strapi }).makeBackendRequest(`/user/monitors`, {
679
+ const monitorsData = await service({ strapi: strapi2 }).makeBackendRequest(`/user/monitors`, {
611
680
  method: "PATCH",
612
681
  body: JSON.stringify({ ids: monitorIds, action: "delete" })
613
682
  });
@@ -642,7 +711,7 @@ const monitor = ({ strapi }) => ({
642
711
  if (search) queryParams.set("search", search);
643
712
  if (sortBy) queryParams.set("sort_by", sortBy);
644
713
  if (sortOrder) queryParams.set("sort_order", sortOrder);
645
- const incidentsData = await service({ strapi }).makeBackendRequest(
714
+ const incidentsData = await service({ strapi: strapi2 }).makeBackendRequest(
646
715
  `/user/monitors/incidents?${queryParams.toString()}`,
647
716
  {
648
717
  method: "GET"
@@ -652,20 +721,20 @@ const monitor = ({ strapi }) => ({
652
721
  },
653
722
  async exportIncidents(ctx) {
654
723
  try {
655
- const { monitorId, region, type, start_time, end_time, search, file_type } = ctx.request.body;
724
+ const { monitorId, region, type: type2, start_time, end_time, search, file_type } = ctx.request.body;
656
725
  if (!monitorId) {
657
726
  ctx.status = 400;
658
727
  ctx.body = { error: "monitorId is required" };
659
728
  return;
660
729
  }
661
730
  const queryParams = new URLSearchParams();
662
- if (type) queryParams.set("type", type);
731
+ if (type2) queryParams.set("type", type2);
663
732
  if (start_time) queryParams.set("start_time", start_time);
664
733
  if (end_time) queryParams.set("end_time", end_time);
665
734
  if (search) queryParams.set("search", search);
666
735
  if (file_type) queryParams.set("file_type", file_type);
667
736
  if (region) queryParams.set("region", region);
668
- const response = await service({ strapi }).makeBackendRequest(
737
+ const response = await service({ strapi: strapi2 }).makeBackendRequest(
669
738
  `/user/monitors/${monitorId}/incidents/export?${queryParams.toString()}`,
670
739
  { method: "GET" }
671
740
  );
@@ -689,16 +758,16 @@ const monitor = ({ strapi }) => ({
689
758
  }
690
759
  }
691
760
  });
692
- const statusPage = ({ strapi }) => ({
761
+ const statusPage = ({ strapi: strapi2 }) => ({
693
762
  async getStatusPages(ctx) {
694
- const statusPagesData = await service({ strapi }).makeBackendRequest(`/user/status-pages`, {
763
+ const statusPagesData = await service({ strapi: strapi2 }).makeBackendRequest(`/user/status-pages`, {
695
764
  method: "GET"
696
765
  });
697
766
  ctx.body = { statusPagesData };
698
767
  },
699
768
  async getStatusPagesByID(ctx) {
700
769
  const id = ctx.params.id;
701
- const statusPagesData = await service({ strapi }).makeBackendRequest(
770
+ const statusPagesData = await service({ strapi: strapi2 }).makeBackendRequest(
702
771
  `/user/status-pages/${id}`,
703
772
  {
704
773
  method: "GET"
@@ -707,16 +776,16 @@ const statusPage = ({ strapi }) => ({
707
776
  ctx.body = { statusPagesData };
708
777
  },
709
778
  async saveStatusPages(ctx) {
710
- const { name, monitor_ids, is_published } = ctx.request.body;
711
- const statusPagesData = await service({ strapi }).makeBackendRequest(`/user/status-pages`, {
779
+ const { name: name2, monitor_ids, is_published } = ctx.request.body;
780
+ const statusPagesData = await service({ strapi: strapi2 }).makeBackendRequest(`/user/status-pages`, {
712
781
  method: "POST",
713
- body: JSON.stringify({ name, monitor_ids, is_published })
782
+ body: JSON.stringify({ name: name2, monitor_ids, is_published })
714
783
  });
715
784
  ctx.body = { statusPagesData };
716
785
  },
717
786
  async updateStatusPages(ctx) {
718
787
  const { id, ...data } = ctx.request.body;
719
- const statusPagesData = await service({ strapi }).makeBackendRequest(
788
+ const statusPagesData = await service({ strapi: strapi2 }).makeBackendRequest(
720
789
  `/user/status-pages/${id}`,
721
790
  {
722
791
  method: "PUT",
@@ -727,7 +796,7 @@ const statusPage = ({ strapi }) => ({
727
796
  },
728
797
  async resetLink(ctx) {
729
798
  const { id } = ctx.request.body;
730
- const statusPagesData = await service({ strapi }).makeBackendRequest(
799
+ const statusPagesData = await service({ strapi: strapi2 }).makeBackendRequest(
731
800
  `/user/status-pages/${id}/reset`,
732
801
  {
733
802
  method: "POST"
@@ -737,7 +806,7 @@ const statusPage = ({ strapi }) => ({
737
806
  },
738
807
  async deleteStatusPages(ctx) {
739
808
  const id = ctx.params.id;
740
- const statusPagesData = await service({ strapi }).makeBackendRequest(
809
+ const statusPagesData = await service({ strapi: strapi2 }).makeBackendRequest(
741
810
  `/user/status-pages/${id}`,
742
811
  {
743
812
  method: "DELETE"
@@ -746,17 +815,17 @@ const statusPage = ({ strapi }) => ({
746
815
  ctx.body = { statusPagesData };
747
816
  }
748
817
  });
749
- const regions = ({ strapi }) => ({
818
+ const regions = ({ strapi: strapi2 }) => ({
750
819
  async getRegions(ctx) {
751
- const regionsData = await service({ strapi }).makeBackendRequest(`/regions`, {
820
+ const regionsData = await service({ strapi: strapi2 }).makeBackendRequest(`/regions`, {
752
821
  method: "GET"
753
822
  });
754
823
  ctx.body = { regionsData };
755
824
  }
756
825
  });
757
- const userDetailsService = ({ strapi }) => ({
826
+ const userDetailsService = ({ strapi: strapi2 }) => ({
758
827
  async createUserApiToken(sessionToken) {
759
- const apiTokens = await service({ strapi }).makeBackendRequest(
828
+ const apiTokens = await service({ strapi: strapi2 }).makeBackendRequest(
760
829
  `/tokens/generate`,
761
830
  {
762
831
  method: "POST",
@@ -776,7 +845,7 @@ const userDetailsService = ({ strapi }) => ({
776
845
  return null;
777
846
  },
778
847
  async getUserApiToken(sessionToken) {
779
- const apiTokens = await service({ strapi }).makeBackendRequest(
848
+ const apiTokens = await service({ strapi: strapi2 }).makeBackendRequest(
780
849
  `/tokens`,
781
850
  {
782
851
  method: "GET"
@@ -845,7 +914,7 @@ const userDetailsService = ({ strapi }) => ({
845
914
  }
846
915
  }
847
916
  };
848
- const monitorsData = await service({ strapi }).makeBackendRequest(`/user/monitors`, {
917
+ const monitorsData = await service({ strapi: strapi2 }).makeBackendRequest(`/user/monitors`, {
849
918
  method: "POST",
850
919
  body: JSON.stringify(payload)
851
920
  }, true, apiToken);
@@ -860,9 +929,9 @@ const userDetailsService = ({ strapi }) => ({
860
929
  }
861
930
  }
862
931
  });
863
- const userDetails = ({ strapi }) => ({
932
+ const userDetails = ({ strapi: strapi2 }) => ({
864
933
  async getUserDetails(ctx) {
865
- const userDetailsData = await service({ strapi }).makeBackendRequest(`/user/details`, {
934
+ const userDetailsData = await service({ strapi: strapi2 }).makeBackendRequest(`/user/details`, {
866
935
  method: "GET"
867
936
  });
868
937
  ctx.body = { userDetailsData };
@@ -870,7 +939,7 @@ const userDetails = ({ strapi }) => ({
870
939
  async signUp(ctx) {
871
940
  try {
872
941
  const { email, password, source, site_url, fullName } = ctx.request.body;
873
- const registerData = await service({ strapi }).makeBackendRequest(
942
+ const registerData = await service({ strapi: strapi2 }).makeBackendRequest(
874
943
  `/user/register`,
875
944
  {
876
945
  method: "POST",
@@ -884,13 +953,13 @@ const userDetails = ({ strapi }) => ({
884
953
  true
885
954
  );
886
955
  if (registerData?.data?.token) {
887
- const apiToken = await userDetailsService({ strapi }).getUserApiToken(registerData?.data?.token);
888
- const monitorId = await userDetailsService({ strapi }).createInitialMonitor(site_url, apiToken);
956
+ const apiToken = await userDetailsService({ strapi: strapi2 }).getUserApiToken(registerData?.data?.token);
957
+ const monitorId = await userDetailsService({ strapi: strapi2 }).createInitialMonitor(site_url, apiToken);
889
958
  if (!apiToken || !monitorId) {
890
959
  ctx.body = { ok: false, message: "Error creating API token or Monitor" };
891
960
  return;
892
961
  }
893
- const store = service({ strapi }).settingsStore;
962
+ const store = service({ strapi: strapi2 }).settingsStore;
894
963
  const current = await store.get() || {};
895
964
  await store.set({
896
965
  value: {
@@ -910,7 +979,7 @@ const userDetails = ({ strapi }) => ({
910
979
  async signIn(ctx) {
911
980
  try {
912
981
  const { email, password } = ctx.request.body;
913
- const loginData = await service({ strapi }).makeBackendRequest(
982
+ const loginData = await service({ strapi: strapi2 }).makeBackendRequest(
914
983
  `/user/login`,
915
984
  {
916
985
  method: "POST",
@@ -922,8 +991,8 @@ const userDetails = ({ strapi }) => ({
922
991
  true
923
992
  );
924
993
  if (loginData?.data?.token) {
925
- const apiToken = await userDetailsService({ strapi }).getUserApiToken(loginData?.data?.token);
926
- const store = service({ strapi }).settingsStore;
994
+ const apiToken = await userDetailsService({ strapi: strapi2 }).getUserApiToken(loginData?.data?.token);
995
+ const store = service({ strapi: strapi2 }).settingsStore;
927
996
  const current = await store.get() || {};
928
997
  await store.set({
929
998
  value: {
@@ -942,7 +1011,7 @@ const userDetails = ({ strapi }) => ({
942
1011
  async forgotPassword(ctx) {
943
1012
  try {
944
1013
  const { email } = ctx.request.body;
945
- const forgotPasswordData = await service({ strapi }).makeBackendRequest(
1014
+ const forgotPasswordData = await service({ strapi: strapi2 }).makeBackendRequest(
946
1015
  `/user/forgot-password`,
947
1016
  {
948
1017
  method: "POST",
@@ -962,9 +1031,9 @@ const userDetails = ({ strapi }) => ({
962
1031
  }
963
1032
  }
964
1033
  });
965
- const notificationChannels = ({ strapi }) => ({
1034
+ const notificationChannels = ({ strapi: strapi2 }) => ({
966
1035
  async getNotificationChannels(ctx) {
967
- const notificationChannelsData = await service({ strapi }).makeBackendRequest(
1036
+ const notificationChannelsData = await service({ strapi: strapi2 }).makeBackendRequest(
968
1037
  `/user/integrations`,
969
1038
  {
970
1039
  method: "GET"
@@ -974,7 +1043,7 @@ const notificationChannels = ({ strapi }) => ({
974
1043
  },
975
1044
  async createNotificationChannel(ctx) {
976
1045
  const { ...data } = ctx.request.body;
977
- const notificationChannelsData = await service({ strapi }).makeBackendRequest(
1046
+ const notificationChannelsData = await service({ strapi: strapi2 }).makeBackendRequest(
978
1047
  `/user/integrations`,
979
1048
  {
980
1049
  method: "POST",
@@ -984,7 +1053,7 @@ const notificationChannels = ({ strapi }) => ({
984
1053
  ctx.body = { notificationChannelsData };
985
1054
  },
986
1055
  async getSupportedIntegrations(ctx) {
987
- const supportedIntegrationsData = await service({ strapi }).makeBackendRequest(
1056
+ const supportedIntegrationsData = await service({ strapi: strapi2 }).makeBackendRequest(
988
1057
  `/integrations/supported`,
989
1058
  {
990
1059
  method: "GET"
@@ -994,7 +1063,7 @@ const notificationChannels = ({ strapi }) => ({
994
1063
  },
995
1064
  async testNotificationChannel(ctx) {
996
1065
  const { id } = ctx.params;
997
- const testResult = await service({ strapi }).makeBackendRequest(
1066
+ const testResult = await service({ strapi: strapi2 }).makeBackendRequest(
998
1067
  `/user/integrations/${id}/test`,
999
1068
  {
1000
1069
  method: "POST"
@@ -1005,7 +1074,7 @@ const notificationChannels = ({ strapi }) => ({
1005
1074
  async updateNotificationChannel(ctx) {
1006
1075
  const { id } = ctx.params;
1007
1076
  const { ...data } = ctx.request.body;
1008
- const updatedChannel = await service({ strapi }).makeBackendRequest(
1077
+ const updatedChannel = await service({ strapi: strapi2 }).makeBackendRequest(
1009
1078
  `/user/integrations/${id}`,
1010
1079
  {
1011
1080
  method: "PUT",
@@ -1016,22 +1085,22 @@ const notificationChannels = ({ strapi }) => ({
1016
1085
  },
1017
1086
  async deleteNotificationChannel(ctx) {
1018
1087
  const { id } = ctx.params;
1019
- const deleteResult = await service({ strapi }).makeBackendRequest(`/user/integrations/${id}`, {
1088
+ const deleteResult = await service({ strapi: strapi2 }).makeBackendRequest(`/user/integrations/${id}`, {
1020
1089
  method: "DELETE"
1021
1090
  });
1022
1091
  ctx.body = { deleteResult };
1023
1092
  }
1024
1093
  });
1025
- const tags = ({ strapi }) => ({
1094
+ const tags = ({ strapi: strapi2 }) => ({
1026
1095
  async getTags(ctx) {
1027
- const tagsData = await service({ strapi }).makeBackendRequest(`/user/tags`, {
1096
+ const tagsData = await service({ strapi: strapi2 }).makeBackendRequest(`/user/tags`, {
1028
1097
  method: "GET"
1029
1098
  });
1030
1099
  ctx.body = { tagsData };
1031
1100
  },
1032
1101
  async getTagsByID(ctx) {
1033
1102
  const id = ctx.params.id;
1034
- const tagsData = await service({ strapi }).makeBackendRequest(
1103
+ const tagsData = await service({ strapi: strapi2 }).makeBackendRequest(
1035
1104
  `/user/tags/${id}`,
1036
1105
  {
1037
1106
  method: "GET"
@@ -1040,10 +1109,10 @@ const tags = ({ strapi }) => ({
1040
1109
  ctx.body = { tagsData };
1041
1110
  },
1042
1111
  async createTag(ctx) {
1043
- const { name, color } = ctx.request.body;
1044
- const tagsData = await service({ strapi }).makeBackendRequest(`/user/tags`, {
1112
+ const { name: name2, color } = ctx.request.body;
1113
+ const tagsData = await service({ strapi: strapi2 }).makeBackendRequest(`/user/tags`, {
1045
1114
  method: "POST",
1046
- body: JSON.stringify({ name, color })
1115
+ body: JSON.stringify({ name: name2, color })
1047
1116
  });
1048
1117
  ctx.body = { tagsData };
1049
1118
  },
@@ -1055,7 +1124,7 @@ const tags = ({ strapi }) => ({
1055
1124
  ctx.body = { error: "Tag ID is required" };
1056
1125
  return;
1057
1126
  }
1058
- const tagsData = await service({ strapi }).makeBackendRequest(
1127
+ const tagsData = await service({ strapi: strapi2 }).makeBackendRequest(
1059
1128
  `/user/tags/${id}`,
1060
1129
  {
1061
1130
  method: "PUT",
@@ -1066,7 +1135,7 @@ const tags = ({ strapi }) => ({
1066
1135
  },
1067
1136
  async deleteTags(ctx) {
1068
1137
  const id = ctx.params.id;
1069
- const tagsData = await service({ strapi }).makeBackendRequest(
1138
+ const tagsData = await service({ strapi: strapi2 }).makeBackendRequest(
1070
1139
  `/user/tags/${id}`,
1071
1140
  {
1072
1141
  method: "DELETE"
@@ -1,27 +1,42 @@
1
- const bootstrap = ({ strapi }) => {
2
- };
3
- const destroy = ({ strapi }) => {
4
- };
5
- const register = ({ strapi }) => {
6
- };
7
- const config = {
8
- default: {},
9
- validator() {
10
- }
11
- };
12
- const contentTypes = {};
13
- const controller = ({ strapi }) => ({
14
- index(ctx) {
15
- ctx.body = strapi.plugin("upsnap").service("service").getWelcomeMessage();
16
- }
17
- });
18
1
  const BACKEND_URL = "https://api.upsnap.ai/v1";
19
2
  const LIGHTHOUSE_CHECKS = ["performance", "accessibility", "bestPractices", "seo", "pwa"];
20
- const service = ({ strapi }) => ({
3
+ const version = "1.0.11";
4
+ const repository = { "type": "git", "url": "https://github.com/Appfoster/upsnap-strapi" };
5
+ const keywords = [];
6
+ const type = "commonjs";
7
+ const exports$1 = { "./package.json": "./package.json", "./strapi-admin": { "types": "./dist/admin/src/index.d.ts", "source": "./admin/src/index.ts", "import": "./dist/admin/index.mjs", "require": "./dist/admin/index.js", "default": "./dist/admin/index.js" }, "./strapi-server": { "types": "./dist/server/src/index.d.ts", "source": "./server/src/index.ts", "import": "./dist/server/index.mjs", "require": "./dist/server/index.js", "default": "./dist/server/index.js" } };
8
+ const files = ["dist"];
9
+ const scripts = { "build": "strapi-plugin build", "watch": "strapi-plugin watch", "watch:link": "strapi-plugin watch:link", "verify": "strapi-plugin verify", "test:ts:front": "run -T tsc -p admin/tsconfig.json", "test:ts:back": "run -T tsc -p server/tsconfig.json" };
10
+ const dependencies = { "@strapi/design-system": "^2.0.0-rc.30", "@strapi/icons": "^2.0.0-rc.30", "axios": "^1.13.5", "react-apexcharts": "^2.0.1", "react-intl": "^6.6.0", "react-toastify": "^11.0.5" };
11
+ const devDependencies = { "@strapi/sdk-plugin": "^6.0.1", "@strapi/strapi": "^5.37.1", "@strapi/typescript-utils": "^5.37.1", "@types/react": "^19.2.14", "@types/react-dom": "^19.2.3", "prettier": "^3.8.1", "react": "^18.3.1", "react-dom": "^18.3.1", "react-router-dom": "^6.30.3", "styled-components": "^6.3.11", "typescript": "^5.9.3" };
12
+ const peerDependencies = { "@strapi/sdk-plugin": "^5.4.0", "@strapi/strapi": "^5.0.0", "react": "^18.3.1", "react-dom": "^18.3.1", "react-router-dom": "^6.30.3", "styled-components": "^6.3.11" };
13
+ const strapi = { "kind": "plugin", "name": "upsnap", "displayName": "Upsnap", "description": "Complete website health monitoring for Strapi, including uptime, SSL certificates, broken links, performance metrics, domain health, and mixed content issues." };
14
+ const name = "@upsnap/strapi";
15
+ const description = "Complete website health monitoring for Strapi, including uptime, SSL certificates, broken links, performance metrics, domain health, and mixed content issues.";
16
+ const license = "MIT";
17
+ const author = "Upsnap <support@upsnap.ai>";
18
+ const packageJson = {
19
+ version,
20
+ repository,
21
+ keywords,
22
+ type,
23
+ exports: exports$1,
24
+ files,
25
+ scripts,
26
+ dependencies,
27
+ devDependencies,
28
+ peerDependencies,
29
+ strapi,
30
+ name,
31
+ description,
32
+ license,
33
+ author
34
+ };
35
+ const service = ({ strapi: strapi2 }) => ({
21
36
  getWelcomeMessage() {
22
37
  return "Welcome to Strapi πŸš€";
23
38
  },
24
- settingsStore: strapi.store({
39
+ settingsStore: strapi2.store({
25
40
  type: "plugin",
26
41
  name: "upsnap",
27
42
  key: "settings"
@@ -59,11 +74,65 @@ const service = ({ strapi }) => ({
59
74
  data: await response.arrayBuffer(),
60
75
  headers: response.headers
61
76
  };
77
+ },
78
+ async trackInstallation() {
79
+ try {
80
+ const settings2 = await this.settingsStore.get();
81
+ if (settings2?.installationTracked) {
82
+ return;
83
+ }
84
+ const pluginVersion = packageJson.version;
85
+ const strapiVersion = strapi2.config.get("info.strapi");
86
+ const siteUrl = strapi2.config.get("server.url") || `http://${strapi2.config.get("server.host") || "localhost"}:${strapi2.config.get("server.port") || 1337}`;
87
+ const response = await this.makeBackendRequest(
88
+ "/installation-data",
89
+ {
90
+ method: "POST",
91
+ body: JSON.stringify({
92
+ platform: "strapi",
93
+ details: {
94
+ version: pluginVersion,
95
+ site_url: siteUrl,
96
+ strapi_version: strapiVersion
97
+ }
98
+ })
99
+ },
100
+ true
101
+ );
102
+ if (response?.status === "success") {
103
+ await this.settingsStore.set({
104
+ value: {
105
+ ...settings2,
106
+ installationTracked: true
107
+ }
108
+ });
109
+ }
110
+ } catch (error) {
111
+ console.log("UpSnap: Failed to track installation data ", error);
112
+ }
113
+ }
114
+ });
115
+ const bootstrap = async ({ strapi: strapi2 }) => {
116
+ await service({ strapi: strapi2 }).trackInstallation();
117
+ };
118
+ const destroy = ({ strapi: strapi2 }) => {
119
+ };
120
+ const register = ({ strapi: strapi2 }) => {
121
+ };
122
+ const config = {
123
+ default: {},
124
+ validator() {
125
+ }
126
+ };
127
+ const contentTypes = {};
128
+ const controller = ({ strapi: strapi2 }) => ({
129
+ index(ctx) {
130
+ ctx.body = strapi2.plugin("upsnap").service("service").getWelcomeMessage();
62
131
  }
63
132
  });
64
- const settings = ({ strapi }) => ({
133
+ const settings = ({ strapi: strapi2 }) => ({
65
134
  async get(ctx) {
66
- const settings2 = await service({ strapi }).settingsStore.get();
135
+ const settings2 = await service({ strapi: strapi2 }).settingsStore.get();
67
136
  ctx.body = {
68
137
  token: settings2?.token ?? null,
69
138
  primaryMonitorId: settings2?.primaryMonitorId ?? null
@@ -72,7 +141,7 @@ const settings = ({ strapi }) => ({
72
141
  async set(ctx) {
73
142
  const { token, logOut } = ctx.request.body;
74
143
  if (!logOut) {
75
- const isValidData = await service({ strapi }).makeBackendRequest("/tokens/validate", {
144
+ const isValidData = await service({ strapi: strapi2 }).makeBackendRequest("/tokens/validate", {
76
145
  method: "POST",
77
146
  body: JSON.stringify({ token })
78
147
  }, true);
@@ -81,7 +150,7 @@ const settings = ({ strapi }) => ({
81
150
  return;
82
151
  }
83
152
  }
84
- const store = service({ strapi }).settingsStore;
153
+ const store = service({ strapi: strapi2 }).settingsStore;
85
154
  const current = await store.get() || {};
86
155
  await store.set({
87
156
  value: {
@@ -93,7 +162,7 @@ const settings = ({ strapi }) => ({
93
162
  },
94
163
  async setPrimaryMonitorId(ctx) {
95
164
  const { monitorId } = ctx.request.body;
96
- const store = service({ strapi }).settingsStore;
165
+ const store = service({ strapi: strapi2 }).settingsStore;
97
166
  const current = await store.get() || {};
98
167
  await store.set({
99
168
  value: {
@@ -104,7 +173,7 @@ const settings = ({ strapi }) => ({
104
173
  ctx.body = { ok: true };
105
174
  },
106
175
  async getPrimaryMonitorId(ctx) {
107
- const settings2 = await service({ strapi }).settingsStore.get();
176
+ const settings2 = await service({ strapi: strapi2 }).settingsStore.get();
108
177
  ctx.body = { primaryMonitorId: settings2?.primaryMonitorId };
109
178
  }
110
179
  });
@@ -332,10 +401,10 @@ function buildBrokenLinksErrorResponse(raw) {
332
401
  data: raw
333
402
  };
334
403
  }
335
- const monitor = ({ strapi }) => ({
404
+ const monitor = ({ strapi: strapi2 }) => ({
336
405
  async getById(ctx) {
337
406
  const monitorId = ctx.params.id;
338
- const token = await service({ strapi }).getToken();
407
+ const token = await service({ strapi: strapi2 }).getToken();
339
408
  const monitorResponse = await fetch(`${BACKEND_URL}/user/monitors/${monitorId}`, {
340
409
  method: "GET",
341
410
  headers: {
@@ -347,7 +416,7 @@ const monitor = ({ strapi }) => ({
347
416
  ctx.body = { monitor: monitor2 };
348
417
  },
349
418
  async get(ctx) {
350
- const monitorsData = await service({ strapi }).makeBackendRequest(
419
+ const monitorsData = await service({ strapi: strapi2 }).makeBackendRequest(
351
420
  `/user/monitors`,
352
421
  {
353
422
  method: "GET"
@@ -358,7 +427,7 @@ const monitor = ({ strapi }) => ({
358
427
  async getMonitorUptimeStats(ctx) {
359
428
  const monitorId = ctx.params.id;
360
429
  const { region } = ctx.query;
361
- const uptimeStatsData = await service({ strapi }).makeBackendRequest(
430
+ const uptimeStatsData = await service({ strapi: strapi2 }).makeBackendRequest(
362
431
  `/user/monitors/${monitorId}/uptime-stats?uptime_stats_time_frames=day,week,month&region=${region}`,
363
432
  {
364
433
  method: "GET"
@@ -369,7 +438,7 @@ const monitor = ({ strapi }) => ({
369
438
  async getMonitorHistogram(ctx) {
370
439
  const monitorId = ctx.params.id;
371
440
  const { region } = ctx.query;
372
- const histogramData = await service({ strapi }).makeBackendRequest(
441
+ const histogramData = await service({ strapi: strapi2 }).makeBackendRequest(
373
442
  `/user/monitors/${monitorId}/histogram?region=${region}`,
374
443
  {
375
444
  method: "GET"
@@ -379,7 +448,7 @@ const monitor = ({ strapi }) => ({
379
448
  },
380
449
  async getHealthChecks(ctx) {
381
450
  const { monitorUrl } = ctx.request.body;
382
- const healthCheckData = await service({ strapi }).makeBackendRequest(`/healthcheck`, {
451
+ const healthCheckData = await service({ strapi: strapi2 }).makeBackendRequest(`/healthcheck`, {
383
452
  method: "POST",
384
453
  headers: {
385
454
  "X-Requested-From": "craft"
@@ -395,7 +464,7 @@ const monitor = ({ strapi }) => ({
395
464
  },
396
465
  async getUptimeHealthCheck(ctx) {
397
466
  const { monitorUrl } = ctx.request.body;
398
- const uptimeHealthCheckData = await service({ strapi }).makeBackendRequest(
467
+ const uptimeHealthCheckData = await service({ strapi: strapi2 }).makeBackendRequest(
399
468
  `/healthcheck`,
400
469
  {
401
470
  method: "POST",
@@ -420,7 +489,7 @@ const monitor = ({ strapi }) => ({
420
489
  },
421
490
  async getSslHealthCheck(ctx) {
422
491
  const { monitorUrl } = ctx.request.body;
423
- const sslHealthCheckData = await service({ strapi }).makeBackendRequest(`/healthcheck`, {
492
+ const sslHealthCheckData = await service({ strapi: strapi2 }).makeBackendRequest(`/healthcheck`, {
424
493
  method: "POST",
425
494
  headers: {
426
495
  "X-Requested-From": "craft"
@@ -442,7 +511,7 @@ const monitor = ({ strapi }) => ({
442
511
  },
443
512
  async getDomainHealthCheck(ctx) {
444
513
  const { monitorUrl } = ctx.request.body;
445
- const domainHealthCheckData = await service({ strapi }).makeBackendRequest(
514
+ const domainHealthCheckData = await service({ strapi: strapi2 }).makeBackendRequest(
446
515
  `/healthcheck`,
447
516
  {
448
517
  method: "POST",
@@ -467,7 +536,7 @@ const monitor = ({ strapi }) => ({
467
536
  },
468
537
  async getLighthouseHealthCheck(ctx) {
469
538
  const { monitorUrl, strategy } = ctx.request.body;
470
- const lighthouseHealthCheckData = await service({ strapi }).makeBackendRequest(
539
+ const lighthouseHealthCheckData = await service({ strapi: strapi2 }).makeBackendRequest(
471
540
  `/healthcheck`,
472
541
  {
473
542
  method: "POST",
@@ -497,7 +566,7 @@ const monitor = ({ strapi }) => ({
497
566
  },
498
567
  async getBrokenLinksHealthCheck(ctx) {
499
568
  const { monitorUrl } = ctx.request.body;
500
- const brokenLinksHealthCheckData = await service({ strapi }).makeBackendRequest(
569
+ const brokenLinksHealthCheckData = await service({ strapi: strapi2 }).makeBackendRequest(
501
570
  `/healthcheck`,
502
571
  {
503
572
  method: "POST",
@@ -526,7 +595,7 @@ const monitor = ({ strapi }) => ({
526
595
  },
527
596
  async getMixedContentHealthCheck(ctx) {
528
597
  const { monitorUrl } = ctx.request.body;
529
- const mixedContentHealthCheckData = await service({ strapi }).makeBackendRequest(
598
+ const mixedContentHealthCheckData = await service({ strapi: strapi2 }).makeBackendRequest(
530
599
  `/healthcheck`,
531
600
  {
532
601
  method: "POST",
@@ -545,7 +614,7 @@ const monitor = ({ strapi }) => ({
545
614
  async getMonitorResponseTime(ctx) {
546
615
  const monitorId = ctx.params.id;
547
616
  const { start, end, region } = ctx.query;
548
- const responseTimeData = await service({ strapi }).makeBackendRequest(
617
+ const responseTimeData = await service({ strapi: strapi2 }).makeBackendRequest(
549
618
  `/user/monitors/${monitorId}/response-time?start=${start}&end=${end}&region=${region || "default"}`,
550
619
  {
551
620
  method: "GET"
@@ -555,7 +624,7 @@ const monitor = ({ strapi }) => ({
555
624
  },
556
625
  async getMonitorIncidents(ctx) {
557
626
  const monitorId = ctx.params.id;
558
- const incidentsData = await service({ strapi }).makeBackendRequest(
627
+ const incidentsData = await service({ strapi: strapi2 }).makeBackendRequest(
559
628
  `/user/monitors/incidents?monitorId=${monitorId}&page=1&page_size=20&time_range=7D`,
560
629
  {
561
630
  method: "GET"
@@ -565,7 +634,7 @@ const monitor = ({ strapi }) => ({
565
634
  },
566
635
  async getMonitorSettings(ctx) {
567
636
  const monitorId = ctx.params.id;
568
- const monitorSettingsData = await service({ strapi }).makeBackendRequest(
637
+ const monitorSettingsData = await service({ strapi: strapi2 }).makeBackendRequest(
569
638
  `/user/monitors/settings?id=${monitorId}`,
570
639
  {
571
640
  method: "GET"
@@ -575,7 +644,7 @@ const monitor = ({ strapi }) => ({
575
644
  },
576
645
  async createMonitor(ctx) {
577
646
  const { ...data } = ctx.request.body;
578
- const monitorsData = await service({ strapi }).makeBackendRequest(`/user/monitors`, {
647
+ const monitorsData = await service({ strapi: strapi2 }).makeBackendRequest(`/user/monitors`, {
579
648
  method: "POST",
580
649
  body: JSON.stringify(data)
581
650
  });
@@ -584,7 +653,7 @@ const monitor = ({ strapi }) => ({
584
653
  async updateMonitor(ctx) {
585
654
  const monitorId = ctx.params.id;
586
655
  const { ...data } = ctx.request.body;
587
- const monitorsData = await service({ strapi }).makeBackendRequest(
656
+ const monitorsData = await service({ strapi: strapi2 }).makeBackendRequest(
588
657
  `/user/monitors/${monitorId}`,
589
658
  {
590
659
  method: "PUT",
@@ -595,7 +664,7 @@ const monitor = ({ strapi }) => ({
595
664
  },
596
665
  async deleteMonitor(ctx) {
597
666
  const monitorId = ctx.params.id;
598
- const monitorsData = await service({ strapi }).makeBackendRequest(
667
+ const monitorsData = await service({ strapi: strapi2 }).makeBackendRequest(
599
668
  `/user/monitors/${monitorId}`,
600
669
  {
601
670
  method: "DELETE"
@@ -605,7 +674,7 @@ const monitor = ({ strapi }) => ({
605
674
  },
606
675
  async deleteMonitors(ctx) {
607
676
  const { monitorIds } = ctx.request.body;
608
- const monitorsData = await service({ strapi }).makeBackendRequest(`/user/monitors`, {
677
+ const monitorsData = await service({ strapi: strapi2 }).makeBackendRequest(`/user/monitors`, {
609
678
  method: "PATCH",
610
679
  body: JSON.stringify({ ids: monitorIds, action: "delete" })
611
680
  });
@@ -640,7 +709,7 @@ const monitor = ({ strapi }) => ({
640
709
  if (search) queryParams.set("search", search);
641
710
  if (sortBy) queryParams.set("sort_by", sortBy);
642
711
  if (sortOrder) queryParams.set("sort_order", sortOrder);
643
- const incidentsData = await service({ strapi }).makeBackendRequest(
712
+ const incidentsData = await service({ strapi: strapi2 }).makeBackendRequest(
644
713
  `/user/monitors/incidents?${queryParams.toString()}`,
645
714
  {
646
715
  method: "GET"
@@ -650,20 +719,20 @@ const monitor = ({ strapi }) => ({
650
719
  },
651
720
  async exportIncidents(ctx) {
652
721
  try {
653
- const { monitorId, region, type, start_time, end_time, search, file_type } = ctx.request.body;
722
+ const { monitorId, region, type: type2, start_time, end_time, search, file_type } = ctx.request.body;
654
723
  if (!monitorId) {
655
724
  ctx.status = 400;
656
725
  ctx.body = { error: "monitorId is required" };
657
726
  return;
658
727
  }
659
728
  const queryParams = new URLSearchParams();
660
- if (type) queryParams.set("type", type);
729
+ if (type2) queryParams.set("type", type2);
661
730
  if (start_time) queryParams.set("start_time", start_time);
662
731
  if (end_time) queryParams.set("end_time", end_time);
663
732
  if (search) queryParams.set("search", search);
664
733
  if (file_type) queryParams.set("file_type", file_type);
665
734
  if (region) queryParams.set("region", region);
666
- const response = await service({ strapi }).makeBackendRequest(
735
+ const response = await service({ strapi: strapi2 }).makeBackendRequest(
667
736
  `/user/monitors/${monitorId}/incidents/export?${queryParams.toString()}`,
668
737
  { method: "GET" }
669
738
  );
@@ -687,16 +756,16 @@ const monitor = ({ strapi }) => ({
687
756
  }
688
757
  }
689
758
  });
690
- const statusPage = ({ strapi }) => ({
759
+ const statusPage = ({ strapi: strapi2 }) => ({
691
760
  async getStatusPages(ctx) {
692
- const statusPagesData = await service({ strapi }).makeBackendRequest(`/user/status-pages`, {
761
+ const statusPagesData = await service({ strapi: strapi2 }).makeBackendRequest(`/user/status-pages`, {
693
762
  method: "GET"
694
763
  });
695
764
  ctx.body = { statusPagesData };
696
765
  },
697
766
  async getStatusPagesByID(ctx) {
698
767
  const id = ctx.params.id;
699
- const statusPagesData = await service({ strapi }).makeBackendRequest(
768
+ const statusPagesData = await service({ strapi: strapi2 }).makeBackendRequest(
700
769
  `/user/status-pages/${id}`,
701
770
  {
702
771
  method: "GET"
@@ -705,16 +774,16 @@ const statusPage = ({ strapi }) => ({
705
774
  ctx.body = { statusPagesData };
706
775
  },
707
776
  async saveStatusPages(ctx) {
708
- const { name, monitor_ids, is_published } = ctx.request.body;
709
- const statusPagesData = await service({ strapi }).makeBackendRequest(`/user/status-pages`, {
777
+ const { name: name2, monitor_ids, is_published } = ctx.request.body;
778
+ const statusPagesData = await service({ strapi: strapi2 }).makeBackendRequest(`/user/status-pages`, {
710
779
  method: "POST",
711
- body: JSON.stringify({ name, monitor_ids, is_published })
780
+ body: JSON.stringify({ name: name2, monitor_ids, is_published })
712
781
  });
713
782
  ctx.body = { statusPagesData };
714
783
  },
715
784
  async updateStatusPages(ctx) {
716
785
  const { id, ...data } = ctx.request.body;
717
- const statusPagesData = await service({ strapi }).makeBackendRequest(
786
+ const statusPagesData = await service({ strapi: strapi2 }).makeBackendRequest(
718
787
  `/user/status-pages/${id}`,
719
788
  {
720
789
  method: "PUT",
@@ -725,7 +794,7 @@ const statusPage = ({ strapi }) => ({
725
794
  },
726
795
  async resetLink(ctx) {
727
796
  const { id } = ctx.request.body;
728
- const statusPagesData = await service({ strapi }).makeBackendRequest(
797
+ const statusPagesData = await service({ strapi: strapi2 }).makeBackendRequest(
729
798
  `/user/status-pages/${id}/reset`,
730
799
  {
731
800
  method: "POST"
@@ -735,7 +804,7 @@ const statusPage = ({ strapi }) => ({
735
804
  },
736
805
  async deleteStatusPages(ctx) {
737
806
  const id = ctx.params.id;
738
- const statusPagesData = await service({ strapi }).makeBackendRequest(
807
+ const statusPagesData = await service({ strapi: strapi2 }).makeBackendRequest(
739
808
  `/user/status-pages/${id}`,
740
809
  {
741
810
  method: "DELETE"
@@ -744,17 +813,17 @@ const statusPage = ({ strapi }) => ({
744
813
  ctx.body = { statusPagesData };
745
814
  }
746
815
  });
747
- const regions = ({ strapi }) => ({
816
+ const regions = ({ strapi: strapi2 }) => ({
748
817
  async getRegions(ctx) {
749
- const regionsData = await service({ strapi }).makeBackendRequest(`/regions`, {
818
+ const regionsData = await service({ strapi: strapi2 }).makeBackendRequest(`/regions`, {
750
819
  method: "GET"
751
820
  });
752
821
  ctx.body = { regionsData };
753
822
  }
754
823
  });
755
- const userDetailsService = ({ strapi }) => ({
824
+ const userDetailsService = ({ strapi: strapi2 }) => ({
756
825
  async createUserApiToken(sessionToken) {
757
- const apiTokens = await service({ strapi }).makeBackendRequest(
826
+ const apiTokens = await service({ strapi: strapi2 }).makeBackendRequest(
758
827
  `/tokens/generate`,
759
828
  {
760
829
  method: "POST",
@@ -774,7 +843,7 @@ const userDetailsService = ({ strapi }) => ({
774
843
  return null;
775
844
  },
776
845
  async getUserApiToken(sessionToken) {
777
- const apiTokens = await service({ strapi }).makeBackendRequest(
846
+ const apiTokens = await service({ strapi: strapi2 }).makeBackendRequest(
778
847
  `/tokens`,
779
848
  {
780
849
  method: "GET"
@@ -843,7 +912,7 @@ const userDetailsService = ({ strapi }) => ({
843
912
  }
844
913
  }
845
914
  };
846
- const monitorsData = await service({ strapi }).makeBackendRequest(`/user/monitors`, {
915
+ const monitorsData = await service({ strapi: strapi2 }).makeBackendRequest(`/user/monitors`, {
847
916
  method: "POST",
848
917
  body: JSON.stringify(payload)
849
918
  }, true, apiToken);
@@ -858,9 +927,9 @@ const userDetailsService = ({ strapi }) => ({
858
927
  }
859
928
  }
860
929
  });
861
- const userDetails = ({ strapi }) => ({
930
+ const userDetails = ({ strapi: strapi2 }) => ({
862
931
  async getUserDetails(ctx) {
863
- const userDetailsData = await service({ strapi }).makeBackendRequest(`/user/details`, {
932
+ const userDetailsData = await service({ strapi: strapi2 }).makeBackendRequest(`/user/details`, {
864
933
  method: "GET"
865
934
  });
866
935
  ctx.body = { userDetailsData };
@@ -868,7 +937,7 @@ const userDetails = ({ strapi }) => ({
868
937
  async signUp(ctx) {
869
938
  try {
870
939
  const { email, password, source, site_url, fullName } = ctx.request.body;
871
- const registerData = await service({ strapi }).makeBackendRequest(
940
+ const registerData = await service({ strapi: strapi2 }).makeBackendRequest(
872
941
  `/user/register`,
873
942
  {
874
943
  method: "POST",
@@ -882,13 +951,13 @@ const userDetails = ({ strapi }) => ({
882
951
  true
883
952
  );
884
953
  if (registerData?.data?.token) {
885
- const apiToken = await userDetailsService({ strapi }).getUserApiToken(registerData?.data?.token);
886
- const monitorId = await userDetailsService({ strapi }).createInitialMonitor(site_url, apiToken);
954
+ const apiToken = await userDetailsService({ strapi: strapi2 }).getUserApiToken(registerData?.data?.token);
955
+ const monitorId = await userDetailsService({ strapi: strapi2 }).createInitialMonitor(site_url, apiToken);
887
956
  if (!apiToken || !monitorId) {
888
957
  ctx.body = { ok: false, message: "Error creating API token or Monitor" };
889
958
  return;
890
959
  }
891
- const store = service({ strapi }).settingsStore;
960
+ const store = service({ strapi: strapi2 }).settingsStore;
892
961
  const current = await store.get() || {};
893
962
  await store.set({
894
963
  value: {
@@ -908,7 +977,7 @@ const userDetails = ({ strapi }) => ({
908
977
  async signIn(ctx) {
909
978
  try {
910
979
  const { email, password } = ctx.request.body;
911
- const loginData = await service({ strapi }).makeBackendRequest(
980
+ const loginData = await service({ strapi: strapi2 }).makeBackendRequest(
912
981
  `/user/login`,
913
982
  {
914
983
  method: "POST",
@@ -920,8 +989,8 @@ const userDetails = ({ strapi }) => ({
920
989
  true
921
990
  );
922
991
  if (loginData?.data?.token) {
923
- const apiToken = await userDetailsService({ strapi }).getUserApiToken(loginData?.data?.token);
924
- const store = service({ strapi }).settingsStore;
992
+ const apiToken = await userDetailsService({ strapi: strapi2 }).getUserApiToken(loginData?.data?.token);
993
+ const store = service({ strapi: strapi2 }).settingsStore;
925
994
  const current = await store.get() || {};
926
995
  await store.set({
927
996
  value: {
@@ -940,7 +1009,7 @@ const userDetails = ({ strapi }) => ({
940
1009
  async forgotPassword(ctx) {
941
1010
  try {
942
1011
  const { email } = ctx.request.body;
943
- const forgotPasswordData = await service({ strapi }).makeBackendRequest(
1012
+ const forgotPasswordData = await service({ strapi: strapi2 }).makeBackendRequest(
944
1013
  `/user/forgot-password`,
945
1014
  {
946
1015
  method: "POST",
@@ -960,9 +1029,9 @@ const userDetails = ({ strapi }) => ({
960
1029
  }
961
1030
  }
962
1031
  });
963
- const notificationChannels = ({ strapi }) => ({
1032
+ const notificationChannels = ({ strapi: strapi2 }) => ({
964
1033
  async getNotificationChannels(ctx) {
965
- const notificationChannelsData = await service({ strapi }).makeBackendRequest(
1034
+ const notificationChannelsData = await service({ strapi: strapi2 }).makeBackendRequest(
966
1035
  `/user/integrations`,
967
1036
  {
968
1037
  method: "GET"
@@ -972,7 +1041,7 @@ const notificationChannels = ({ strapi }) => ({
972
1041
  },
973
1042
  async createNotificationChannel(ctx) {
974
1043
  const { ...data } = ctx.request.body;
975
- const notificationChannelsData = await service({ strapi }).makeBackendRequest(
1044
+ const notificationChannelsData = await service({ strapi: strapi2 }).makeBackendRequest(
976
1045
  `/user/integrations`,
977
1046
  {
978
1047
  method: "POST",
@@ -982,7 +1051,7 @@ const notificationChannels = ({ strapi }) => ({
982
1051
  ctx.body = { notificationChannelsData };
983
1052
  },
984
1053
  async getSupportedIntegrations(ctx) {
985
- const supportedIntegrationsData = await service({ strapi }).makeBackendRequest(
1054
+ const supportedIntegrationsData = await service({ strapi: strapi2 }).makeBackendRequest(
986
1055
  `/integrations/supported`,
987
1056
  {
988
1057
  method: "GET"
@@ -992,7 +1061,7 @@ const notificationChannels = ({ strapi }) => ({
992
1061
  },
993
1062
  async testNotificationChannel(ctx) {
994
1063
  const { id } = ctx.params;
995
- const testResult = await service({ strapi }).makeBackendRequest(
1064
+ const testResult = await service({ strapi: strapi2 }).makeBackendRequest(
996
1065
  `/user/integrations/${id}/test`,
997
1066
  {
998
1067
  method: "POST"
@@ -1003,7 +1072,7 @@ const notificationChannels = ({ strapi }) => ({
1003
1072
  async updateNotificationChannel(ctx) {
1004
1073
  const { id } = ctx.params;
1005
1074
  const { ...data } = ctx.request.body;
1006
- const updatedChannel = await service({ strapi }).makeBackendRequest(
1075
+ const updatedChannel = await service({ strapi: strapi2 }).makeBackendRequest(
1007
1076
  `/user/integrations/${id}`,
1008
1077
  {
1009
1078
  method: "PUT",
@@ -1014,22 +1083,22 @@ const notificationChannels = ({ strapi }) => ({
1014
1083
  },
1015
1084
  async deleteNotificationChannel(ctx) {
1016
1085
  const { id } = ctx.params;
1017
- const deleteResult = await service({ strapi }).makeBackendRequest(`/user/integrations/${id}`, {
1086
+ const deleteResult = await service({ strapi: strapi2 }).makeBackendRequest(`/user/integrations/${id}`, {
1018
1087
  method: "DELETE"
1019
1088
  });
1020
1089
  ctx.body = { deleteResult };
1021
1090
  }
1022
1091
  });
1023
- const tags = ({ strapi }) => ({
1092
+ const tags = ({ strapi: strapi2 }) => ({
1024
1093
  async getTags(ctx) {
1025
- const tagsData = await service({ strapi }).makeBackendRequest(`/user/tags`, {
1094
+ const tagsData = await service({ strapi: strapi2 }).makeBackendRequest(`/user/tags`, {
1026
1095
  method: "GET"
1027
1096
  });
1028
1097
  ctx.body = { tagsData };
1029
1098
  },
1030
1099
  async getTagsByID(ctx) {
1031
1100
  const id = ctx.params.id;
1032
- const tagsData = await service({ strapi }).makeBackendRequest(
1101
+ const tagsData = await service({ strapi: strapi2 }).makeBackendRequest(
1033
1102
  `/user/tags/${id}`,
1034
1103
  {
1035
1104
  method: "GET"
@@ -1038,10 +1107,10 @@ const tags = ({ strapi }) => ({
1038
1107
  ctx.body = { tagsData };
1039
1108
  },
1040
1109
  async createTag(ctx) {
1041
- const { name, color } = ctx.request.body;
1042
- const tagsData = await service({ strapi }).makeBackendRequest(`/user/tags`, {
1110
+ const { name: name2, color } = ctx.request.body;
1111
+ const tagsData = await service({ strapi: strapi2 }).makeBackendRequest(`/user/tags`, {
1043
1112
  method: "POST",
1044
- body: JSON.stringify({ name, color })
1113
+ body: JSON.stringify({ name: name2, color })
1045
1114
  });
1046
1115
  ctx.body = { tagsData };
1047
1116
  },
@@ -1053,7 +1122,7 @@ const tags = ({ strapi }) => ({
1053
1122
  ctx.body = { error: "Tag ID is required" };
1054
1123
  return;
1055
1124
  }
1056
- const tagsData = await service({ strapi }).makeBackendRequest(
1125
+ const tagsData = await service({ strapi: strapi2 }).makeBackendRequest(
1057
1126
  `/user/tags/${id}`,
1058
1127
  {
1059
1128
  method: "PUT",
@@ -1064,7 +1133,7 @@ const tags = ({ strapi }) => ({
1064
1133
  },
1065
1134
  async deleteTags(ctx) {
1066
1135
  const id = ctx.params.id;
1067
- const tagsData = await service({ strapi }).makeBackendRequest(
1136
+ const tagsData = await service({ strapi: strapi2 }).makeBackendRequest(
1068
1137
  `/user/tags/${id}`,
1069
1138
  {
1070
1139
  method: "DELETE"
@@ -4,7 +4,7 @@ declare const _default: {
4
4
  }) => void;
5
5
  bootstrap: ({ strapi }: {
6
6
  strapi: import('@strapi/types/dist/core').Strapi;
7
- }) => void;
7
+ }) => Promise<void>;
8
8
  destroy: ({ strapi }: {
9
9
  strapi: import('@strapi/types/dist/core').Strapi;
10
10
  }) => void;
@@ -146,6 +146,7 @@ declare const _default: {
146
146
  };
147
147
  getToken(): Promise<string>;
148
148
  makeBackendRequest(endpoint: string, options: RequestInit, forValidation?: boolean, sessionToken?: string): Promise<unknown>;
149
+ trackInstallation(): Promise<void>;
149
150
  };
150
151
  userDetailsService: ({ strapi }: {
151
152
  strapi: import('@strapi/types/dist/core').Strapi;
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.0.10",
2
+ "version": "1.0.11",
3
3
  "repository": {
4
4
  "type": "git",
5
5
  "url": "https://github.com/Appfoster/upsnap-strapi"