@seedkey/sdk-client 0.0.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.
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Local token storage
3
+ */
4
+ import { storageLogger as log } from './logger';
5
+ const STORAGE_KEYS = {
6
+ ACCESS_TOKEN: 'seedkey_access_token',
7
+ REFRESH_TOKEN: 'seedkey_refresh_token',
8
+ EXPIRES_AT: 'seedkey_expires_at',
9
+ USER_ID: 'seedkey_user_id',
10
+ };
11
+ /**
12
+ * Save tokens to localStorage
13
+ */
14
+ export function saveTokens(tokens, userId) {
15
+ log.debug('Saving tokens...', {
16
+ hasAccessToken: !!tokens.accessToken,
17
+ hasRefreshToken: !!tokens.refreshToken,
18
+ expiresIn: tokens.expiresIn,
19
+ userId
20
+ });
21
+ localStorage.setItem(STORAGE_KEYS.ACCESS_TOKEN, tokens.accessToken);
22
+ localStorage.setItem(STORAGE_KEYS.REFRESH_TOKEN, tokens.refreshToken);
23
+ const expiresAt = Date.now() + tokens.expiresIn * 1000;
24
+ localStorage.setItem(STORAGE_KEYS.EXPIRES_AT, expiresAt.toString());
25
+ if (userId) {
26
+ localStorage.setItem(STORAGE_KEYS.USER_ID, userId);
27
+ }
28
+ log.info('Tokens saved', { expiresAt: new Date(expiresAt).toLocaleString() });
29
+ }
30
+ /**
31
+ * Get access token
32
+ */
33
+ export function getAccessToken() {
34
+ const token = localStorage.getItem(STORAGE_KEYS.ACCESS_TOKEN);
35
+ log.debug('getAccessToken', { hasToken: !!token });
36
+ return token;
37
+ }
38
+ /**
39
+ * Get refresh token
40
+ */
41
+ export function getRefreshToken() {
42
+ return localStorage.getItem(STORAGE_KEYS.REFRESH_TOKEN);
43
+ }
44
+ /**
45
+ * Get user ID
46
+ */
47
+ export function getUserId() {
48
+ return localStorage.getItem(STORAGE_KEYS.USER_ID);
49
+ }
50
+ /**
51
+ * Check whether token is expired
52
+ */
53
+ export function isTokenExpired() {
54
+ const expiresAt = localStorage.getItem(STORAGE_KEYS.EXPIRES_AT);
55
+ if (!expiresAt) {
56
+ log.debug('isTokenExpired: no expiration time');
57
+ return true;
58
+ }
59
+ // Consider expired 5 minutes before actual expiration
60
+ const bufferMs = 5 * 60 * 1000;
61
+ const expired = Date.now() > parseInt(expiresAt, 10) - bufferMs;
62
+ const expiresDate = new Date(parseInt(expiresAt, 10));
63
+ log.debug('isTokenExpired', {
64
+ expired,
65
+ expiresAt: expiresDate.toLocaleString(),
66
+ remainingMs: parseInt(expiresAt, 10) - Date.now() - bufferMs
67
+ });
68
+ return expired;
69
+ }
70
+ /**
71
+ * Check whether token exists
72
+ */
73
+ export function hasToken() {
74
+ return !!getAccessToken();
75
+ }
76
+ /**
77
+ * Clear all tokens
78
+ */
79
+ export function clearTokens() {
80
+ log.info('Clearing tokens from localStorage');
81
+ localStorage.removeItem(STORAGE_KEYS.ACCESS_TOKEN);
82
+ localStorage.removeItem(STORAGE_KEYS.REFRESH_TOKEN);
83
+ localStorage.removeItem(STORAGE_KEYS.EXPIRES_AT);
84
+ localStorage.removeItem(STORAGE_KEYS.USER_ID);
85
+ }
86
+ /**
87
+ * Get full session data
88
+ */
89
+ export function getSession() {
90
+ const session = {
91
+ accessToken: getAccessToken(),
92
+ refreshToken: getRefreshToken(),
93
+ userId: getUserId(),
94
+ isExpired: isTokenExpired(),
95
+ };
96
+ log.debug('getSession', {
97
+ hasAccessToken: !!session.accessToken,
98
+ hasRefreshToken: !!session.refreshToken,
99
+ userId: session.userId,
100
+ isExpired: session.isExpired
101
+ });
102
+ return session;
103
+ }
104
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,166 @@
1
+ export declare const SDK_VERSION = "0.0.1";
2
+ /** Extension download URL */
3
+ export declare const EXTENSION_DOWNLOAD_URL = "";
4
+ export declare const REQUEST_EVENT = "seedkey:v1:request";
5
+ export declare const RESPONSE_EVENT = "seedkey:v1:response";
6
+ export interface ExtensionStatus {
7
+ /** Extension is installed */
8
+ installed: boolean;
9
+ /** Extension is configured (has an identity) */
10
+ initialized: boolean;
11
+ /** Download URL if not installed */
12
+ downloadUrl?: string;
13
+ }
14
+ export interface Challenge {
15
+ nonce: string;
16
+ timestamp: number;
17
+ domain: string;
18
+ action: 'register' | 'authenticate';
19
+ expiresAt: number;
20
+ }
21
+ export interface TokenInfo {
22
+ accessToken: string;
23
+ refreshToken: string;
24
+ expiresIn: number;
25
+ }
26
+ export interface UserInfo {
27
+ id: string;
28
+ publicKey: string;
29
+ createdAt: string;
30
+ lastLogin?: string;
31
+ }
32
+ export interface AuthResult {
33
+ success: boolean;
34
+ action: 'login' | 'register';
35
+ user: UserInfo;
36
+ token: TokenInfo;
37
+ }
38
+ export interface PublicKeyInfo {
39
+ id: string;
40
+ publicKey: string;
41
+ deviceName?: string;
42
+ addedAt: number;
43
+ lastUsed: number;
44
+ }
45
+ export interface UserProfile {
46
+ id: string;
47
+ publicKey: PublicKeyInfo;
48
+ createdAt: number;
49
+ }
50
+ export interface SeedKeyOptions {
51
+ /** Backend URL for authentication */
52
+ backendUrl: string;
53
+ /** Operation timeout (ms), default: 60000 */
54
+ timeout?: number;
55
+ /** Callback when authorization is required */
56
+ onAuthRequired?: () => void;
57
+ /** Enable debug logging */
58
+ debug?: boolean;
59
+ }
60
+ export interface AuthOptions {
61
+ /** Device metadata */
62
+ metadata?: {
63
+ deviceName?: string;
64
+ };
65
+ }
66
+ /**
67
+ * Extension API actions
68
+ */
69
+ export type SeedKeyAction = 'check_available' | 'is_initialized' | 'get_public_key' | 'sign_challenge' | 'sign_message';
70
+ export interface SeedKeyRequest {
71
+ type: 'SEEDKEY_REQUEST';
72
+ version: string;
73
+ action: SeedKeyAction;
74
+ requestId: string;
75
+ origin: string;
76
+ payload?: {
77
+ domain?: string;
78
+ challenge?: Challenge;
79
+ message?: string;
80
+ };
81
+ }
82
+ export interface SeedKeyResponse {
83
+ type: 'SEEDKEY_RESPONSE';
84
+ version: string;
85
+ requestId: string;
86
+ success: boolean;
87
+ result?: unknown;
88
+ error?: {
89
+ code: string;
90
+ message: string;
91
+ };
92
+ }
93
+ export interface PublicKeyResult {
94
+ publicKey: string;
95
+ domain: string;
96
+ }
97
+ export interface SignChallengeResult {
98
+ signature: string;
99
+ publicKey: string;
100
+ }
101
+ export interface SignMessageResult {
102
+ signature: string;
103
+ publicKey: string;
104
+ message: string;
105
+ }
106
+ export interface ChallengeResponse {
107
+ challenge: Challenge;
108
+ challengeId: string;
109
+ }
110
+ export interface RegisterRequest {
111
+ publicKey: string;
112
+ challenge: Challenge;
113
+ signature: string;
114
+ metadata?: {
115
+ deviceName?: string;
116
+ extensionVersion?: string;
117
+ };
118
+ }
119
+ export interface VerifyRequest {
120
+ challengeId: string;
121
+ challenge: Challenge;
122
+ signature: string;
123
+ publicKey: string;
124
+ }
125
+ export declare const ERROR_CODES: {
126
+ readonly EXTENSION_NOT_FOUND: "EXTENSION_NOT_FOUND";
127
+ readonly EXTENSION_NOT_CONFIGURED: "EXTENSION_NOT_CONFIGURED";
128
+ readonly NOT_INITIALIZED: "NOT_INITIALIZED";
129
+ readonly EXTENSION_LOCKED: "LOCKED";
130
+ readonly TIMEOUT: "TIMEOUT";
131
+ readonly USER_REJECTED: "USER_REJECTED";
132
+ readonly BIOMETRIC_FAILED: "BIOMETRIC_FAILED";
133
+ readonly DOMAIN_MISMATCH: "DOMAIN_MISMATCH";
134
+ readonly INVALID_CHALLENGE: "INVALID_CHALLENGE";
135
+ readonly NETWORK_ERROR: "NETWORK_ERROR";
136
+ readonly SERVER_ERROR: "SERVER_ERROR";
137
+ readonly CHALLENGE_EXPIRED: "CHALLENGE_EXPIRED";
138
+ readonly NONCE_REUSED: "NONCE_REUSED";
139
+ readonly USER_NOT_FOUND: "USER_NOT_FOUND";
140
+ readonly USER_EXISTS: "USER_EXISTS";
141
+ readonly INVALID_SIGNATURE: "INVALID_SIGNATURE";
142
+ readonly INVALID_TOKEN: "INVALID_TOKEN";
143
+ };
144
+ export type ErrorCode = typeof ERROR_CODES[keyof typeof ERROR_CODES];
145
+ export declare class SeedKeyError extends Error {
146
+ code: string;
147
+ hint?: string | undefined;
148
+ /** Extension download URL (for EXTENSION_NOT_FOUND) */
149
+ downloadUrl?: string | undefined;
150
+ constructor(code: string, message: string, hint?: string | undefined,
151
+ /** Extension download URL (for EXTENSION_NOT_FOUND) */
152
+ downloadUrl?: string | undefined);
153
+ }
154
+ /**
155
+ * Extension missing error
156
+ */
157
+ export declare class ExtensionNotFoundError extends SeedKeyError {
158
+ constructor(message?: string);
159
+ }
160
+ /**
161
+ * Extension not configured error
162
+ */
163
+ export declare class ExtensionNotConfiguredError extends SeedKeyError {
164
+ constructor(message?: string);
165
+ }
166
+ //# 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,70 @@
1
+ // ============================================================================
2
+ // SDK Version & Constants
3
+ // ============================================================================
4
+ export const SDK_VERSION = '0.0.1';
5
+ /** Extension download URL */
6
+ export const EXTENSION_DOWNLOAD_URL = '';
7
+ // Event names for communication with content script (versioned)
8
+ export const REQUEST_EVENT = `seedkey:v1:request`;
9
+ export const RESPONSE_EVENT = `seedkey:v1:response`;
10
+ // ============================================================================
11
+ // Error Codes
12
+ // ============================================================================
13
+ export const ERROR_CODES = {
14
+ // Extension errors
15
+ EXTENSION_NOT_FOUND: 'EXTENSION_NOT_FOUND',
16
+ EXTENSION_NOT_CONFIGURED: 'EXTENSION_NOT_CONFIGURED',
17
+ NOT_INITIALIZED: 'NOT_INITIALIZED',
18
+ EXTENSION_LOCKED: 'LOCKED',
19
+ TIMEOUT: 'TIMEOUT',
20
+ // User actions
21
+ USER_REJECTED: 'USER_REJECTED',
22
+ BIOMETRIC_FAILED: 'BIOMETRIC_FAILED',
23
+ // Validation errors (in Extension)
24
+ DOMAIN_MISMATCH: 'DOMAIN_MISMATCH',
25
+ INVALID_CHALLENGE: 'INVALID_CHALLENGE',
26
+ // Server/Network errors
27
+ NETWORK_ERROR: 'NETWORK_ERROR',
28
+ SERVER_ERROR: 'SERVER_ERROR',
29
+ // Challenge errors
30
+ CHALLENGE_EXPIRED: 'CHALLENGE_EXPIRED',
31
+ NONCE_REUSED: 'NONCE_REUSED',
32
+ // Auth errors
33
+ USER_NOT_FOUND: 'USER_NOT_FOUND',
34
+ USER_EXISTS: 'USER_EXISTS',
35
+ INVALID_SIGNATURE: 'INVALID_SIGNATURE',
36
+ INVALID_TOKEN: 'INVALID_TOKEN',
37
+ };
38
+ // ============================================================================
39
+ // Errors
40
+ // ============================================================================
41
+ export class SeedKeyError extends Error {
42
+ constructor(code, message, hint,
43
+ /** Extension download URL (for EXTENSION_NOT_FOUND) */
44
+ downloadUrl) {
45
+ super(message);
46
+ this.code = code;
47
+ this.hint = hint;
48
+ this.downloadUrl = downloadUrl;
49
+ this.name = 'SeedKeyError';
50
+ }
51
+ }
52
+ /**
53
+ * Extension missing error
54
+ */
55
+ export class ExtensionNotFoundError extends SeedKeyError {
56
+ constructor(message = 'SeedKey extension not found. Please install it.') {
57
+ super(ERROR_CODES.EXTENSION_NOT_FOUND, message, 'Install SeedKey browser extension', EXTENSION_DOWNLOAD_URL);
58
+ this.name = 'ExtensionNotFoundError';
59
+ }
60
+ }
61
+ /**
62
+ * Extension not configured error
63
+ */
64
+ export class ExtensionNotConfiguredError extends SeedKeyError {
65
+ constructor(message = 'SeedKey extension is not configured. Please set up your identity.') {
66
+ super(ERROR_CODES.EXTENSION_NOT_CONFIGURED, message, 'Open SeedKey extension and create your identity');
67
+ this.name = 'ExtensionNotConfiguredError';
68
+ }
69
+ }
70
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,0BAA0B;AAC1B,+EAA+E;AAE/E,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC;AAEnC,6BAA6B;AAC7B,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAEzC,gEAAgE;AAChE,MAAM,CAAC,MAAM,aAAa,GAAG,oBAAoB,CAAC;AAClD,MAAM,CAAC,MAAM,cAAc,GAAG,qBAAqB,CAAC;AA4KpD,+EAA+E;AAC/E,cAAc;AACd,+EAA+E;AAE/E,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,mBAAmB;IACnB,mBAAmB,EAAE,qBAAqB;IAC1C,wBAAwB,EAAE,0BAA0B;IACpD,eAAe,EAAE,iBAAiB;IAClC,gBAAgB,EAAE,QAAQ;IAC1B,OAAO,EAAE,SAAS;IAElB,eAAe;IACf,aAAa,EAAE,eAAe;IAC9B,gBAAgB,EAAE,kBAAkB;IAEpC,mCAAmC;IACnC,eAAe,EAAE,iBAAiB;IAClC,iBAAiB,EAAE,mBAAmB;IAEtC,wBAAwB;IACxB,aAAa,EAAE,eAAe;IAC9B,YAAY,EAAE,cAAc;IAE5B,mBAAmB;IACnB,iBAAiB,EAAE,mBAAmB;IACtC,YAAY,EAAE,cAAc;IAE5B,cAAc;IACd,cAAc,EAAE,gBAAgB;IAChC,WAAW,EAAE,aAAa;IAC1B,iBAAiB,EAAE,mBAAmB;IACtC,aAAa,EAAE,eAAe;CACtB,CAAC;AAIX,+EAA+E;AAC/E,SAAS;AACT,+EAA+E;AAE/E,MAAM,OAAO,YAAa,SAAQ,KAAK;IACrC,YACS,IAAY,EACnB,OAAe,EACR,IAAa;IACpB,uDAAuD;IAChD,WAAoB;QAE3B,KAAK,CAAC,OAAO,CAAC,CAAC;QANR,SAAI,GAAJ,IAAI,CAAQ;QAEZ,SAAI,GAAJ,IAAI,CAAS;QAEb,gBAAW,GAAX,WAAW,CAAS;QAG3B,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,sBAAuB,SAAQ,YAAY;IACtD,YAAY,OAAO,GAAG,iDAAiD;QACrE,KAAK,CACH,WAAW,CAAC,mBAAmB,EAC/B,OAAO,EACP,mCAAmC,EACnC,sBAAsB,CACvB,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACvC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,2BAA4B,SAAQ,YAAY;IAC3D,YAAY,OAAO,GAAG,mEAAmE;QACvF,KAAK,CACH,WAAW,CAAC,wBAAwB,EACpC,OAAO,EACP,iDAAiD,CAClD,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,6BAA6B,CAAC;IAC5C,CAAC;CACF"}
package/package.json ADDED
@@ -0,0 +1,96 @@
1
+ {
2
+ "name": "@seedkey/sdk-client",
3
+ "version": "0.0.1",
4
+ "description": "SeedKey Auth SDK - client library for passwordless authentication via the SeedKey browser extension",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "import": "./dist/index.js",
12
+ "types": "./dist/index.d.ts"
13
+ },
14
+ "./storage": {
15
+ "import": "./dist/storage.js",
16
+ "types": "./dist/storage.d.ts"
17
+ },
18
+ "./logger": {
19
+ "import": "./dist/logger.js",
20
+ "types": "./dist/logger.d.ts"
21
+ },
22
+ "./types": {
23
+ "import": "./dist/types.js",
24
+ "types": "./dist/types.d.ts"
25
+ }
26
+ },
27
+ "files": [
28
+ "dist",
29
+ "README.md",
30
+ "LICENSE",
31
+ "CHANGELOG.md"
32
+ ],
33
+ "sideEffects": false,
34
+ "scripts": {
35
+ "build": "npm run clean && tsc",
36
+ "dev": "tsc --watch",
37
+ "clean": "rimraf dist",
38
+ "typecheck": "tsc --noEmit",
39
+ "lint": "eslint src --ext .ts",
40
+ "lint:fix": "eslint src --ext .ts --fix",
41
+ "test": "vitest run",
42
+ "test:watch": "vitest",
43
+ "test:coverage": "vitest run --coverage",
44
+ "test:ui": "vitest --ui",
45
+ "prepublishOnly": "npm run typecheck && npm run test && npm run build",
46
+ "release": "npm run prepublishOnly && npm publish --access public",
47
+ "release:dry": "npm run prepublishOnly && npm publish --access public --dry-run",
48
+ "version:patch": "npm version patch --no-git-tag-version",
49
+ "version:minor": "npm version minor --no-git-tag-version",
50
+ "version:major": "npm version major --no-git-tag-version",
51
+ "version:prerelease": "npm version prerelease --preid=beta --no-git-tag-version"
52
+ },
53
+ "keywords": [
54
+ "seedkey",
55
+ "auth",
56
+ "authentication",
57
+ "passwordless",
58
+ "crypto",
59
+ "ed25519",
60
+ "browser-extension",
61
+ "webauthn",
62
+ "cryptographic-authentication",
63
+ "challenge-response",
64
+ "jwt",
65
+ "typescript"
66
+ ],
67
+ "author": "mbessarab",
68
+ "license": "MIT",
69
+ "repository": {
70
+ "type": "git",
71
+ "url": "https://github.com/mbessarab/seedkey-client-sdk.git"
72
+ },
73
+ "homepage": "https://github.com/mbessarab/seedkey-client-sdk#readme",
74
+ "bugs": {
75
+ "url": "https://github.com/mbessarab/seedkey-client-sdk/issues"
76
+ },
77
+ "publishConfig": {
78
+ "access": "public",
79
+ "registry": "https://registry.npmjs.org/"
80
+ },
81
+ "devDependencies": {
82
+ "@typescript-eslint/eslint-plugin": "^8.0.0",
83
+ "@typescript-eslint/parser": "^8.0.0",
84
+ "@vitest/coverage-v8": "^2.1.8",
85
+ "@vitest/ui": "^2.1.8",
86
+ "eslint": "^9.0.0",
87
+ "happy-dom": "^15.11.7",
88
+ "rimraf": "^5.0.5",
89
+ "typescript": "~5.6.3",
90
+ "vitest": "^2.1.8"
91
+ },
92
+ "peerDependencies": {},
93
+ "engines": {
94
+ "node": ">=18"
95
+ }
96
+ }