@hawcx/oauth-client 0.2.0 → 5.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 (74) hide show
  1. package/README.md +587 -204
  2. package/dist/client-assertion.d.ts +45 -0
  3. package/dist/client-assertion.d.ts.map +1 -0
  4. package/dist/client-assertion.js +141 -0
  5. package/dist/client-assertion.js.map +1 -0
  6. package/dist/delegation/credentials.d.ts +92 -0
  7. package/dist/delegation/credentials.d.ts.map +1 -0
  8. package/dist/delegation/credentials.js +215 -0
  9. package/dist/delegation/credentials.js.map +1 -0
  10. package/dist/delegation/crypto.d.ts +2 -2
  11. package/dist/delegation/crypto.d.ts.map +1 -1
  12. package/dist/delegation/crypto.js +41 -32
  13. package/dist/delegation/crypto.js.map +1 -1
  14. package/dist/delegation/exceptions.d.ts +12 -5
  15. package/dist/delegation/exceptions.d.ts.map +1 -1
  16. package/dist/delegation/exceptions.js +12 -14
  17. package/dist/delegation/exceptions.js.map +1 -1
  18. package/dist/delegation/factory.d.ts +20 -0
  19. package/dist/delegation/factory.d.ts.map +1 -0
  20. package/dist/delegation/factory.js +49 -0
  21. package/dist/delegation/factory.js.map +1 -0
  22. package/dist/delegation/hawcx.d.ts +59 -224
  23. package/dist/delegation/hawcx.d.ts.map +1 -1
  24. package/dist/delegation/hawcx.js +99 -299
  25. package/dist/delegation/hawcx.js.map +1 -1
  26. package/dist/delegation/index.d.ts +4 -9
  27. package/dist/delegation/index.d.ts.map +1 -1
  28. package/dist/delegation/index.js +5 -17
  29. package/dist/delegation/index.js.map +1 -1
  30. package/dist/delegation/transport.d.ts +40 -0
  31. package/dist/delegation/transport.d.ts.map +1 -0
  32. package/dist/delegation/transport.js +120 -0
  33. package/dist/delegation/transport.js.map +1 -0
  34. package/dist/errors.d.ts +62 -0
  35. package/dist/errors.d.ts.map +1 -0
  36. package/dist/errors.js +73 -0
  37. package/dist/errors.js.map +1 -0
  38. package/dist/index.d.ts +12 -15
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +20 -27
  41. package/dist/index.js.map +1 -1
  42. package/dist/oauth.d.ts +265 -0
  43. package/dist/oauth.d.ts.map +1 -0
  44. package/dist/oauth.js +497 -0
  45. package/dist/oauth.js.map +1 -0
  46. package/dist/stepup/client.d.ts +26 -0
  47. package/dist/stepup/client.d.ts.map +1 -0
  48. package/dist/stepup/client.js +78 -0
  49. package/dist/stepup/client.js.map +1 -0
  50. package/dist/stepup/index.d.ts +3 -0
  51. package/dist/stepup/index.d.ts.map +1 -0
  52. package/dist/stepup/index.js +19 -0
  53. package/dist/stepup/index.js.map +1 -0
  54. package/dist/stepup/types.d.ts +35 -0
  55. package/dist/stepup/types.d.ts.map +1 -0
  56. package/dist/stepup/types.js +3 -0
  57. package/dist/stepup/types.js.map +1 -0
  58. package/package.json +13 -16
  59. package/dist/client.d.ts +0 -134
  60. package/dist/client.d.ts.map +0 -1
  61. package/dist/client.js +0 -300
  62. package/dist/client.js.map +0 -1
  63. package/dist/delegation/client.d.ts +0 -116
  64. package/dist/delegation/client.d.ts.map +0 -1
  65. package/dist/delegation/client.js +0 -227
  66. package/dist/delegation/client.js.map +0 -1
  67. package/dist/exceptions.d.ts +0 -52
  68. package/dist/exceptions.d.ts.map +0 -1
  69. package/dist/exceptions.js +0 -81
  70. package/dist/exceptions.js.map +0 -1
  71. package/dist/utils.d.ts +0 -61
  72. package/dist/utils.d.ts.map +0 -1
  73. package/dist/utils.js +0 -263
  74. package/dist/utils.js.map +0 -1
