@numerum-tech/yeriasdk 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/README.md +864 -0
  2. package/dist/core/action-grid-view.d.ts +57 -0
  3. package/dist/core/action-grid-view.d.ts.map +1 -0
  4. package/dist/core/action-grid-view.js +112 -0
  5. package/dist/core/action-grid-view.js.map +1 -0
  6. package/dist/core/action-list-view.d.ts +39 -0
  7. package/dist/core/action-list-view.d.ts.map +1 -0
  8. package/dist/core/action-list-view.js +77 -0
  9. package/dist/core/action-list-view.js.map +1 -0
  10. package/dist/core/base/base-action-view.d.ts +82 -0
  11. package/dist/core/base/base-action-view.d.ts.map +1 -0
  12. package/dist/core/base/base-action-view.js +143 -0
  13. package/dist/core/base/base-action-view.js.map +1 -0
  14. package/dist/core/base-view.d.ts +105 -0
  15. package/dist/core/base-view.d.ts.map +1 -0
  16. package/dist/core/base-view.js +426 -0
  17. package/dist/core/base-view.js.map +1 -0
  18. package/dist/core/card-view.d.ts +24 -0
  19. package/dist/core/card-view.d.ts.map +1 -0
  20. package/dist/core/card-view.js +127 -0
  21. package/dist/core/card-view.js.map +1 -0
  22. package/dist/core/carousel-view.d.ts +22 -0
  23. package/dist/core/carousel-view.d.ts.map +1 -0
  24. package/dist/core/carousel-view.js +99 -0
  25. package/dist/core/carousel-view.js.map +1 -0
  26. package/dist/core/form-view.d.ts +165 -0
  27. package/dist/core/form-view.d.ts.map +1 -0
  28. package/dist/core/form-view.js +365 -0
  29. package/dist/core/form-view.js.map +1 -0
  30. package/dist/core/jsonapp.d.ts +263 -0
  31. package/dist/core/jsonapp.d.ts.map +1 -0
  32. package/dist/core/jsonapp.js +528 -0
  33. package/dist/core/jsonapp.js.map +1 -0
  34. package/dist/core/key-store.d.ts +51 -0
  35. package/dist/core/key-store.d.ts.map +1 -0
  36. package/dist/core/key-store.js +138 -0
  37. package/dist/core/key-store.js.map +1 -0
  38. package/dist/core/map-view.d.ts +45 -0
  39. package/dist/core/map-view.d.ts.map +1 -0
  40. package/dist/core/map-view.js +318 -0
  41. package/dist/core/map-view.js.map +1 -0
  42. package/dist/core/media-view.d.ts +20 -0
  43. package/dist/core/media-view.d.ts.map +1 -0
  44. package/dist/core/media-view.js +75 -0
  45. package/dist/core/media-view.js.map +1 -0
  46. package/dist/core/message-view.d.ts +53 -0
  47. package/dist/core/message-view.d.ts.map +1 -0
  48. package/dist/core/message-view.js +109 -0
  49. package/dist/core/message-view.js.map +1 -0
  50. package/dist/core/notification.d.ts +17 -0
  51. package/dist/core/notification.d.ts.map +1 -0
  52. package/dist/core/notification.js +33 -0
  53. package/dist/core/notification.js.map +1 -0
  54. package/dist/core/qr-display-view.d.ts +32 -0
  55. package/dist/core/qr-display-view.d.ts.map +1 -0
  56. package/dist/core/qr-display-view.js +66 -0
  57. package/dist/core/qr-display-view.js.map +1 -0
  58. package/dist/core/qr-scan-view.d.ts +148 -0
  59. package/dist/core/qr-scan-view.d.ts.map +1 -0
  60. package/dist/core/qr-scan-view.js +259 -0
  61. package/dist/core/qr-scan-view.js.map +1 -0
  62. package/dist/core/reader-view.d.ts +73 -0
  63. package/dist/core/reader-view.d.ts.map +1 -0
  64. package/dist/core/reader-view.js +285 -0
  65. package/dist/core/reader-view.js.map +1 -0
  66. package/dist/core/timeline-view.d.ts +16 -0
  67. package/dist/core/timeline-view.d.ts.map +1 -0
  68. package/dist/core/timeline-view.js +68 -0
  69. package/dist/core/timeline-view.js.map +1 -0
  70. package/dist/errors/index.d.ts +276 -0
  71. package/dist/errors/index.d.ts.map +1 -0
  72. package/dist/errors/index.js +431 -0
  73. package/dist/errors/index.js.map +1 -0
  74. package/dist/index.d.ts +26 -0
  75. package/dist/index.d.ts.map +1 -0
  76. package/dist/index.js +103 -0
  77. package/dist/index.js.map +1 -0
  78. package/dist/types/index.d.ts +576 -0
  79. package/dist/types/index.d.ts.map +1 -0
  80. package/dist/types/index.js +48 -0
  81. package/dist/types/index.js.map +1 -0
  82. package/dist/utils/fileFormats.d.ts +52 -0
  83. package/dist/utils/fileFormats.d.ts.map +1 -0
  84. package/dist/utils/fileFormats.js +198 -0
  85. package/dist/utils/fileFormats.js.map +1 -0
  86. package/dist/utils/logger.d.ts +38 -0
  87. package/dist/utils/logger.d.ts.map +1 -0
  88. package/dist/utils/logger.js +109 -0
  89. package/dist/utils/logger.js.map +1 -0
  90. package/dist/utils/validators.d.ts +48 -0
  91. package/dist/utils/validators.d.ts.map +1 -0
  92. package/dist/utils/validators.js +445 -0
  93. package/dist/utils/validators.js.map +1 -0
  94. package/package.json +65 -0
