@vicacha-devs/strapi-plugin-certificates 0.0.0-stage → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +17 -2
  3. package/dist/admin/CertificatesPage-CFDIEBN_.js +783 -0
  4. package/dist/admin/CertificatesPage-DeGmoX7h.cjs +783 -0
  5. package/dist/admin/SettingsPage-CsWFO1XB.js +447 -0
  6. package/dist/admin/SettingsPage-D7Ob1gV0.cjs +447 -0
  7. package/dist/admin/ar-Bv3T0_7C.cjs +258 -0
  8. package/dist/admin/ar-CDFHNnFd.js +258 -0
  9. package/dist/admin/de-BjMxn-Lt.js +258 -0
  10. package/dist/admin/de-DB5eW-yI.cjs +258 -0
  11. package/dist/admin/en-BI5Z3lPW.js +258 -0
  12. package/dist/admin/en-CsYV0VDf.cjs +258 -0
  13. package/dist/admin/es-B7uy9a-2.js +258 -0
  14. package/dist/admin/es-DEp3j3kD.cjs +258 -0
  15. package/dist/admin/fr-D7y038Pm.cjs +258 -0
  16. package/dist/admin/fr-DxbtdEIA.js +258 -0
  17. package/dist/admin/id-DfW4ARVm.js +258 -0
  18. package/dist/admin/id-Wuw9jl-Y.cjs +258 -0
  19. package/dist/admin/index-BQdS3gc3.cjs +707 -0
  20. package/dist/admin/index-BYO34da4.js +708 -0
  21. package/dist/admin/index.cjs +5 -0
  22. package/dist/admin/index.js +5 -0
  23. package/dist/admin/index.mjs +5 -0
  24. package/dist/admin/pt-C0QaikKS.js +258 -0
  25. package/dist/admin/pt-Dj2oc3Ga.cjs +258 -0
  26. package/dist/admin/src/components/IssueCertificateModal.d.ts +9 -0
  27. package/dist/admin/src/components/SettingsTabHelpers.d.ts +13 -0
  28. package/dist/admin/src/index.d.ts +11 -0
  29. package/dist/admin/src/pages/CertificatesPage.d.ts +3 -0
  30. package/dist/admin/src/pages/SettingsPage.d.ts +3 -0
  31. package/dist/admin/src/translations/cmLabels.d.ts +1 -0
  32. package/dist/admin/src/translations/cmPlaceholders.d.ts +1 -0
  33. package/dist/admin/tr-BbeagXRY.js +258 -0
  34. package/dist/admin/tr-DlGl_XMF.cjs +258 -0
  35. package/dist/admin/ur-Bwn4TrjF.js +258 -0
  36. package/dist/admin/ur-qIlUtgqb.cjs +258 -0
  37. package/dist/admin/zh-Cmg5mEvP.js +258 -0
  38. package/dist/admin/zh-D-3QDsuQ.cjs +258 -0
  39. package/dist/package.json +3 -0
  40. package/dist/server/index.cjs +2282 -0
  41. package/dist/server/index.js +2282 -0
  42. package/dist/server/index.mjs +2282 -0
  43. package/dist/server/src/bootstrap.d.ts +5 -0
  44. package/dist/server/src/content-types/certificate/schema.json.d.ts +165 -0
  45. package/dist/server/src/content-types/index.d.ts +277 -0
  46. package/dist/server/src/content-types/template/schema.json.d.ts +118 -0
  47. package/dist/server/src/controllers/admin.d.ts +31 -0
  48. package/dist/server/src/controllers/content-api.d.ts +28 -0
  49. package/dist/server/src/controllers/index.d.ts +30 -0
  50. package/dist/server/src/index.d.ts +413 -0
  51. package/dist/server/src/register.d.ts +5 -0
  52. package/dist/server/src/routes/admin.d.ts +12 -0
  53. package/dist/server/src/routes/content-api.d.ts +12 -0
  54. package/dist/server/src/routes/index.d.ts +25 -0
  55. package/dist/server/src/services/docusign.d.ts +76 -0
  56. package/dist/server/src/services/index.d.ts +76 -0
  57. package/dist/server/src/services/issuance.d.ts +54 -0
  58. package/dist/server/src/services/issuanceHelpers.d.ts +47 -0
  59. package/dist/server/src/services/settings.d.ts +17 -0
  60. package/dist/server/src/services/urlHelpers.d.ts +2 -0
  61. package/dist/shared/calendarSystems.d.ts +3 -0
  62. package/dist/shared/cryptoEngine.d.ts +27 -0
  63. package/dist/shared/documentRenderer.d.ts +12 -0
  64. package/dist/shared/index.cjs +636 -0
  65. package/dist/shared/index.d.ts +5 -0
  66. package/dist/shared/index.js +613 -0
  67. package/dist/shared/index.mjs +613 -0
  68. package/dist/shared/pluginId.d.ts +2 -0
  69. package/dist/shared/types.d.ts +194 -0
  70. package/package.json +112 -3
