@inkbox/sdk 0.1.4 → 0.2.1

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 (65) hide show
  1. package/README.md +31 -35
  2. package/dist/_http.d.ts +7 -1
  3. package/dist/_http.d.ts.map +1 -1
  4. package/dist/_http.js +13 -1
  5. package/dist/_http.js.map +1 -1
  6. package/dist/agent_identity.d.ts +89 -71
  7. package/dist/agent_identity.d.ts.map +1 -1
  8. package/dist/agent_identity.js +145 -113
  9. package/dist/agent_identity.js.map +1 -1
  10. package/dist/credentials.d.ts +97 -0
  11. package/dist/credentials.d.ts.map +1 -0
  12. package/dist/credentials.js +147 -0
  13. package/dist/credentials.js.map +1 -0
  14. package/dist/identities/resources/identities.d.ts +1 -16
  15. package/dist/identities/resources/identities.d.ts.map +1 -1
  16. package/dist/identities/resources/identities.js +1 -19
  17. package/dist/identities/resources/identities.js.map +1 -1
  18. package/dist/identities/types.d.ts +0 -21
  19. package/dist/identities/types.d.ts.map +1 -1
  20. package/dist/identities/types.js +0 -11
  21. package/dist/identities/types.js.map +1 -1
  22. package/dist/index.d.ts +11 -3
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +7 -1
  25. package/dist/index.js.map +1 -1
  26. package/dist/inkbox.d.ts +42 -6
  27. package/dist/inkbox.d.ts.map +1 -1
  28. package/dist/inkbox.js +59 -10
  29. package/dist/inkbox.js.map +1 -1
  30. package/dist/mail/resources/messages.d.ts +2 -2
  31. package/dist/mail/resources/messages.d.ts.map +1 -1
  32. package/dist/mail/resources/messages.js.map +1 -1
  33. package/dist/mail/types.d.ts +8 -1
  34. package/dist/mail/types.d.ts.map +1 -1
  35. package/dist/mail/types.js +8 -0
  36. package/dist/mail/types.js.map +1 -1
  37. package/dist/vault/crypto.d.ts +138 -0
  38. package/dist/vault/crypto.d.ts.map +1 -0
  39. package/dist/vault/crypto.js +273 -0
  40. package/dist/vault/crypto.js.map +1 -0
  41. package/dist/vault/resources/vault.d.ts +183 -0
  42. package/dist/vault/resources/vault.d.ts.map +1 -0
  43. package/dist/vault/resources/vault.js +396 -0
  44. package/dist/vault/resources/vault.js.map +1 -0
  45. package/dist/vault/totp.d.ts +73 -0
  46. package/dist/vault/totp.d.ts.map +1 -0
  47. package/dist/vault/totp.js +230 -0
  48. package/dist/vault/totp.js.map +1 -0
  49. package/dist/vault/types.d.ts +239 -0
  50. package/dist/vault/types.d.ts.map +1 -0
  51. package/dist/vault/types.js +229 -0
  52. package/dist/vault/types.js.map +1 -0
  53. package/package.json +5 -1
  54. package/dist/authenticator/resources/accounts.d.ts +0 -70
  55. package/dist/authenticator/resources/accounts.d.ts.map +0 -1
  56. package/dist/authenticator/resources/accounts.js +0 -91
  57. package/dist/authenticator/resources/accounts.js.map +0 -1
  58. package/dist/authenticator/resources/apps.d.ts +0 -38
  59. package/dist/authenticator/resources/apps.d.ts.map +0 -1
  60. package/dist/authenticator/resources/apps.js +0 -52
  61. package/dist/authenticator/resources/apps.js.map +0 -1
  62. package/dist/authenticator/types.d.ts +0 -83
  63. package/dist/authenticator/types.d.ts.map +0 -1
  64. package/dist/authenticator/types.js +0 -43
  65. package/dist/authenticator/types.js.map +0 -1
