@coinlist-co/react 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.
Files changed (47) hide show
  1. package/README.md +7 -0
  2. package/dist/chunk-5E3P7AMH.js +20 -0
  3. package/dist/chunk-5E3P7AMH.js.map +1 -0
  4. package/dist/chunk-F56RBKNS.js +63 -0
  5. package/dist/chunk-F56RBKNS.js.map +1 -0
  6. package/dist/chunk-NLJMUHOG.js +253 -0
  7. package/dist/chunk-NLJMUHOG.js.map +1 -0
  8. package/dist/chunk-OETRTIQ4.js +274 -0
  9. package/dist/chunk-OETRTIQ4.js.map +1 -0
  10. package/dist/chunk-YJQMJFA7.js +16 -0
  11. package/dist/chunk-YJQMJFA7.js.map +1 -0
  12. package/dist/client/components/index.cjs +445 -0
  13. package/dist/client/components/index.cjs.map +1 -0
  14. package/dist/client/components/index.d.cts +19 -0
  15. package/dist/client/components/index.d.ts +19 -0
  16. package/dist/client/components/index.js +399 -0
  17. package/dist/client/components/index.js.map +1 -0
  18. package/dist/client/core/index.cjs +566 -0
  19. package/dist/client/core/index.cjs.map +1 -0
  20. package/dist/client/core/index.d.cts +22 -0
  21. package/dist/client/core/index.d.ts +22 -0
  22. package/dist/client/core/index.js +35 -0
  23. package/dist/client/core/index.js.map +1 -0
  24. package/dist/client/hooks/index.cjs +56 -0
  25. package/dist/client/hooks/index.cjs.map +1 -0
  26. package/dist/client/hooks/index.d.cts +14 -0
  27. package/dist/client/hooks/index.d.ts +14 -0
  28. package/dist/client/hooks/index.js +9 -0
  29. package/dist/client/hooks/index.js.map +1 -0
  30. package/dist/client/index.cjs +621 -0
  31. package/dist/client/index.cjs.map +1 -0
  32. package/dist/client/index.d.cts +18 -0
  33. package/dist/client/index.d.ts +18 -0
  34. package/dist/client/index.js +41 -0
  35. package/dist/client/index.js.map +1 -0
  36. package/dist/client/styles.css +2 -0
  37. package/dist/coinlist-client-BH_Cn_7u.d.cts +71 -0
  38. package/dist/coinlist-client-fkB3J-2a.d.ts +71 -0
  39. package/dist/oauth-session-g0OPJNKn.d.cts +59 -0
  40. package/dist/oauth-session-g0OPJNKn.d.ts +59 -0
  41. package/dist/server/index.cjs +405 -0
  42. package/dist/server/index.cjs.map +1 -0
  43. package/dist/server/index.d.cts +37 -0
  44. package/dist/server/index.d.ts +37 -0
  45. package/dist/server/index.js +142 -0
  46. package/dist/server/index.js.map +1 -0
  47. package/package.json +122 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/server/api/api.server.ts","../../src/server/coinlist.server.ts"],"sourcesContent":["import {\n type HttpClientConfig,\n HttpError,\n type HttpRequest,\n} from '@/shared/api/http';\nimport { HttpClient } from '@/shared/api/http-client';\nimport { requestRetryMiddleware } from '@/shared/api/middleware/request-retry';\n\nexport class Api {\n private readonly httpClient: HttpClient;\n\n constructor(private readonly config: HttpClientConfig) {\n this.httpClient = new HttpClient(this.config, {\n beforeRequest: [],\n afterRequest: [requestRetryMiddleware],\n });\n }\n\n async send<TResponse>(request: HttpRequest): Promise<TResponse> {\n const response = await this.httpClient.send<TResponse>(request);\n if (response.status >= 200 && response.status < 300) {\n return response.body as TResponse;\n } else {\n throw new HttpError(response);\n }\n }\n}\n","import { Api } from '@/server/api/api.server';\nimport { API_VERSION, BASE_URL } from '@/shared/api/frontline';\nimport { HttpError } from '@/shared/api/http';\nimport type { Config } from '@/shared/types/config';\nimport type { OAuthSessionDto } from '@/shared/types/dto/oauth-session';\nimport type {\n AuthorizationCode,\n ClientSecret,\n CodeVerifier,\n} from '@/shared/types/oauth';\nimport {\n type OAuthAccessToken,\n OAuthSession,\n} from '@/shared/types/oauth-session';\n\n/** Buffer in seconds before expiry to consider token expired for refresh. */\nconst ACCESS_TOKEN_EXPIRY_BUFFER_SECONDS = 60;\n\nexport interface SessionStore {\n getSession(): Promise<OAuthSession | null>;\n setSession(session: OAuthSession | null): Promise<void>;\n}\n\nexport interface ServerConfig extends Config {\n readonly clientSecret: ClientSecret;\n readonly sessionStore: SessionStore;\n /** Buffer in seconds before expiry to consider token expired for refresh. */\n readonly accessTokenExpiryBufferSeconds?: number;\n /**\n * Whether SDK will throw an exception in cases it can be silent.\n * For example, if token revokation on logout fails.\n */\n readonly strict?: boolean;\n}\n\nexport interface CoinListServer {\n completeOAuth(\n code: AuthorizationCode,\n codeVerifier: CodeVerifier\n ): Promise<OAuthSession>;\n\n /**\n * Responsible for:\n * 1. Returning a securely stored access token from Cookies\n * 2. Renewing the session if it's expired (or about to expire)\n *\n * @returns a valid access token or null if the user is not authentication.\n * On error rejects the Promise and throws.\n */\n accessToken(): Promise<OAuthAccessToken | null>;\n\n /**\n * Revokes the current token via POST /oauth/revoke and clears the session.\n */\n logout(): Promise<void>;\n}\n\nclass CoinListServerImpl implements CoinListServer {\n private readonly api: Api;\n private readonly baseUrl: string;\n\n private readonly accessTokenExpiryBufferSeconds: number;\n private readonly strict: boolean;\n\n constructor(private readonly _config: ServerConfig) {\n this.baseUrl = _config.baseUrl ?? BASE_URL;\n this.accessTokenExpiryBufferSeconds =\n _config.accessTokenExpiryBufferSeconds ??\n ACCESS_TOKEN_EXPIRY_BUFFER_SECONDS;\n this.strict = _config.strict ?? false;\n this.api = new Api({\n baseUrl: this.baseUrl,\n xApiVersion: API_VERSION,\n });\n }\n\n async completeOAuth(\n code: AuthorizationCode,\n codeVerifier: CodeVerifier\n ): Promise<OAuthSession> {\n const sessionDto = await this.api.send<OAuthSessionDto>({\n method: 'POST',\n url: `/oauth/token`,\n body: {\n grant_type: 'authorization_code',\n code,\n redirect_uri: this._config.redirectUri,\n client_id: this._config.clientId,\n client_secret: this._config.clientSecret,\n code_verifier: codeVerifier,\n },\n });\n const session = OAuthSession.fromDto(sessionDto);\n this._config.sessionStore.setSession(session);\n return session;\n }\n\n async accessToken(): Promise<OAuthAccessToken | null> {\n const session = await this._config.sessionStore.getSession();\n if (session == null) return null;\n\n const now = Date.now();\n const expiresAt = session.accessToken.expiresAt.getTime();\n const bufferMs = this.accessTokenExpiryBufferSeconds * 1000;\n if (expiresAt > now + bufferMs) {\n return session.accessToken;\n }\n\n const refreshToken = session?.refreshToken;\n if (!refreshToken) {\n await this._config.sessionStore.setSession(null);\n return null;\n }\n\n try {\n const sessionDto = await this.api.send<OAuthSessionDto>({\n method: 'POST',\n url: `/oauth/token`,\n body: {\n grant_type: 'refresh_token',\n refresh_token: refreshToken,\n client_id: this._config.clientId,\n client_secret: this._config.clientSecret,\n },\n });\n const newSession = OAuthSession.fromDto(sessionDto);\n await this._config.sessionStore.setSession(newSession);\n return newSession.accessToken;\n } catch {\n await this._config.sessionStore.setSession(null);\n return null;\n }\n }\n\n async logout(): Promise<void> {\n const session = await this._config.sessionStore.getSession();\n if (session != null) {\n const tokenToRevoke = session.accessToken.value;\n try {\n await this.api.send({\n method: 'POST',\n url: `/oauth/revoke`,\n body: {\n token: tokenToRevoke,\n client_id: this._config.clientId,\n client_secret: this._config.clientSecret,\n },\n });\n } catch (err) {\n if (err instanceof HttpError) {\n if (this.strict) {\n throw err;\n }\n } else {\n throw err;\n }\n }\n await this._config.sessionStore.setSession(null);\n }\n }\n}\n\nexport function createCoinListServer(config: ServerConfig): CoinListServer {\n return new CoinListServerImpl(config);\n}\n"],"mappings":"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","names":[]}