@@ -0,0 +1,194 @@
1
+ import { AlternateDateValue, CalendarSystemConfig } from './calendarSystems';
2
+ export type CertificateStatus = "pending_approval" | "issued" | "revoked" | "expired";
3
+ export type ESignProviderType = "none" | "docusign" | "webhook";
4
+ export type ESignEnvelopeStatus = "not_sent" | "sent" | "delivered" | "completed" | "declined" | "voided";
5
+ export interface DocuSignProviderConfig {
6
+ enabled: boolean;
7
+ provider: ESignProviderType;
8
+ baseUrl: string;
9
+ accountId: string;
10
+ integrationKey?: string;
11
+ emailSubjectPrefix?: string;
12
+ }
13
+ export interface CertificateSignatory {
14
+ name: string;
15
+ title: string;
16
+ role?: string;
17
+ email?: string;
18
+ routingOrder?: number;
19
+ signatureImageUrl?: string;
20
+ signedAt?: string;
21
+ }
22
+ export interface CertificateWitness {
23
+ fullName: string;
24
+ documentIdMasked?: string;
25
+ role?: string;
26
+ email?: string;
27
+ routingOrder?: number;
28
+ signedAt?: string;
29
+ }
30
+ export interface CertificateCustomFieldDef {
31
+ key: string;
32
+ label: string;
33
+ required?: boolean;
34
+ }
35
+ export interface CertificateTemplate {
36
+ id?: number | string;
37
+ documentId: string;
38
+ name: string;
39
+ slug: string;
40
+ description?: string;
41
+ serialPrefix: string;
42
+ defaultValidityDays?: number | null;
43
+ requiresWitnesses: boolean;
44
+ minWitnesses: number;
45
+ requiresApproval: boolean;
46
+ esignEnabled?: boolean;
47
+ esignProvider?: ESignProviderType;
48
+ organizationName: string;
49
+ organizationSubheader?: string;
50
+ headerText?: string;
51
+ titleText: string;
52
+ bodyTemplate: string;
53
+ footerText?: string;
54
+ defaultSignatories: CertificateSignatory[];
55
+ customFieldsSchema?: CertificateCustomFieldDef[];
56
+ secondaryCalendars?: CalendarSystemConfig[];
57
+ accentColor?: string;
58
+ active: boolean;
59
+ }
60
+ export interface CertificateRecord {
61
+ id?: number | string;
62
+ documentId: string;
63
+ serialNumber: string;
64
+ templateDocumentId: string;
65
+ templateSlug: string;
66
+ templateName: string;
67
+ status: CertificateStatus;
68
+ recipientFullName: string;
69
+ recipientChosenName?: string;
70
+ recipientEmail?: string;
71
+ recipientPhone?: string;
72
+ recipientNationality?: string;
73
+ nationalIdMasked?: string;
74
+ nationalIdHash?: string;
75
+ issuedAt: string;
76
+ expiresAt?: string | null;
77
+ revokedAt?: string | null;
78
+ revocationReason?: string | null;
79
+ signatories: CertificateSignatory[];
80
+ witnesses: CertificateWitness[];
81
+ customData?: Record<string, string>;
82
+ secondaryDates?: Record<string, AlternateDateValue>;
83
+ canonicalPayloadHash: string;
84
+ cryptographicSignature: string;
85
+ publicKeyFingerprint: string;
86
+ verificationToken?: string;
87
+ esignProvider?: ESignProviderType;
88
+ esignEnvelopeId?: string;
89
+ esignEnvelopeStatus?: ESignEnvelopeStatus;
90
+ esignCompletedAt?: string | null;
91
+ linkedBookingCode?: string;
92
+ notes?: string;
93
+ }
94
+ export interface CertificateIssueInput {
95
+ templateDocumentId?: string;
96
+ templateSlug?: string;
97
+ recipientFullName: string;
98
+ recipientChosenName?: string;
99
+ recipientEmail?: string;
100
+ recipientPhone?: string;
101
+ recipientNationality?: string;
102
+ nationalIdRaw?: string;
103
+ issuedAt?: string;
104
+ expiresAt?: string | null;
105
+ signatories?: CertificateSignatory[];
106
+ witnesses?: Array<{
107
+ fullName: string;
108
+ documentIdRaw?: string;
109
+ documentIdMasked?: string;
110
+ role?: string;
111
+ email?: string;
112
+ routingOrder?: number;
113
+ signedAt?: string;
114
+ }>;
115
+ customData?: Record<string, string>;
116
+ linkedBookingCode?: string;
117
+ notes?: string;
118
+ autoApprove?: boolean;
119
+ sendViaESign?: boolean;
120
+ locale?: string;
121
+ }
122
+ export interface CanonicalCertificatePayload {
123
+ version: "1.0";
124
+ serialNumber: string;
125
+ templateSlug: string;
126
+ organizationName: string;
127
+ recipientFullName: string;
128
+ recipientChosenName: string;
129
+ nationalIdHash: string;
130
+ issuedAt: string;
131
+ expiresAt: string;
132
+ signatories: Array<{
133
+ name: string;
134
+ title: string;
135
+ }>;
136
+ witnesses: Array<{
137
+ fullName: string;
138
+ role: string;
139
+ }>;
140
+ }
141
+ export interface CertificateVerificationResult {
142
+ valid: boolean;
143
+ cryptographicallyVerified: boolean;
144
+ status: CertificateStatus;
145
+ serialNumber: string;
146
+ templateSlug: string;
147
+ templateName: string;
148
+ organizationName: string;
149
+ recipientNameDisplay: string;
150
+ recipientChosenName?: string;
151
+ nationalIdMasked?: string;
152
+ nationalIdMatches?: boolean;
153
+ issuedAt: string;
154
+ expiresAt?: string | null;
155
+ revokedAt?: string | null;
156
+ revocationReason?: string | null;
157
+ secondaryDates?: Record<string, AlternateDateValue>;
158
+ signatories: CertificateSignatory[];
159
+ witnesses: Array<{
160
+ fullName: string;
161
+ role?: string;
162
+ }>;
163
+ canonicalPayloadHash: string;
164
+ cryptographicSignature: string;
165
+ publicKeyFingerprint: string;
166
+ publicKeyPem: string;
167
+ esignProvider?: ESignProviderType;
168
+ esignEnvelopeId?: string;
169
+ esignEnvelopeStatus?: ESignEnvelopeStatus;
170
+ esignCompletedAt?: string | null;
171
+ isUnmasked: boolean;
172
+ verifiedAt: string;
173
+ }
174
+ export interface CertificatesPluginSettings {
175
+ organizationName: string;
176
+ organizationSubheader: string;
177
+ verificationBaseUrl: string;
178
+ defaultTimezone: string;
179
+ defaultLocale: string;
180
+ maskPublicRecipientName: boolean;
181
+ allowPublicApplications: boolean;
182
+ publicKeyPem: string;
183
+ publicKeyFingerprint: string;
184
+ secondaryCalendars: CalendarSystemConfig[];
185
+ esign: DocuSignProviderConfig;
186
+ defaultTemplates?: Array<Omit<CertificateTemplate, "documentId">>;
187
+ }
188
+ export interface CertificateStats {
189
+ total: number;
190
+ issued: number;
191
+ pending_approval: number;
192
+ revoked: number;
193
+ expired: number;
194
+ }
package/package.json CHANGED
@@ -1,6 +1,115 @@
1
1
  {
2
2
  "name": "@vicacha-devs/strapi-plugin-certificates",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "1.1.0",
4
+ "description": "Generic Strapi v5 Official Certificates, Cryptographic Ed25519 Signing, Printable Credentials & QR Verification Plugin powered by @vicacha-devs/strapi-plugin-calendar",
5
+ "keywords": [
6
+ "calendar",
7
+ "certificates",
8
+ "credentials",
9
+ "digital-signature",
10
+ "ed25519",
11
+ "shahada",
12
+ "strapi",
13
+ "strapi-plugin",
14
+ "strapi-v5",
15
+ "verification"
16
+ ],
17
+ "homepage": "https://github.com/Vicacha-Devs/strapi-v5-extensions/tree/main/packages/strapi-plugin-certificates#readme",
18
+ "bugs": {
19
+ "url": "https://github.com/Vicacha-Devs/strapi-v5-extensions/issues"
20
+ },
21
+ "license": "MIT",
22
+ "author": "Vicacha Devs",
23
+ "repository": {
24
+ "type": "git",
25
+ "url": "git+https://github.com/Vicacha-Devs/strapi-v5-extensions.git",
26
+ "directory": "packages/strapi-plugin-certificates"
27
+ },
28
+ "files": [
29
+ "dist"
30
+ ],
31
+ "type": "module",
32
+ "exports": {
33
+ "./package.json": "./package.json",
34
+ "./strapi-admin": {
35
+ "types": "./dist/admin/src/index.d.ts",
36
+ "source": "./admin/src/index.ts",
37
+ "import": "./dist/admin/index.mjs",
38
+ "require": "./dist/admin/index.js",
39
+ "default": "./dist/admin/index.mjs"
40
+ },
41
+ "./strapi-server": {
42
+ "types": "./dist/server/src/index.d.ts",
43
+ "source": "./server/src/index.ts",
44
+ "import": "./dist/server/index.mjs",
45
+ "require": "./dist/server/index.js",
46
+ "default": "./dist/server/index.js"
47
+ },
48
+ "./shared": {
49
+ "types": "./dist/shared/index.d.ts",
50
+ "source": "./shared/index.ts",
51
+ "import": "./dist/shared/index.mjs",
52
+ "require": "./dist/shared/index.js",
53
+ "default": "./dist/shared/index.mjs"
54
+ }
55
+ },
56
+ "publishConfig": {
57
+ "access": "public",
58
+ "provenance": true
59
+ },
60
+ "dependencies": {
61
+ "@strapi/design-system": "2.2.0",
62
+ "@strapi/icons": "2.2.0",
63
+ "react-intl": "8.1.3",
64
+ "@vicacha-devs/strapi-plugin-calendar": "1.1.1"
65
+ },
66
+ "devDependencies": {
67
+ "@strapi/sdk-plugin": "6.1.1",
68
+ "@strapi/strapi": "5.39.0",
69
+ "@strapi/typescript-utils": "5.39.0",
70
+ "@types/node": "22.10.2",
71
+ "@types/react": "19.2.14",
72
+ "@types/react-dom": "19.2.3",
73
+ "react": "18.3.1",
74
+ "react-dom": "18.3.1",
75
+ "react-router-dom": "6.30.3",
76
+ "styled-components": "6.3.11",
77
+ "typescript": "5.9.3",
78
+ "vitest": "4.1.0",
79
+ "@vicacha-devs/eslint-config": "1.0.0",
80
+ "@vicacha-devs/plugin-shared": "1.0.0",
81
+ "@vicacha-devs/typescript-config": "1.0.0"
82
+ },
83
+ "peerDependencies": {
84
+ "@strapi/sdk-plugin": "^5.0.0 || ^6.0.0",
85
+ "@strapi/strapi": "^5.0.0",
86
+ "@vicacha-devs/strapi-plugin-calendar": "^1.1.1",
87
+ "react": "^18.0.0",
88
+ "react-dom": "^18.0.0",
89
+ "react-router-dom": "^6.0.0",
90
+ "styled-components": "^6.0.0"
91
+ },
92
+ "engines": {
93
+ "node": ">=20.16.0",
94
+ "pnpm": ">=10.0.0"
95
+ },
96
+ "strapi": {
97
+ "kind": "plugin",
98
+ "name": "certificates",
99
+ "displayName": "Certificates & Signing",
100
+ "description": "Generic Strapi v5 Official Certificates, Ed25519 Cryptographic Signing & Public Verification"
101
+ },
102
+ "scripts": {
103
+ "build": "strapi-plugin build && node ../../scripts/ensure-esm-dist.ts",
104
+ "clean": "rm -rf dist",
105
+ "test": "node --import ./tests/register-ts-resolver.ts --test tests/*.test.ts",
106
+ "test:ts": "npm run test:ts:front && npm run test:ts:back",
107
+ "test:ts:back": "tsc --noEmit -p server/tsconfig.json",
108
+ "test:ts:front": "tsc --noEmit -p admin/tsconfig.json",
109
+ "test:vitest": "vitest run",
110
+ "test:watch": "vitest",
111
+ "verify": "strapi-plugin verify",
112
+ "watch": "strapi-plugin watch",
113
+ "watch:link": "strapi-plugin watch:link"
114
+ }
6
115
  }