@@ -0,0 +1,263 @@
1
+ import { BaseView } from './base-view';
2
+ import { FormView } from './form-view';
3
+ import { ReaderView } from './reader-view';
4
+ import { ActionListView } from './action-list-view';
5
+ import { ActionGridView } from './action-grid-view';
6
+ import { QRScanView } from './qr-scan-view';
7
+ import { QRDisplayView } from './qr-display-view';
8
+ import { MessageView } from './message-view';
9
+ import { CardView } from './card-view';
10
+ import { CarouselView } from './carousel-view';
11
+ import { TimelineView } from './timeline-view';
12
+ import { MediaView } from './media-view';
13
+ import { MapView } from './map-view';
14
+ import { Notification } from './notification';
15
+ import { SecureNotificationResponse } from '../types';
16
+ export interface JsonAppConfig {
17
+ appId: string;
18
+ privateKey?: string;
19
+ publicKey?: string;
20
+ allowedDomains?: string[];
21
+ viewExpirationMinutes?: number;
22
+ platformUrl?: string;
23
+ notificationTimeout?: number;
24
+ }
25
+ /**
26
+ * What `serve()` returns. The whole object goes on the wire as a JSON
27
+ * envelope — `res.json(jsonApp.serve(view))`. The signature CANNOT be
28
+ * forgotten because it lives in the structure itself, not in a header.
29
+ *
30
+ * `payload` is a JSON string (already serialised) — it's the bytes that
31
+ * were signed. The renderer verifies the signature on those exact bytes,
32
+ * then JSON.parses `payload` to get the decoded view envelope. No
33
+ * re-stringification happens on either side, so JS and Dart can't drift
34
+ * on JSON encoding.
35
+ */
36
+ export interface SignedEnvelope {
37
+ /** JSON string of `{appId, timestamp, view}` — the bytes that were signed. */
38
+ payload: string;
39
+ /** Ed25519 signature over `payload` (base64). */
40
+ signature: string;
41
+ }
42
+ /** Decoded inner payload — the parsed shape of `payload`. */
43
+ export interface DecodedPayload {
44
+ appId: string;
45
+ timestamp: number;
46
+ view: Record<string, unknown>;
47
+ }
48
+ /**
49
+ * Claims surfaced by `verifyUserToken` after a successful RS256 check.
50
+ * Mirrors the fields Yeria puts in a per-service JWT.
51
+ */
52
+ export interface UserTokenClaims {
53
+ /** Yeria user id. */
54
+ sub: string;
55
+ /** Either `'yeria-admin'` for the platform token, or the service id (as string) for a service-scoped token. */
56
+ aud: string;
57
+ /** Issuer — always `'yeria'`. */
58
+ iss: string;
59
+ /** Expiration time (unix seconds). */
60
+ exp: number;
61
+ /** Issued-at time (unix seconds). */
62
+ iat?: number;
63
+ /** Key id from the JWT header (`kid`). Useful for key-rollover scenarios. */
64
+ kid?: string;
65
+ }
66
+ /**
67
+ * Resolver passed to `verifyUserTokenWithResolver`. Given the `kid` from
68
+ * the JWT header, returns the PEM the SDK should verify against — or
69
+ * `null` when the key is expired / unknown / not yet propagated. Wraps
70
+ * whatever lookup strategy the caller wants (typically `YeriaKeyStore`).
71
+ */
72
+ export type YeriaPublicKeyResolver = (kid: string) => Promise<string | null>;
73
+ /**
74
+ * Projection returned by `JsonApp.fetchUserProfile`. The current Yeria
75
+ * scope is intentionally minimal; the per-service `service_access.profile_scopes`
76
+ * work will widen this set without changing the field names.
77
+ */
78
+ export interface UserProfile {
79
+ user_id: number;
80
+ first_name: string | null;
81
+ last_name: string | null;
82
+ country_code: string | null;
83
+ }
84
+ export declare class JsonApp {
85
+ private config;
86
+ private privateKey;
87
+ private publicKey;
88
+ constructor(config: JsonAppConfig);
89
+ /**
90
+ * Crée une vue de formulaire sécurisée
91
+ */
92
+ createFormView(formId: string, title: string, processId?: string): FormView;
93
+ /**
94
+ * Crée une vue de lecture sécurisée
95
+ */
96
+ createReaderView(viewId: string, title: string, processId?: string): ReaderView;
97
+ /**
98
+ * Crée une vue de liste d'actions sécurisée
99
+ */
100
+ createActionListView(viewId: string, title: string, processId?: string): ActionListView;
101
+ /**
102
+ * Crée une vue de grille d'actions sécurisée
103
+ */
104
+ createActionGridView(viewId: string, title: string, processId?: string): ActionGridView;
105
+ /**
106
+ * Crée une vue de scan QR sécurisée
107
+ */
108
+ createQRScanView(viewId: string, title: string, processId?: string): QRScanView;
109
+ /**
110
+ * Crée une vue d'affichage QR sécurisée
111
+ */
112
+ createQRDisplayView(viewId: string, title: string, processId?: string): QRDisplayView;
113
+ /**
114
+ * Crée une vue de message sécurisée
115
+ */
116
+ createMessageView(viewId: string, title: string, processId?: string): MessageView;
117
+ createCardView(viewId: string, title: string, processId?: string): CardView;
118
+ createCarouselView(viewId: string, title: string, processId?: string): CarouselView;
119
+ createTimelineView(viewId: string, title: string, processId?: string): TimelineView;
120
+ createMediaView(viewId: string, title: string, processId?: string): MediaView;
121
+ createMapView(viewId: string, title: string, processId?: string): MapView;
122
+ /**
123
+ * Crée une notification pour un utilisateur spécifique
124
+ */
125
+ createNotification(userId: string, title: string, body: string, link?: string): Notification;
126
+ /**
127
+ * Signe une notification avec Ed25519
128
+ */
129
+ signNotification(notification: Notification): SecureNotificationResponse;
130
+ /**
131
+ * Envoie une notification signée à la plateforme City-Mate
132
+ * @param notification - Notification à envoyer
133
+ * @param platformUrl - URL de la plateforme (optionnel, utilise config.platformUrl si non fourni)
134
+ * @throws {ConfigurationError} Si aucune URL de plateforme n'est configurée
135
+ * @throws {ExternalError} Si l'envoi échoue
136
+ */
137
+ sendNotification(notification: Notification, platformUrl?: string): Promise<void>;
138
+ /**
139
+ * Rotate the service's signing key on the Yeria registry. The rotation
140
+ * envelope is signed with the *current* private key — the caller proves
141
+ * they own the still-valid keypair before the new one is accepted.
142
+ *
143
+ * After this call succeeds:
144
+ * - The new public key becomes Active on Yeria.
145
+ * - The old key keeps validating signatures for ~5 minutes (grace
146
+ * window so in-flight signed responses still verify).
147
+ * - This JsonApp instance is mutated to use the new keypair locally.
148
+ *
149
+ * @param yeriaApiBaseUrl - Yeria registry root, e.g. `https://yeria.app`
150
+ * @param serviceId - The service id assigned by Yeria
151
+ * @param newKeys - The freshly-generated keypair to switch to
152
+ */
153
+ rotateKey(yeriaApiBaseUrl: string, serviceId: string | number, newKeys: {
154
+ privateKey: string;
155
+ publicKey: string;
156
+ }): Promise<{
157
+ keyId: number;
158
+ expiresAt: string;
159
+ gracePeriodMinutes: number;
160
+ }>;
161
+ /**
162
+ * Sérialise une vue, signe les bytes sérialisés, et retourne une
163
+ * enveloppe `{payload, signature}` à envoyer telle quelle au client.
164
+ *
165
+ * Usage côté provider (Express) :
166
+ * res.json(jsonApp.serve(view));
167
+ * res.status(400).json(jsonApp.serve(errorMessage));
168
+ *
169
+ * La signature est dans la structure de retour — impossible de
170
+ * l'oublier en l'envoyant. Le client vérifie sur `payload` (string)
171
+ * sans re-stringification.
172
+ */
173
+ serve(view: BaseView): SignedEnvelope;
174
+ /**
175
+ * Obtient la clé publique pour la vérification côté frontend
176
+ */
177
+ getPublicKey(): string;
178
+ /**
179
+ * Vérifie l'intégrité d'une enveloppe signée reçue du wire.
180
+ *
181
+ * @throws {AppIdMismatchError} si appId ne matche pas this.config.appId
182
+ * @throws {ViewExpiredError} si timestamp > viewExpirationMinutes
183
+ * @throws {SignatureVerificationError} si signature invalide ou payload malformé
184
+ */
185
+ verifyIntegrity(envelope: SignedEnvelope): boolean;
186
+ /**
187
+ * Méthode statique pour vérifier une signature.
188
+ * @param publicKey - Clé publique Ed25519 (PEM format)
189
+ * @param payload - JSON string signée (extraite de l'enveloppe)
190
+ * @param signature - Signature base64
191
+ * @param onError - Optional error callback for logging
192
+ * @returns true si la signature est valide
193
+ */
194
+ static verifySignature(publicKey: string, payload: string, signature: string, onError?: (error: Error) => void): boolean;
195
+ /**
196
+ * Génère statiquement une enveloppe signée sans instance JsonApp.
197
+ */
198
+ static signView(view: Record<string, unknown>, appId: string, privateKey: string, timestamp?: number): SignedEnvelope;
199
+ /**
200
+ * Verify a Yeria-issued user token (RS256 JWT signed by Yeria's
201
+ * Registry RSA key). Used by providers to authenticate inbound
202
+ * requests carrying `Authorization: Bearer <serviceToken>`.
203
+ *
204
+ * @param jwtToken Compact JWT (header.payload.signature, base64url).
205
+ * @param yeriaPublicKey Yeria's Registry public key in PEM format.
206
+ * Fetch once at boot from
207
+ * `GET /api/v1/registry/public-key` and cache.
208
+ * @param expectedServiceId When supplied, asserts `aud === String(expectedServiceId)`.
209
+ * Pass the service id your backend is hosting; refuse
210
+ * tokens scoped to a different service.
211
+ * @returns The verified claims object.
212
+ * @throws SignatureVerificationError if signature invalid / token malformed / wrong issuer / wrong audience.
213
+ * @throws ViewExpiredError if the `exp` claim is in the past.
214
+ */
215
+ static verifyUserToken(jwtToken: string, yeriaPublicKey: string, expectedServiceId?: string | number): UserTokenClaims;
216
+ /**
217
+ * Same audience-scoped JWT verify as `verifyUserToken`, but the second
218
+ * argument is a kid resolver instead of a fixed PEM. The SDK pulls
219
+ * the `kid` from the JWT header, calls `resolver(kid)`, and verifies
220
+ * the signature against whatever PEM comes back.
221
+ *
222
+ * Pair with `YeriaKeyStore` so providers don't have to write key-
223
+ * fetching, caching or rotation-grace handling themselves.
224
+ *
225
+ * @throws SignatureVerificationError if the resolver returns null, the
226
+ * signature fails, the issuer / audience mismatches, or the
227
+ * JWT is malformed.
228
+ * @throws ViewExpiredError when `exp` is in the past.
229
+ */
230
+ static verifyUserTokenWithResolver(jwtToken: string, resolver: YeriaPublicKeyResolver, expectedServiceId?: string | number): Promise<UserTokenClaims>;
231
+ /**
232
+ * Provider-side helper: fetch a Yeria user's profile by `sub`.
233
+ *
234
+ * Builds an Ed25519-signed envelope and POSTs to
235
+ * `POST /api/v1/provider/services/{serviceId}/users/{userId}/profile`.
236
+ * Yeria already holds every Active public key for this service, so
237
+ * the envelope itself is the only credential — no user JWT is sent
238
+ * in the body and the PEM is never disclosed.
239
+ *
240
+ * Typical usage (provider middleware after `verifyUserTokenWithResolver`):
241
+ *
242
+ * let user = await db.users.findByYeriaSub(claims.sub);
243
+ * if (!user) {
244
+ * const profile = await JsonApp.fetchUserProfile({
245
+ * baseUrl: process.env.YERIA_BASE_URL,
246
+ * serviceId: MY_SERVICE_ID,
247
+ * userId: claims.sub,
248
+ * privateKey: SERVICE_ED25519_PRIVATE_KEY,
249
+ * });
250
+ * user = await db.users.insert({ yeria_sub: claims.sub, ...profile });
251
+ * }
252
+ *
253
+ * The hot path stays local-DB after the first miss.
254
+ */
255
+ static fetchUserProfile(opts: {
256
+ baseUrl: string;
257
+ serviceId: string | number;
258
+ userId: string | number;
259
+ privateKey: string;
260
+ fetch?: typeof fetch;
261
+ }): Promise<UserProfile>;
262
+ }
263
+ //# sourceMappingURL=jsonapp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsonapp.d.ts","sourceRoot":"","sources":["../../src/core/jsonapp.ts"],"names":[],"mappings":"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"}