@grantex/sdk 0.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 (73) hide show
  1. package/dist/client.d.ts +33 -0
  2. package/dist/client.d.ts.map +1 -0
  3. package/dist/client.js +61 -0
  4. package/dist/client.js.map +1 -0
  5. package/dist/errors.d.ts +20 -0
  6. package/dist/errors.d.ts.map +1 -0
  7. package/dist/errors.js +45 -0
  8. package/dist/errors.js.map +1 -0
  9. package/dist/http.d.ts +15 -0
  10. package/dist/http.d.ts.map +1 -0
  11. package/dist/http.js +94 -0
  12. package/dist/http.js.map +1 -0
  13. package/dist/index.d.ts +6 -0
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +9 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/resources/agents.d.ts +12 -0
  18. package/dist/resources/agents.d.ts.map +1 -0
  19. package/dist/resources/agents.js +22 -0
  20. package/dist/resources/agents.js.map +1 -0
  21. package/dist/resources/anomalies.d.ts +15 -0
  22. package/dist/resources/anomalies.d.ts.map +1 -0
  23. package/dist/resources/anomalies.js +20 -0
  24. package/dist/resources/anomalies.js.map +1 -0
  25. package/dist/resources/audit.d.ts +10 -0
  26. package/dist/resources/audit.d.ts.map +1 -0
  27. package/dist/resources/audit.js +28 -0
  28. package/dist/resources/audit.js.map +1 -0
  29. package/dist/resources/billing.d.ts +13 -0
  30. package/dist/resources/billing.d.ts.map +1 -0
  31. package/dist/resources/billing.js +19 -0
  32. package/dist/resources/billing.js.map +1 -0
  33. package/dist/resources/compliance.d.ts +18 -0
  34. package/dist/resources/compliance.d.ts.map +1 -0
  35. package/dist/resources/compliance.js +47 -0
  36. package/dist/resources/compliance.js.map +1 -0
  37. package/dist/resources/grants.d.ts +25 -0
  38. package/dist/resources/grants.d.ts.map +1 -0
  39. package/dist/resources/grants.js +46 -0
  40. package/dist/resources/grants.js.map +1 -0
  41. package/dist/resources/policies.d.ts +17 -0
  42. package/dist/resources/policies.d.ts.map +1 -0
  43. package/dist/resources/policies.js +27 -0
  44. package/dist/resources/policies.js.map +1 -0
  45. package/dist/resources/scim.d.ts +33 -0
  46. package/dist/resources/scim.d.ts.map +1 -0
  47. package/dist/resources/scim.js +51 -0
  48. package/dist/resources/scim.js.map +1 -0
  49. package/dist/resources/sso.d.ts +23 -0
  50. package/dist/resources/sso.d.ts.map +1 -0
  51. package/dist/resources/sso.js +33 -0
  52. package/dist/resources/sso.js.map +1 -0
  53. package/dist/resources/tokens.d.ts +9 -0
  54. package/dist/resources/tokens.d.ts.map +1 -0
  55. package/dist/resources/tokens.js +15 -0
  56. package/dist/resources/tokens.js.map +1 -0
  57. package/dist/resources/webhooks.d.ts +10 -0
  58. package/dist/resources/webhooks.d.ts.map +1 -0
  59. package/dist/resources/webhooks.js +16 -0
  60. package/dist/resources/webhooks.js.map +1 -0
  61. package/dist/types.d.ts +440 -0
  62. package/dist/types.d.ts.map +1 -0
  63. package/dist/types.js +3 -0
  64. package/dist/types.js.map +1 -0
  65. package/dist/verify.d.ts +17 -0
  66. package/dist/verify.d.ts.map +1 -0
  67. package/dist/verify.js +80 -0
  68. package/dist/verify.js.map +1 -0
  69. package/dist/webhook.d.ts +10 -0
  70. package/dist/webhook.d.ts.map +1 -0
  71. package/dist/webhook.js +19 -0
  72. package/dist/webhook.js.map +1 -0
  73. package/package.json +42 -0