@@ -0,0 +1,230 @@
1
+ /**
2
+ * inkbox-vault/totp.ts
3
+ *
4
+ * Client-side TOTP (RFC 6238) implementation.
5
+ */
6
+ import { createHmac } from "node:crypto";
7
+ // ---- Enums ----
8
+ /**
9
+ * Hash algorithm for TOTP code generation.
10
+ *
11
+ * Values are lowercase to match `otpauth://` URI convention.
12
+ */
13
+ export const TOTPAlgorithm = {
14
+ SHA1: "sha1",
15
+ SHA256: "sha256",
16
+ SHA512: "sha512",
17
+ };
18
+ // ---- Validation ----
19
+ const VALID_ALGORITHMS = ["sha1", "sha256", "sha512"];
20
+ const VALID_DIGITS = new Set([6, 8]);
21
+ const VALID_PERIODS = new Set([30, 60]);
22
+ /**
23
+ * Validate a TOTPConfig's fields.
24
+ *
25
+ * @throws Error if any field is invalid.
26
+ */
27
+ export function validateTotpConfig(config) {
28
+ if (!config.secret || !config.secret.trim()) {
29
+ throw new Error("secret must be a non-empty base32 string");
30
+ }
31
+ b32decode(config.secret); // validate base32
32
+ const digits = config.digits ?? 6;
33
+ if (!VALID_DIGITS.has(digits)) {
34
+ throw new Error(`digits must be 6 or 8, got ${digits}`);
35
+ }
36
+ const period = config.period ?? 30;
37
+ if (!VALID_PERIODS.has(period)) {
38
+ throw new Error(`period must be 30 or 60, got ${period}`);
39
+ }
40
+ const alg = config.algorithm ?? "sha1";
41
+ if (!VALID_ALGORITHMS.includes(alg)) {
42
+ throw new Error(`algorithm must be sha1, sha256, or sha512, got ${alg}`);
43
+ }
44
+ }
45
+ // ---- Internal helpers ----
46
+ /**
47
+ * Decode a base32 secret, adding padding if needed.
48
+ * @internal
49
+ */
50
+ function b32decode(secret) {
51
+ const upper = secret.toUpperCase().replace(/=+$/, "");
52
+ if (upper.length === 0) {
53
+ throw new Error(`Invalid base32 secret: '${secret}'`);
54
+ }
55
+ const alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567";
56
+ const bits = [];
57
+ for (const ch of upper) {
58
+ const idx = alphabet.indexOf(ch);
59
+ if (idx === -1)
60
+ throw new Error(`Invalid base32 secret: '${secret}'`);
61
+ for (let i = 4; i >= 0; i--) {
62
+ bits.push((idx >> i) & 1);
63
+ }
64
+ }
65
+ const bytes = [];
66
+ for (let i = 0; i + 8 <= bits.length; i += 8) {
67
+ let byte = 0;
68
+ for (let j = 0; j < 8; j++)
69
+ byte = (byte << 1) | bits[i + j];
70
+ bytes.push(byte);
71
+ }
72
+ if (bytes.length === 0) {
73
+ throw new Error(`Invalid base32 secret: '${secret}'`);
74
+ }
75
+ return Buffer.from(bytes);
76
+ }
77
+ /**
78
+ * Generate an HOTP code per RFC 4226 (internal helper).
79
+ * @internal
80
+ */
81
+ function generateHotp(secret, counter, algorithm = "sha1", digits = 6) {
82
+ const key = b32decode(secret);
83
+ const msg = Buffer.alloc(8);
84
+ // Write counter as big-endian u64
85
+ msg.writeUInt32BE(Math.floor(counter / 0x100000000), 0);
86
+ msg.writeUInt32BE(counter >>> 0, 4);
87
+ const h = createHmac(algorithm, key).update(msg).digest();
88
+ const offset = h[h.length - 1] & 0x0f;
89
+ const code = ((h[offset] & 0x7f) << 24) |
90
+ ((h[offset + 1] & 0xff) << 16) |
91
+ ((h[offset + 2] & 0xff) << 8) |
92
+ (h[offset + 3] & 0xff);
93
+ return String(code % 10 ** digits).padStart(digits, "0");
94
+ }
95
+ // ---- Public API ----
96
+ /**
97
+ * Generate the current TOTP code per RFC 6238.
98
+ *
99
+ * @param config - TOTP configuration with the shared secret and parameters.
100
+ * @returns A {@link TOTPCode} with the code and timing metadata.
101
+ */
102
+ export function generateTotp(config) {
103
+ validateTotpConfig(config);
104
+ const algorithm = config.algorithm ?? "sha1";
105
+ const digits = config.digits ?? 6;
106
+ const period = config.period ?? 30;
107
+ const now = Math.floor(Date.now() / 1000);
108
+ const counter = Math.floor(now / period);
109
+ const periodStart = counter * period;
110
+ const periodEnd = periodStart + period;
111
+ const secondsRemaining = periodEnd - now;
112
+ const code = generateHotp(config.secret, counter, algorithm, digits);
113
+ return { code, periodStart, periodEnd, secondsRemaining };
114
+ }
115
+ /**
116
+ * Parse an `otpauth://totp/...` URI into a {@link TOTPConfig}.
117
+ *
118
+ * Supports the Google Authenticator Key URI format.
119
+ * Rejects HOTP URIs with an error.
120
+ *
121
+ * @param uri - The full `otpauth://` URI string.
122
+ * @returns A validated {@link TOTPConfig}.
123
+ * @throws Error on invalid scheme, HOTP type, missing secret, or invalid parameters.
124
+ */
125
+ export function parseTotpUri(uri) {
126
+ let parsed;
127
+ try {
128
+ parsed = new URL(uri);
129
+ }
130
+ catch {
131
+ throw new Error(`Invalid URI: ${uri}`);
132
+ }
133
+ if (parsed.protocol !== "otpauth:") {
134
+ throw new Error(`Invalid scheme: expected 'otpauth', got '${parsed.protocol.replace(":", "")}'`);
135
+ }
136
+ const otpType = parsed.hostname;
137
+ if (otpType === "hotp") {
138
+ throw new Error("HOTP is not supported — only TOTP URIs are accepted");
139
+ }
140
+ if (otpType !== "totp") {
141
+ throw new Error(`Invalid OTP type: expected 'totp', got '${otpType}'`);
142
+ }
143
+ // Parse label — path is /<label>, label is [Issuer:]AccountName
144
+ const label = decodeURIComponent(parsed.pathname.replace(/^\//, ""));
145
+ let labelIssuer;
146
+ let accountName;
147
+ if (label.includes(":")) {
148
+ const [issuerPart, ...rest] = label.split(":");
149
+ labelIssuer = issuerPart.trim();
150
+ accountName = rest.join(":").trim();
151
+ }
152
+ else {
153
+ accountName = label.trim() || undefined;
154
+ }
155
+ // Secret (required)
156
+ const secret = parsed.searchParams.get("secret");
157
+ if (!secret) {
158
+ throw new Error("Missing required 'secret' parameter");
159
+ }
160
+ const secretUpper = secret.toUpperCase();
161
+ b32decode(secretUpper); // validate
162
+ // Issuer — query param takes precedence over label prefix
163
+ const issuer = parsed.searchParams.get("issuer") || labelIssuer || undefined;
164
+ // Algorithm
165
+ const algorithmStr = (parsed.searchParams.get("algorithm") || "sha1").toLowerCase();
166
+ if (!VALID_ALGORITHMS.includes(algorithmStr)) {
167
+ throw new Error(`Invalid algorithm: '${algorithmStr}'. Must be one of: sha1, sha256, sha512`);
168
+ }
169
+ const algorithm = algorithmStr;
170
+ // Digits
171
+ const digitsStr = parsed.searchParams.get("digits") || "6";
172
+ if (!/^\d+$/.test(digitsStr)) {
173
+ throw new Error(`Invalid digits: '${digitsStr}'. Must be 6 or 8`);
174
+ }
175
+ const digits = Number(digitsStr);
176
+ if (!VALID_DIGITS.has(digits)) {
177
+ throw new Error(`Invalid digits: '${digitsStr}'. Must be 6 or 8`);
178
+ }
179
+ // Period
180
+ const periodStr = parsed.searchParams.get("period") || "30";
181
+ if (!/^\d+$/.test(periodStr)) {
182
+ throw new Error(`Invalid period: '${periodStr}'. Must be 30 or 60`);
183
+ }
184
+ const period = Number(periodStr);
185
+ if (!VALID_PERIODS.has(period)) {
186
+ throw new Error(`Invalid period: '${periodStr}'. Must be 30 or 60`);
187
+ }
188
+ const config = {
189
+ secret: secretUpper,
190
+ algorithm,
191
+ digits,
192
+ period,
193
+ issuer,
194
+ accountName: accountName || undefined,
195
+ };
196
+ validateTotpConfig(config);
197
+ return config;
198
+ }
199
+ // ---- Serialization helpers for wire format (camelCase ↔ snake_case) ----
200
+ /** Serialize a TOTPConfig to the snake_case wire format. @internal */
201
+ export function serializeTotpConfig(config) {
202
+ const d = {
203
+ secret: config.secret,
204
+ };
205
+ if (config.algorithm !== undefined)
206
+ d.algorithm = config.algorithm;
207
+ if (config.digits !== undefined)
208
+ d.digits = config.digits;
209
+ if (config.period !== undefined)
210
+ d.period = config.period;
211
+ if (config.issuer !== undefined)
212
+ d.issuer = config.issuer;
213
+ if (config.accountName !== undefined)
214
+ d.account_name = config.accountName;
215
+ return d;
216
+ }
217
+ /** Parse a TOTPConfig from the snake_case wire format. @internal */
218
+ export function parseTotpConfig(raw) {
219
+ const config = {
220
+ secret: raw.secret,
221
+ algorithm: raw.algorithm ?? "sha1",
222
+ digits: raw.digits ?? 6,
223
+ period: raw.period ?? 30,
224
+ issuer: raw.issuer,
225
+ accountName: raw.account_name ?? undefined,
226
+ };
227
+ validateTotpConfig(config);
228
+ return config;
229
+ }
230
+ //# sourceMappingURL=totp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"totp.js","sourceRoot":"","sources":["../../src/vault/totp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,239 @@
1
+ /**
2
+ * inkbox-vault TypeScript SDK — public types.
3
+ *
4
+ * Includes API response types, raw JSON shapes, parsers,
5
+ * and client-side structured secret payloads.
6
+ */
7
+ import type { TOTPConfig } from "./totp.js";
8
+ /**
9
+ * Category of credential stored in a vault secret.
10
+ *
11
+ * Used as a client-side hint for which form to render. The server
12
+ * does not validate or enforce payload structure (it's opaque ciphertext).
13
+ */
14
+ export declare const VaultSecretType: {
15
+ readonly API_KEY: "api_key";
16
+ readonly KEY_PAIR: "key_pair";
17
+ readonly LOGIN: "login";
18
+ readonly SSH_KEY: "ssh_key";
19
+ readonly OTHER: "other";
20
+ };
21
+ export type VaultSecretType = (typeof VaultSecretType)[keyof typeof VaultSecretType];
22
+ /**
23
+ * Discriminator for vault key records.
24
+ *
25
+ * - `PRIMARY` — a standard vault key issued to users or agents.
26
+ * - `RECOVERY` — a recovery code generated at vault initialization.
27
+ */
28
+ export declare const VaultKeyType: {
29
+ readonly PRIMARY: "primary";
30
+ readonly RECOVERY: "recovery";
31
+ };
32
+ export type VaultKeyType = (typeof VaultKeyType)[keyof typeof VaultKeyType];
33
+ /** Vault metadata returned by the info endpoint. */
34
+ export interface VaultInfo {
35
+ id: string;
36
+ organizationId: string;
37
+ /** @example "active" */
38
+ status: string;
39
+ createdAt: Date;
40
+ updatedAt: Date;
41
+ /** Number of active primary vault keys. */
42
+ keyCount: number;
43
+ /** Number of active vault secrets. */
44
+ secretCount: number;
45
+ /** Number of active recovery keys. */
46
+ recoveryKeyCount: number;
47
+ }
48
+ /** Vault key metadata (no wrapped key material). */
49
+ export interface VaultKey {
50
+ id: string;
51
+ /** `"primary"` or `"recovery"` */
52
+ keyType: string;
53
+ /** Clerk user ID of the creator, or `null`. */
54
+ createdBy: string | null;
55
+ status: string;
56
+ createdAt: Date;
57
+ updatedAt: Date;
58
+ }
59
+ /** Vault secret metadata (no encrypted payload). */
60
+ export interface VaultSecret {
61
+ id: string;
62
+ /** Display name. */
63
+ name: string;
64
+ /** Optional description. */
65
+ description: string | null;
66
+ /** `"login"` | `"ssh_key"` | `"api_key"` | `"other"` */
67
+ secretType: string;
68
+ status: string;
69
+ createdAt: Date;
70
+ updatedAt: Date;
71
+ }
72
+ /** Vault secret including the encrypted payload. */
73
+ export interface VaultSecretDetail extends VaultSecret {
74
+ /** Base64-encoded AES-256-GCM ciphertext. */
75
+ encryptedPayload: string;
76
+ }
77
+ /** A rule granting an identity access to a vault secret. */
78
+ export interface AccessRule {
79
+ id: string;
80
+ vaultSecretId: string;
81
+ identityId: string;
82
+ createdAt: Date;
83
+ }
84
+ /** @internal */
85
+ export interface RawAccessRule {
86
+ id: string;
87
+ vault_secret_id: string;
88
+ identity_id: string;
89
+ created_at: string;
90
+ }
91
+ /** @internal */
92
+ export declare function parseAccessRule(r: RawAccessRule): AccessRule;
93
+ /** Payload for `login` secrets. At least one of `username` or `email` should be provided. */
94
+ export interface LoginPayload {
95
+ password: string;
96
+ username?: string;
97
+ email?: string;
98
+ /** URL of the service. */
99
+ url?: string;
100
+ notes?: string;
101
+ /** Optional TOTP configuration for two-factor authentication. */
102
+ totp?: TOTPConfig;
103
+ }
104
+ /** Payload for `other` (freeform catch-all) secrets. */
105
+ export interface OtherPayload {
106
+ /** Freeform content. */
107
+ data: string;
108
+ notes?: string;
109
+ }
110
+ /** Payload for `ssh_key` secrets. */
111
+ export interface SSHKeyPayload {
112
+ /** SSH private key (PEM or OpenSSH format). */
113
+ privateKey: string;
114
+ publicKey?: string;
115
+ fingerprint?: string;
116
+ /** Passphrase protecting the private key, if any. */
117
+ passphrase?: string;
118
+ notes?: string;
119
+ }
120
+ /** Payload for `api_key` secrets (single token). */
121
+ export interface APIKeyPayload {
122
+ /** The API key or token. */
123
+ apiKey: string;
124
+ /** API endpoint URL. */
125
+ endpoint?: string;
126
+ notes?: string;
127
+ }
128
+ /** Payload for `key_pair` secrets (access key + secret key). */
129
+ export interface KeyPairPayload {
130
+ /** The access key identifier. */
131
+ accessKey: string;
132
+ /** The secret key. */
133
+ secretKey: string;
134
+ /** API endpoint URL. */
135
+ endpoint?: string;
136
+ notes?: string;
137
+ }
138
+ /** Union of all secret payload types. */
139
+ export type SecretPayload = LoginPayload | OtherPayload | SSHKeyPayload | APIKeyPayload | KeyPairPayload;
140
+ /** A vault secret with its payload decrypted into a structured type. */
141
+ export interface DecryptedVaultSecret {
142
+ id: string;
143
+ /** Display name. */
144
+ name: string;
145
+ description: string | null;
146
+ /** `"login"` | `"ssh_key"` | `"api_key"` | `"other"` */
147
+ secretType: string;
148
+ status: string;
149
+ createdAt: Date;
150
+ updatedAt: Date;
151
+ /** The decrypted, structured payload. */
152
+ payload: SecretPayload;
153
+ }
154
+ /** @internal */
155
+ export interface RawVaultInfo {
156
+ id: string;
157
+ organization_id: string;
158
+ status: string;
159
+ created_at: string;
160
+ updated_at: string;
161
+ key_count: number;
162
+ secret_count: number;
163
+ recovery_key_count: number;
164
+ }
165
+ /** @internal */
166
+ export interface RawVaultKey {
167
+ id: string;
168
+ key_type: string;
169
+ created_by: string | null;
170
+ status: string;
171
+ created_at: string;
172
+ updated_at: string;
173
+ }
174
+ /** @internal */
175
+ export interface RawVaultSecret {
176
+ id: string;
177
+ name: string;
178
+ description: string | null;
179
+ secret_type: string;
180
+ status: string;
181
+ created_at: string;
182
+ updated_at: string;
183
+ }
184
+ /** @internal */
185
+ export interface RawVaultSecretDetail extends RawVaultSecret {
186
+ encrypted_payload: string;
187
+ }
188
+ /** @internal */
189
+ export interface RawVaultUnlockResponse {
190
+ wrapped_org_encryption_key: string | null;
191
+ wrapped_org_encryption_keys: Array<{
192
+ id: string;
193
+ auth_hash: string;
194
+ wrapped_org_encryption_key: string;
195
+ }> | null;
196
+ encrypted_secrets: RawVaultSecretDetail[];
197
+ }
198
+ /** Parse a raw vault info response into a {@link VaultInfo}. @internal */
199
+ export declare function parseVaultInfo(r: RawVaultInfo): VaultInfo;
200
+ /** Parse a raw vault key response into a {@link VaultKey}. @internal */
201
+ export declare function parseVaultKey(r: RawVaultKey): VaultKey;
202
+ /** Parse a raw vault secret response into a {@link VaultSecret}. @internal */
203
+ export declare function parseVaultSecret(r: RawVaultSecret): VaultSecret;
204
+ /** Parse a raw vault secret detail response into a {@link VaultSecretDetail}. @internal */
205
+ export declare function parseVaultSecretDetail(r: RawVaultSecretDetail): VaultSecretDetail;
206
+ /**
207
+ * Serialize a payload into a plain object for encryption.
208
+ *
209
+ * Converts camelCase payload fields to the snake_case wire format
210
+ * stored inside the encrypted blob.
211
+ *
212
+ * @param secretType - The secret type string.
213
+ * @param payload - The structured payload to serialize.
214
+ * @returns A plain object ready for JSON stringification.
215
+ * @throws If `secretType` is unknown.
216
+ * @internal
217
+ */
218
+ export declare function serializePayload(secretType: string, payload: SecretPayload): Record<string, unknown>;
219
+ /**
220
+ * Parse a decrypted plain object into the correct payload type.
221
+ *
222
+ * Converts snake_case wire-format fields back to camelCase.
223
+ *
224
+ * @param secretType - The secret type string.
225
+ * @param raw - The decrypted plain object.
226
+ * @returns The typed payload.
227
+ * @throws If `secretType` is unknown.
228
+ * @internal
229
+ */
230
+ export declare function parsePayload(secretType: string, raw: Record<string, unknown>): SecretPayload;
231
+ /**
232
+ * Infer the `secretType` string from a payload's shape.
233
+ *
234
+ * @param payload - A secret payload object.
235
+ * @returns The inferred secret type string.
236
+ * @throws If the payload shape doesn't match any known type.
237
+ */
238
+ export declare function inferSecretType(payload: SecretPayload): string;
239
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/vault/types.ts"],"names":[],"mappings":"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"}