@@ -1,254 +1,89 @@
1
1
  /**
2
- * Hawcx-specific delegation client with high-level convenience methods.
3
- *
4
- * This module provides a streamlined API for common Hawcx operations like
5
- * MFA configuration, user management, and device operations. All cryptographic
6
- * operations (encryption, signing, verification) are handled automatically.
7
- */
8
- import { Signer } from './client';
9
- import { Verifier, EciesX25519Encryptor, EciesX25519Decryptor } from './crypto';
10
- /**
11
- * Supported MFA methods for Hawcx authentication.
12
- *
13
- * This enum ensures type safety and prevents typos when specifying MFA methods.
14
- *
15
- * @example
16
- * ```typescript
17
- * import { MfaMethod } from '@hawcx/oauth-client';
18
- *
19
- * // Use enum for type safety
20
- * await client.initiateMfaChange({
21
- * userid: "user@example.com",
22
- * mfaMethod: MfaMethod.SMS, // Type-safe!
23
- * phoneNumber: "+15551234567"
24
- * });
25
- *
26
- * // String values still work for backwards compatibility
27
- * await client.initiateMfaChange({
28
- * userid: "user@example.com",
29
- * mfaMethod: "sms", // Also works
30
- * phoneNumber: "+15551234567"
31
- * });
32
- * ```
2
+ * Hawcx delegation client with ergonomic, high-level operations.
33
3
  */
4
+ import { DelegationTransport } from './transport';
5
+ import { DelegationKeyMaterial } from './factory';
34
6
  export declare enum MfaMethod {
35
7
  EMAIL = "email",
36
8
  SMS = "sms",
37
9
  TOTP = "totp"
38
10
  }