package/package.json ADDED
@@ -0,0 +1,122 @@
1
+ {
2
+ "name": "@coinlist-co/react",
3
+ "version": "0.0.1",
4
+ "description": "CoinList Partner SDK",
5
+ "type": "module",
6
+ "main": "./dist/client/index.cjs",
7
+ "module": "./dist/client/index.js",
8
+ "types": "./dist/client/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/client/index.d.ts",
12
+ "import": "./dist/client/index.js",
13
+ "require": "./dist/client/index.cjs"
14
+ },
15
+ "./client": {
16
+ "types": "./dist/client/index.d.ts",
17
+ "import": "./dist/client/index.js",
18
+ "require": "./dist/client/index.cjs"
19
+ },
20
+ "./client/hooks": {
21
+ "types": "./dist/client/hooks/index.d.ts",
22
+ "import": "./dist/client/hooks/index.js",
23
+ "require": "./dist/client/hooks/index.cjs"
24
+ },
25
+ "./client/components": {
26
+ "types": "./dist/client/components/index.d.ts",
27
+ "import": "./dist/client/components/index.js",
28
+ "require": "./dist/client/components/index.cjs"
29
+ },
30
+ "./client/core": {
31
+ "types": "./dist/client/core/index.d.ts",
32
+ "import": "./dist/client/core/index.js",
33
+ "require": "./dist/client/core/index.cjs"
34
+ },
35
+ "./server": {
36
+ "types": "./dist/server/index.d.ts",
37
+ "import": "./dist/server/index.js",
38
+ "require": "./dist/server/index.cjs"
39
+ },
40
+ "./styles.css": "./dist/client/styles.css"
41
+ },
42
+ "files": [
43
+ "dist",
44
+ "README.MD"
45
+ ],
46
+ "sideEffects": [
47
+ "**/*.css"
48
+ ],
49
+ "peerDependencies": {
50
+ "react": ">=18.0.0",
51
+ "react-dom": ">=18.0.0"
52
+ },
53
+ "devDependencies": {
54
+ "@biomejs/biome": "^2.4.4",
55
+ "@ivy-apps/deslop": "^0.4.10",
56
+ "@storybook/addon-docs": "^10.2.15",
57
+ "@storybook/addon-themes": "^10.2.15",
58
+ "@storybook/react": "^10.2.15",
59
+ "@storybook/react-vite": "^10.2.15",
60
+ "@tailwindcss/cli": "^4.2.1",
61
+ "@tailwindcss/vite": "^4.1.13",
62
+ "@testing-library/dom": "^10.4.0",
63
+ "@testing-library/react": "^16.3.2",
64
+ "@types/node": "^25.3.3",
65
+ "@types/react": "^19.2.14",
66
+ "@types/react-dom": "^19.2.3",
67
+ "@vitest/browser": "^4.0.18",
68
+ "@vitest/browser-playwright": "^4.0.18",
69
+ "@vitest/coverage-v8": "^4.0.18",
70
+ "jsdom": "^25.0.1",
71
+ "msw": "^2.12.10",
72
+ "playwright": "^1.58.2",
73
+ "react": "^19.0.0",
74
+ "react-dom": "^19.0.0",
75
+ "storybook": "^10.2.15",
76
+ "tailwindcss": "^4.1.13",
77
+ "tslib": "^2.8.1",
78
+ "tsup": "^8.5.1",
79
+ "typescript": "^5.9.3",
80
+ "vite": "^6.0.0",
81
+ "vitest": "^4.0.18"
82
+ },
83
+ "scripts": {
84
+ "build": "npm run build:css && npm run build:js",
85
+ "build:css": "node ./scripts/build-css.mjs",
86
+ "build:js": "tsup && node ./scripts/copy-css.mjs",
87
+ "clean:tarballs": "rm -f ./coinlist-react-*.tgz ./coinlist-co-react-*.tgz",
88
+ "pack": "npm run clean:tarballs && npm run build && npm pack",
89
+ "dev": "tsup --watch",
90
+ "test": "vitest run",
91
+ "test:ci": "vitest run --coverage",
92
+ "test:e2e": "E2E=1 vitest run -c vitest.e2e.config.ts",
93
+ "test:e2e:browser": "vitest run -c vitest.e2e.browser.config.ts",
94
+ "test:watch": "vitest",
95
+ "storybook": "storybook dev -p 6006",
96
+ "storybook:build": "storybook build",
97
+ "typecheck": "tsc --noEmit",
98
+ "biome:check": "biome check .",
99
+ "lint:fix": "biome check . --write --unsafe",
100
+ "deslop": "deslop --check",
101
+ "deslop:fix": "deslop && npm run lint:fix",
102
+ "check": "npm run typecheck && npm run biome:check && npm run deslop && npm run build && npm run storybook:build && npm run test && npm run test:e2e && npm run test:e2e:browser"
103
+ },
104
+ "repository": {
105
+ "type": "git",
106
+ "url": "git+https://github.com/coinlist/coinlist-frontend-sdk.git"
107
+ },
108
+ "keywords": [
109
+ "coinlist",
110
+ "sdk",
111
+ "react",
112
+ "typescript"
113
+ ],
114
+ "author": "",
115
+ "license": "ISC",
116
+ "homepage": "https://docs.coinlist.co/",
117
+ "dependencies": {
118
+ "class-variance-authority": "^0.7.1",
119
+ "clsx": "^2.1.1",
120
+ "lucide-react": "^0.577.0"
121
+ }
122
+ }