@@ -0,0 +1,440 @@
1
+ export interface GrantexClientOptions {
2
+ /** Grantex API key. Defaults to GRANTEX_API_KEY env variable. */
3
+ apiKey?: string;
4
+ /** Base URL for the Grantex API. Defaults to https://api.grantex.dev */
5
+ baseUrl?: string;
6
+ /** Request timeout in milliseconds. Defaults to 30000. */
7
+ timeout?: number;
8
+ }
9
+ export interface RegisterAgentParams {
10
+ name: string;
11
+ description: string;
12
+ scopes: string[];
13
+ }
14
+ export interface UpdateAgentParams {
15
+ name?: string;
16
+ description?: string;
17
+ scopes?: string[];
18
+ }
19
+ export interface Agent {
20
+ id: string;
21
+ did: string;
22
+ name: string;
23
+ description: string;
24
+ scopes: string[];
25
+ status: 'active' | 'suspended' | 'revoked';
26
+ developerId: string;
27
+ createdAt: string;
28
+ updatedAt: string;
29
+ }
30
+ export interface ListAgentsResponse {
31
+ agents: Agent[];
32
+ total: number;
33
+ page: number;
34
+ pageSize: number;
35
+ }
36
+ export interface AuthorizeParams {
37
+ agentId: string;
38
+ /** Your app's user identifier — mapped to principalId in the request body. */
39
+ userId: string;
40
+ scopes: string[];
41
+ expiresIn?: string;
42
+ redirectUri?: string;
43
+ }
44
+ export interface AuthorizationRequest {
45
+ authRequestId: string;
46
+ consentUrl: string;
47
+ agentId: string;
48
+ principalId: string;
49
+ scopes: string[];
50
+ expiresIn: string;
51
+ expiresAt: string;
52
+ status: 'pending' | 'approved' | 'denied' | 'expired';
53
+ createdAt: string;
54
+ }
55
+ export interface Grant {
56
+ id: string;
57
+ agentId: string;
58
+ agentDid: string;
59
+ principalId: string;
60
+ developerId: string;
61
+ scopes: string[];
62
+ status: 'active' | 'revoked' | 'expired';
63
+ issuedAt: string;
64
+ expiresAt: string;
65
+ revokedAt?: string;
66
+ }
67
+ export interface ListGrantsParams {
68
+ agentId?: string;
69
+ principalId?: string;
70
+ status?: 'active' | 'revoked' | 'expired';
71
+ page?: number;
72
+ pageSize?: number;
73
+ }
74
+ export interface ListGrantsResponse {
75
+ grants: Grant[];
76
+ total: number;
77
+ page: number;
78
+ pageSize: number;
79
+ }
80
+ export interface VerifiedGrant {
81
+ /** Grant/token unique ID (jti claim) */
82
+ tokenId: string;
83
+ /** Grant record ID */
84
+ grantId: string;
85
+ /** The end-user who authorized this agent (sub claim) */
86
+ principalId: string;
87
+ /** The agent's DID (agt claim) */
88
+ agentDid: string;
89
+ /** Developer org (dev claim) */
90
+ developerId: string;
91
+ /** Granted scopes (scp claim) */
92
+ scopes: string[];
93
+ /** Token issued-at timestamp (seconds since epoch) */
94
+ issuedAt: number;
95
+ /** Token expiry timestamp (seconds since epoch) */
96
+ expiresAt: number;
97
+ /** Parent agent DID (delegated grants only) */
98
+ parentAgentDid?: string;
99
+ /** Parent grant ID (delegated grants only) */
100
+ parentGrantId?: string;
101
+ /** Delegation depth (0 = root, n = nth-level delegation) */
102
+ delegationDepth?: number;
103
+ }
104
+ export interface DelegateParams {
105
+ parentGrantToken: string;
106
+ subAgentId: string;
107
+ scopes: string[];
108
+ expiresIn?: string;
109
+ }
110
+ export interface VerifyTokenResponse {
111
+ valid: boolean;
112
+ grantId?: string;
113
+ scopes?: string[];
114
+ principal?: string;
115
+ agent?: string;
116
+ expiresAt?: string;
117
+ }
118
+ export interface LogAuditParams {
119
+ agentId: string;
120
+ grantId: string;
121
+ action: string;
122
+ metadata?: Record<string, unknown>;
123
+ status?: 'success' | 'failure' | 'blocked';
124
+ }
125
+ export interface AuditEntry {
126
+ entryId: string;
127
+ agentId: string;
128
+ agentDid: string;
129
+ grantId: string;
130
+ principalId: string;
131
+ action: string;
132
+ metadata: Record<string, unknown>;
133
+ hash: string;
134
+ prevHash: string | null;
135
+ timestamp: string;
136
+ status: 'success' | 'failure' | 'blocked';
137
+ }
138
+ export interface ListAuditParams {
139
+ agentId?: string;
140
+ grantId?: string;
141
+ principalId?: string;
142
+ action?: string;
143
+ since?: string;
144
+ until?: string;
145
+ page?: number;
146
+ pageSize?: number;
147
+ }
148
+ export interface ListAuditResponse {
149
+ entries: AuditEntry[];
150
+ total: number;
151
+ page: number;
152
+ pageSize: number;
153
+ }
154
+ export type WebhookEventType = 'grant.created' | 'grant.revoked' | 'token.issued';
155
+ export interface CreateWebhookParams {
156
+ url: string;
157
+ events: WebhookEventType[];
158
+ }
159
+ export interface WebhookEndpoint {
160
+ id: string;
161
+ url: string;
162
+ events: WebhookEventType[];
163
+ createdAt: string;
164
+ }
165
+ export interface WebhookEndpointWithSecret extends WebhookEndpoint {
166
+ secret: string;
167
+ }
168
+ export interface ListWebhooksResponse {
169
+ webhooks: WebhookEndpoint[];
170
+ }
171
+ export interface VerifyGrantTokenOptions {
172
+ jwksUri: string;
173
+ requiredScopes?: string[];
174
+ audience?: string;
175
+ /** @internal override clock for testing */
176
+ clockTolerance?: number;
177
+ }
178
+ export interface GrantTokenPayload {
179
+ iss: string;
180
+ sub: string;
181
+ agt: string;
182
+ dev: string;
183
+ scp: string[];
184
+ iat: number;
185
+ exp: number;
186
+ jti: string;
187
+ /** Grant record ID embedded as a custom claim */
188
+ grnt?: string;
189
+ parentAgt?: string;
190
+ parentGrnt?: string;
191
+ delegationDepth?: number;
192
+ }
193
+ export interface SubscriptionStatus {
194
+ plan: 'free' | 'pro' | 'enterprise';
195
+ status: 'active' | 'past_due' | 'canceled';
196
+ currentPeriodEnd: string | null;
197
+ }
198
+ export interface CreateCheckoutParams {
199
+ plan: 'pro' | 'enterprise';
200
+ successUrl: string;
201
+ cancelUrl: string;
202
+ }
203
+ export interface CheckoutResponse {
204
+ checkoutUrl: string;
205
+ }
206
+ export interface CreatePortalParams {
207
+ returnUrl: string;
208
+ }
209
+ export interface PortalResponse {
210
+ portalUrl: string;
211
+ }
212
+ export interface Policy {
213
+ id: string;
214
+ name: string;
215
+ effect: 'allow' | 'deny';
216
+ priority: number;
217
+ agentId: string | null;
218
+ principalId: string | null;
219
+ scopes: string[] | null;
220
+ timeOfDayStart: string | null;
221
+ timeOfDayEnd: string | null;
222
+ createdAt: string;
223
+ updatedAt: string;
224
+ }
225
+ export interface CreatePolicyParams {
226
+ name: string;
227
+ effect: 'allow' | 'deny';
228
+ priority?: number;
229
+ agentId?: string;
230
+ principalId?: string;
231
+ scopes?: string[];
232
+ timeOfDayStart?: string;
233
+ timeOfDayEnd?: string;
234
+ }
235
+ export interface UpdatePolicyParams {
236
+ name?: string;
237
+ effect?: 'allow' | 'deny';
238
+ priority?: number;
239
+ agentId?: string | null;
240
+ principalId?: string | null;
241
+ scopes?: string[] | null;
242
+ timeOfDayStart?: string | null;
243
+ timeOfDayEnd?: string | null;
244
+ }
245
+ export interface ListPoliciesResponse {
246
+ policies: Policy[];
247
+ total: number;
248
+ }
249
+ export interface ComplianceSummary {
250
+ generatedAt: string;
251
+ since?: string;
252
+ until?: string;
253
+ agents: {
254
+ total: number;
255
+ active: number;
256
+ suspended: number;
257
+ revoked: number;
258
+ };
259
+ grants: {
260
+ total: number;
261
+ active: number;
262
+ revoked: number;
263
+ expired: number;
264
+ };
265
+ auditEntries: {
266
+ total: number;
267
+ success: number;
268
+ failure: number;
269
+ blocked: number;
270
+ };
271
+ policies: {
272
+ total: number;
273
+ };
274
+ plan: string;
275
+ }
276
+ export interface ComplianceExportGrantsParams {
277
+ since?: string;
278
+ until?: string;
279
+ status?: 'active' | 'revoked' | 'expired';
280
+ }
281
+ export interface ComplianceExportAuditParams {
282
+ since?: string;
283
+ until?: string;
284
+ agentId?: string;
285
+ status?: 'success' | 'failure' | 'blocked';
286
+ }
287
+ export interface ComplianceGrantsExport {
288
+ generatedAt: string;
289
+ total: number;
290
+ grants: Grant[];
291
+ }
292
+ export interface ComplianceAuditExport {
293
+ generatedAt: string;
294
+ total: number;
295
+ entries: AuditEntry[];
296
+ }
297
+ export interface EvidencePackParams {
298
+ since?: string;
299
+ until?: string;
300
+ framework?: 'soc2' | 'gdpr' | 'all';
301
+ }
302
+ export interface ChainIntegrity {
303
+ valid: boolean;
304
+ checkedEntries: number;
305
+ firstBrokenAt: string | null;
306
+ }
307
+ export interface EvidencePack {
308
+ meta: {
309
+ schemaVersion: '1.0';
310
+ generatedAt: string;
311
+ since?: string;
312
+ until?: string;
313
+ framework: 'soc2' | 'gdpr' | 'all';
314
+ };
315
+ summary: {
316
+ agents: {
317
+ total: number;
318
+ active: number;
319
+ suspended: number;
320
+ revoked: number;
321
+ };
322
+ grants: {
323
+ total: number;
324
+ active: number;
325
+ revoked: number;
326
+ expired: number;
327
+ };
328
+ auditEntries: {
329
+ total: number;
330
+ success: number;
331
+ failure: number;
332
+ blocked: number;
333
+ };
334
+ policies: {
335
+ total: number;
336
+ };
337
+ plan: string;
338
+ };
339
+ grants: Grant[];
340
+ auditEntries: AuditEntry[];
341
+ policies: Policy[];
342
+ chainIntegrity: ChainIntegrity;
343
+ }
344
+ export type AnomalyType = 'rate_spike' | 'high_failure_rate' | 'new_principal' | 'off_hours_activity';
345
+ export type AnomalySeverity = 'low' | 'medium' | 'high';
346
+ export interface Anomaly {
347
+ id: string;
348
+ type: AnomalyType;
349
+ severity: AnomalySeverity;
350
+ agentId: string | null;
351
+ principalId: string | null;
352
+ description: string;
353
+ metadata: Record<string, unknown>;
354
+ detectedAt: string;
355
+ acknowledgedAt: string | null;
356
+ }
357
+ export interface DetectAnomaliesResponse {
358
+ detectedAt: string;
359
+ total: number;
360
+ anomalies: Anomaly[];
361
+ }
362
+ export interface ListAnomaliesResponse {
363
+ anomalies: Anomaly[];
364
+ total: number;
365
+ }
366
+ export interface ScimEmail {
367
+ value: string;
368
+ primary?: boolean;
369
+ }
370
+ export interface ScimUserMeta {
371
+ resourceType: string;
372
+ created: string;
373
+ lastModified: string;
374
+ }
375
+ export interface ScimUser {
376
+ id: string;
377
+ externalId?: string;
378
+ userName: string;
379
+ displayName?: string;
380
+ active: boolean;
381
+ emails: ScimEmail[];
382
+ meta: ScimUserMeta;
383
+ }
384
+ export interface ScimListResponse {
385
+ totalResults: number;
386
+ startIndex: number;
387
+ itemsPerPage: number;
388
+ Resources: ScimUser[];
389
+ }
390
+ export interface CreateScimUserParams {
391
+ userName: string;
392
+ displayName?: string;
393
+ externalId?: string;
394
+ emails?: ScimEmail[];
395
+ active?: boolean;
396
+ }
397
+ export interface UpdateScimUserParams {
398
+ userName?: string;
399
+ displayName?: string;
400
+ active?: boolean;
401
+ emails?: ScimEmail[];
402
+ }
403
+ export interface ScimToken {
404
+ id: string;
405
+ label: string;
406
+ createdAt: string;
407
+ lastUsedAt: string | null;
408
+ }
409
+ export interface ScimTokenWithSecret extends ScimToken {
410
+ token: string;
411
+ }
412
+ export interface CreateScimTokenParams {
413
+ label: string;
414
+ }
415
+ export interface ListScimTokensResponse {
416
+ tokens: ScimToken[];
417
+ }
418
+ export interface SsoConfig {
419
+ issuerUrl: string;
420
+ clientId: string;
421
+ redirectUri: string;
422
+ createdAt: string;
423
+ updatedAt: string;
424
+ }
425
+ export interface CreateSsoConfigParams {
426
+ issuerUrl: string;
427
+ clientId: string;
428
+ clientSecret: string;
429
+ redirectUri: string;
430
+ }
431
+ export interface SsoLoginResponse {
432
+ authorizeUrl: string;
433
+ }
434
+ export interface SsoCallbackResponse {
435
+ email: string | null;
436
+ name: string | null;
437
+ sub: string | null;
438
+ developerId: string;
439
+ }
440
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,3 @@
1
+ // ─── Client configuration ────────────────────────────────────────────────────
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,gFAAgF"}
@@ -0,0 +1,17 @@
1
+ import type { VerifiedGrant, VerifyGrantTokenOptions } from './types.js';
2
+ /**
3
+ * Verify a Grantex grant token offline using the published JWKS.
4
+ * Algorithm is fixed to RS256 per SPEC §11 and cannot be overridden.
5
+ *
6
+ * @throws {GrantexTokenError} if the token is invalid, expired, or missing required scopes.
7
+ */
8
+ export declare function verifyGrantToken(token: string, options: VerifyGrantTokenOptions): Promise<VerifiedGrant>;
9
+ /**
10
+ * Decode a grant token (without re-verifying the signature) and map it to
11
+ * a VerifiedGrant shape. Used by GrantsClient.verify() to fill fields the
12
+ * API summary response may omit.
13
+ *
14
+ * @internal
15
+ */
16
+ export declare function mapOnlineVerifyToVerifiedGrant(token: string): VerifiedGrant;
17
+ //# sourceMappingURL=verify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../src/verify.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,uBAAuB,EAAqB,MAAM,YAAY,CAAC;AAE5F;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,aAAa,CAAC,CAiCxB;AAED;;;;;;GAMG;AACH,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAS3E"}
package/dist/verify.js ADDED
@@ -0,0 +1,80 @@
1
+ import { createRemoteJWKSet, jwtVerify, decodeJwt } from 'jose';
2
+ import { GrantexTokenError } from './errors.js';
3
+ /**
4
+ * Verify a Grantex grant token offline using the published JWKS.
5
+ * Algorithm is fixed to RS256 per SPEC §11 and cannot be overridden.
6
+ *
7
+ * @throws {GrantexTokenError} if the token is invalid, expired, or missing required scopes.
8
+ */
9
+ export async function verifyGrantToken(token, options) {
10
+ const jwks = createRemoteJWKSet(new URL(options.jwksUri));
11
+ let payload;
12
+ try {
13
+ const jwtOptions = {
14
+ algorithms: ['RS256'],
15
+ ...(options.clockTolerance !== undefined
16
+ ? { clockTolerance: options.clockTolerance }
17
+ : {}),
18
+ ...(options.audience !== undefined
19
+ ? { audience: options.audience }
20
+ : {}),
21
+ };
22
+ const result = await jwtVerify(token, jwks, jwtOptions);
23
+ payload = result.payload;
24
+ }
25
+ catch (err) {
26
+ const message = err instanceof Error ? err.message : String(err);
27
+ throw new GrantexTokenError(`Grant token verification failed: ${message}`);
28
+ }
29
+ const requiredScopes = options.requiredScopes ?? [];
30
+ if (requiredScopes.length > 0) {
31
+ const missing = requiredScopes.filter((s) => !payload.scp.includes(s));
32
+ if (missing.length > 0) {
33
+ throw new GrantexTokenError(`Grant token is missing required scopes: ${missing.join(', ')}`);
34
+ }
35
+ }
36
+ return payloadToVerifiedGrant(payload);
37
+ }
38
+ /**
39
+ * Decode a grant token (without re-verifying the signature) and map it to
40
+ * a VerifiedGrant shape. Used by GrantsClient.verify() to fill fields the
41
+ * API summary response may omit.
42
+ *
43
+ * @internal
44
+ */
45
+ export function mapOnlineVerifyToVerifiedGrant(token) {
46
+ let payload;
47
+ try {
48
+ payload = decodeJwt(token);
49
+ }
50
+ catch (err) {
51
+ const message = err instanceof Error ? err.message : String(err);
52
+ throw new GrantexTokenError(`Failed to decode grant token: ${message}`);
53
+ }
54
+ return payloadToVerifiedGrant(payload);
55
+ }
56
+ function payloadToVerifiedGrant(payload) {
57
+ if (typeof payload.jti !== 'string' ||
58
+ typeof payload.sub !== 'string' ||
59
+ typeof payload.agt !== 'string' ||
60
+ typeof payload.dev !== 'string' ||
61
+ !Array.isArray(payload.scp) ||
62
+ typeof payload.iat !== 'number' ||
63
+ typeof payload.exp !== 'number') {
64
+ throw new GrantexTokenError('Grant token is missing required claims (jti, sub, agt, dev, scp, iat, exp)');
65
+ }
66
+ return {
67
+ tokenId: payload.jti,
68
+ grantId: payload.grnt ?? payload.jti,
69
+ principalId: payload.sub,
70
+ agentDid: payload.agt,
71
+ developerId: payload.dev,
72
+ scopes: payload.scp,
73
+ issuedAt: payload.iat,
74
+ expiresAt: payload.exp,
75
+ ...(payload.parentAgt !== undefined ? { parentAgentDid: payload.parentAgt } : {}),
76
+ ...(payload.parentGrnt !== undefined ? { parentGrantId: payload.parentGrnt } : {}),
77
+ ...(payload.delegationDepth !== undefined ? { delegationDepth: payload.delegationDepth } : {}),
78
+ };
79
+ }
80
+ //# sourceMappingURL=verify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify.js","sourceRoot":"","sources":["../src/verify.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Verify that a webhook payload was sent by Grantex.
3
+ *
4
+ * @param payload - The raw request body string (or Buffer) received from Grantex.
5
+ * @param signature - The value of the `X-Grantex-Signature` header.
6
+ * @param secret - The webhook secret returned when the endpoint was created.
7
+ * @returns `true` if the signature is valid, `false` otherwise.
8
+ */
9
+ export declare function verifyWebhookSignature(payload: string | Buffer, signature: string, secret: string): boolean;
10
+ //# sourceMappingURL=webhook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../src/webhook.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,OAAO,CAQT"}
@@ -0,0 +1,19 @@
1
+ import { createHmac, timingSafeEqual } from 'node:crypto';
2
+ /**
3
+ * Verify that a webhook payload was sent by Grantex.
4
+ *
5
+ * @param payload - The raw request body string (or Buffer) received from Grantex.
6
+ * @param signature - The value of the `X-Grantex-Signature` header.
7
+ * @param secret - The webhook secret returned when the endpoint was created.
8
+ * @returns `true` if the signature is valid, `false` otherwise.
9
+ */
10
+ export function verifyWebhookSignature(payload, signature, secret) {
11
+ const expected = 'sha256=' + createHmac('sha256', secret).update(payload).digest('hex');
12
+ try {
13
+ return timingSafeEqual(Buffer.from(signature), Buffer.from(expected));
14
+ }
15
+ catch {
16
+ return false;
17
+ }
18
+ }
19
+ //# sourceMappingURL=webhook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook.js","sourceRoot":"","sources":["../src/webhook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE1D;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB,CACpC,OAAwB,EACxB,SAAiB,EACjB,MAAc;IAEd,MAAM,QAAQ,GACZ,SAAS,GAAG,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACzE,IAAI,CAAC;QACH,OAAO,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
package/package.json ADDED
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "@grantex/sdk",
3
+ "version": "0.1.0",
4
+ "description": "TypeScript SDK for the Grantex delegated authorization protocol",
5
+ "type": "module",
6
+ "exports": {
7
+ ".": {
8
+ "import": "./dist/index.js",
9
+ "types": "./dist/index.d.ts"
10
+ }
11
+ },
12
+ "main": "./dist/index.js",
13
+ "types": "./dist/index.d.ts",
14
+ "files": [
15
+ "dist"
16
+ ],
17
+ "scripts": {
18
+ "build": "tsc -p tsconfig.build.json",
19
+ "typecheck": "tsc --noEmit",
20
+ "test": "vitest run",
21
+ "test:watch": "vitest"
22
+ },
23
+ "dependencies": {
24
+ "jose": "^5.2.4"
25
+ },
26
+ "overrides": {
27
+ "esbuild": ">=0.25.0"
28
+ },
29
+ "devDependencies": {
30
+ "@types/node": "^20.11.0",
31
+ "typescript": "^5.3.3",
32
+ "vitest": "^1.3.1"
33
+ },
34
+ "engines": {
35
+ "node": ">=18.0.0"
36
+ },
37
+ "license": "Apache-2.0",
38
+ "repository": {
39
+ "type": "git",
40
+ "url": "https://github.com/mishrasanjeev/grantex"
41
+ }
42
+ }