39
- /**
40
- * Options for initializing Hawcx delegation client from keys
41
- */
42
- export interface HawcxClientFromKeysOptions {
43
- /** Service Provider's Ed25519 private key (PEM format) */
44
- spSigningKey: string;
45
- /** Service Provider's X25519 private key (PEM format) */
46
- spEncryptionKey: string;
47
- /** IDP's Ed25519 public key (PEM format) */
48
- idpVerifyKey: string;
49
- /** IDP's X25519 public key (PEM format) */
50
- idpEncryptionKey: string;
51
- /** Hawcx API base URL (e.g., "https://example.hawcx.com") */
11
+ type JsonObject = Record<string, unknown>;
12
+ export interface DelegationClientBaseOptions {
13
+ /** Hawcx API base URL (e.g., "https://api.hawcx.com") */
52
14
  baseUrl: string;
53
- /** Service Provider identifier (usually OAuth client_id) */
54
- spId: string;
55
- /** Optional Hawcx API key */
15
+ /** Optional Hawcx API key (for additional authentication) */
56
16
  apiKey?: string;
57
17
  /** Request timeout in seconds (default: 15) */
58
- timeout?: number;
59
- /** Internal - Key ID for SP signatures (default: "hawcx", do not change) */
60
- kid?: string;
61
- /** Internal - Key ID for IDP verification (default: "hawcx", do not change) */
62
- idpKid?: string;
18
+ timeoutSeconds?: number;
19
+ /** Allowed response timestamp skew in seconds (default: 300) */
20
+ clockSkewSeconds?: number;
63
21
  }
64
- /**
65
- * Options for initiating MFA change
66
- */
67
- export interface InitiateMfaChangeOptions {
22
+ export interface DelegationClientSecretKeyOptions extends DelegationClientBaseOptions {
23
+ /** Hawcx secret key (credential blob). */
24
+ secretKey: string;
25
+ }
26
+ export type DelegationClientKeyOptions = DelegationClientBaseOptions & DelegationKeyMaterial;
27
+ export interface MfaInitiateOptions {
68
28
  /** User identifier (typically email address) */
69
- userid: string;
29
+ userId: string;
70
30
  /** MFA method to configure (MfaMethod enum or 'email', 'sms', 'totp' string) */
71
31
  mfaMethod: MfaMethod | string;
72
- /** Phone number with country code (required for SMS, e.g., "+15551234567") */
32
+ /** Phone number with country code (required for SMS) */
73
33
  phoneNumber?: string;
74
34
  /** Target MFA method after verification (optional) */
75
35
  mfaChangeTo?: MfaMethod | string;
76
36
  }
77
- /**
78
- * Options for verifying MFA change
79
- */
80
- export interface VerifyMfaChangeOptions {
37
+ export interface MfaVerifyOptions {
81
38
  /** User identifier (must match initiate request) */
82
- userid: string;
83
- /** Session ID from initiateMfaChange response */
39
+ userId: string;
40
+ /** Session ID from initiate response */
84
41
  sessionId: string;
85
42
  /** One-time password entered by user (6 digits) */
86
43
  otp: string;
87
44
  }
88
- /**
89
- * High-level client for Hawcx delegation operations.
90
- *
91
- * This client provides simplified methods for common Hawcx operations:
92
- * - MFA configuration (email, SMS, TOTP)
93
- * - User credential management
94
- * - Device operations
95
- *
96
- * All requests are automatically encrypted (ECIES) and signed (Ed25519/RSA-PSS).
97
- * All responses are automatically verified and decrypted.
98
- *
99
- * @example
100
- * ```typescript
101
- * // Initialize from keys
102
- * const client = HawcxDelegationClient.fromKeys({
103
- * spSigningKey: process.env.SP_SIGNING_KEY!,
104
- * spEncryptionKey: process.env.SP_ENCRYPTION_KEY!,
105
- * idpVerifyKey: process.env.IDP_VERIFY_KEY!,
106
- * idpEncryptionKey: process.env.IDP_ENCRYPTION_KEY!,
107
- * baseUrl: 'https://example.hawcx.com',
108
- * spId: 'my-client-id'
109
- * });
110
- *
111
- * // Initiate SMS MFA setup
112
- * const result = await client.initiateMfaChange({
113
- * userid: "user@example.com",
114
- * mfaMethod: "sms",
115
- * phoneNumber: "+15551234567"
116
- * });
117
- * console.log(result.session_id);
118
- *
119
- * // Verify OTP
120
- * await client.verifyMfaChange({
121
- * userid: "user@example.com",
122
- * sessionId: result.session_id,
123
- * otp: "123456"
124
- * });
125
- * ```
126
- */
127
- export declare class HawcxDelegationClient {
128
- private client;
45
+ export interface DeviceOperationOptions {
46
+ /** User identifier (typically email address) */
47
+ userId: string;
48
+ /** Device identifier (h2index) */
49
+ deviceId: string;
50
+ }
51
+ export interface DelegationRequestOptions<TPayload extends JsonObject> {
52
+ /** API endpoint path (e.g., "/hc_auth/v5/update/initiate") */
53
+ endpoint: string;
54
+ /** Request payload dictionary to be encrypted and sent */
55
+ payload: TPayload;
56
+ /** If true, prepends base_url to endpoint (default: true) */
57
+ includeBaseUrl?: boolean;
58
+ /** Optional additional HTTP headers (e.g., API keys) */
59
+ headers?: Record<string, string>;
60
+ }
61
+ export declare class DelegationClient {
62
+ private transport;
129
63
  private apiKey?;
130
- baseUrl: string;
131
- spId: string;
64
+ readonly baseUrl: string;
132
65
  constructor(options: {
133
- baseUrl: string;
134
- signer: Signer;
135
- verifier: Verifier;
136
- encryptor: EciesX25519Encryptor;
137
- decryptor: EciesX25519Decryptor;
138
- spId: string;
66
+ transport: DelegationTransport;
139
67
  apiKey?: string;
140
- timeout?: number;
68
+ baseUrl: string;
141
69
  });
142
- /**
143
- * Create client from explicit key values (recommended).
144
- *
145
- * This method allows the application to load keys from any source
146
- * (env vars, config files, secrets manager, etc.) and pass them
147
- * as values to the SDK.
148
- *
149
- * @param options - Configuration options
150
- * @returns Configured HawcxDelegationClient instance
151
- * @throws DelegationRequestError if key initialization fails
152
- *
153
- * @example
154
- * ```typescript
155
- * import * as process from 'process';
156
- *
157
- * // App controls how to load keys
158
- * const client = HawcxDelegationClient.fromKeys({
159
- * spSigningKey: process.env.MY_SIGNING_KEY!,
160
- * spEncryptionKey: process.env.MY_ENCRYPTION_KEY!,
161
- * idpVerifyKey: process.env.IDP_VERIFY_KEY!,
162
- * idpEncryptionKey: process.env.IDP_ENCRYPT_KEY!,
163
- * baseUrl: process.env.HAWCX_URL!,
164
- * spId: process.env.MY_CLIENT_ID!
165
- * });
166
- * ```
167
- */
168
- static fromKeys(options: HawcxClientFromKeysOptions): HawcxDelegationClient;
169
- /**
170
- * Build Hawcx API authentication headers
171
- */
70
+ static fromSecretKey(options: DelegationClientSecretKeyOptions): DelegationClient;
71
+ static fromKeys(options: DelegationClientKeyOptions): DelegationClient;
172
72
  private buildAuthHeaders;
173
- /**
174
- * Initiate MFA setup or change for a user.
175
- *
176
- * This method starts the MFA enrollment/update process by sending an OTP
177
- * to the user via their chosen method (email, SMS, or generating a TOTP secret).
178
- *
179
- * @param options - MFA initiation configuration
180
- * @returns Dictionary containing session_id and optional TOTP details
181
- * @throws DelegationRequestError if request fails or parameters are invalid
182
- * @throws Error if SMS method specified without phone_number
183
- *
184
- * @example
185
- * ```typescript
186
- * import { MfaMethod } from '@hawcx/oauth-client';
187
- *
188
- * // Email MFA (with enum - recommended!)
189
- * const result = await client.initiateMfaChange({
190
- * userid: "user@example.com",
191
- * mfaMethod: MfaMethod.EMAIL
192
- * });
193
- *
194
- * // SMS MFA (string also works)
195
- * const result = await client.initiateMfaChange({
196
- * userid: "user@example.com",
197
- * mfaMethod: "sms",
198
- * phoneNumber: "+15551234567"
199
- * });
200
- *
201
- * // TOTP MFA
202
- * const result = await client.initiateMfaChange({
203
- * userid: "user@example.com",
204
- * mfaMethod: MfaMethod.TOTP
205
- * });
206
- * console.log(`Scan QR code: ${result.otpauth_uri}`);
207
- * ```
208
- */
209
- initiateMfaChange(options: InitiateMfaChangeOptions): Promise<Record<string, any>>;
210
- /**
211
- * Verify OTP and complete MFA configuration change.
212
- *
213
- * This method verifies the OTP sent to the user and completes the MFA
214
- * enrollment/update process.
215
- *
216
- * @param options - MFA verification configuration
217
- * @returns Dictionary containing success message and optional mfa_changed_to
218
- * @throws DelegationRequestError if verification fails
219
- * @throws Error if OTP format is invalid
220
- *
221
- * @example
222
- * ```typescript
223
- * // Get OTP from user
224
- * const otp = getUserInput();
225
- *
226
- * // Verify and complete MFA setup
227
- * const result = await client.verifyMfaChange({
228
- * userid: "user@example.com",
229
- * sessionId: sessionId,
230
- * otp: otp
231
- * });
232
- * console.log(`MFA updated: ${result.detail}`);
233
- * ```
234
- */
235
- verifyMfaChange(options: VerifyMfaChangeOptions): Promise<Record<string, any>>;
236
- /**
237
- * Get user's stored credentials and MFA status.
238
- *
239
- * This method retrieves the user's credentials from Hawcx, including
240
- * their current MFA configuration.
241
- *
242
- * @param userid - User identifier
243
- * @returns Dictionary containing user credentials and MFA status
244
- *
245
- * @example
246
- * ```typescript
247
- * const creds = await client.getUserCredentials("user@example.com");
248
- * console.log(`MFA method: ${creds.mfa_method}`);
249
- * console.log(`Phone: ${creds.contact}`);
250
- * ```
251
- */
252
- getUserCredentials(userid: string): Promise<Record<string, any>>;
73
+ request<TReq extends JsonObject, TRes extends JsonObject>(options: DelegationRequestOptions<TReq>): Promise<TRes>;
74
+ readonly mfa: {
75
+ initiate: (options: MfaInitiateOptions) => Promise<JsonObject>;
76
+ verify: (options: MfaVerifyOptions) => Promise<JsonObject>;
77
+ };
78
+ readonly users: {
79
+ getCredentials: (userId: string) => Promise<JsonObject>;
80
+ };
81
+ readonly devices: {
82
+ list: (userId: string) => Promise<JsonObject>;
83
+ revoke: (options: DeviceOperationOptions) => Promise<JsonObject>;
84
+ unrevoke: (options: DeviceOperationOptions) => Promise<JsonObject>;
85
+ delete: (options: DeviceOperationOptions) => Promise<JsonObject>;
86
+ };
253
87
  }
88
+ export {};
254
89
  //# sourceMappingURL=hawcx.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hawcx.d.ts","sourceRoot":"","sources":["../../src/delegation/hawcx.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAuB,MAAM,EAAE,MAAM,UAAU,CAAC;AACvD,OAAO,EAEL,QAAQ,EACR,oBAAoB,EACpB,oBAAoB,EACrB,MAAM,UAAU,CAAC;AAGlB;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,oBAAY,SAAS;IACnB,KAAK,UAAU;IACf,GAAG,QAAQ;IACX,IAAI,SAAS;CACd;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,0DAA0D;IAC1D,YAAY,EAAE,MAAM,CAAC;IACrB,yDAAyD;IACzD,eAAe,EAAE,MAAM,CAAC;IACxB,4CAA4C;IAC5C,YAAY,EAAE,MAAM,CAAC;IACrB,2CAA2C;IAC3C,gBAAgB,EAAE,MAAM,CAAC;IACzB,6DAA6D;IAC7D,OAAO,EAAE,MAAM,CAAC;IAChB,4DAA4D;IAC5D,IAAI,EAAE,MAAM,CAAC;IACb,6BAA6B;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4EAA4E;IAC5E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,+EAA+E;IAC/E,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,gDAAgD;IAChD,MAAM,EAAE,MAAM,CAAC;IACf,gFAAgF;IAChF,SAAS,EAAE,SAAS,GAAG,MAAM,CAAC;IAC9B,8EAA8E;IAC9E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sDAAsD;IACtD,WAAW,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,oDAAoD;IACpD,MAAM,EAAE,MAAM,CAAC;IACf,iDAAiD;IACjD,SAAS,EAAE,MAAM,CAAC;IAClB,mDAAmD;IACnD,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,MAAM,CAAC,CAAS;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;gBAER,OAAO,EAAE;QACnB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,QAAQ,CAAC;QACnB,SAAS,EAAE,oBAAoB,CAAC;QAChC,SAAS,EAAE,oBAAoB,CAAC;QAChC,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB;IAeD;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,0BAA0B,GAAG,qBAAqB;IAqC3E;;OAEG;IACH,OAAO,CAAC,gBAAgB;IASxB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAmCG;IACG,iBAAiB,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAyDxF;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACG,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAgCpF;;;;;;;;;;;;;;;OAeG;IACG,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAmBvE"}
1
+ {"version":3,"file":"hawcx.d.ts","sourceRoot":"","sources":["../../src/delegation/hawcx.ts"],"names":[],"mappings":"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"}