@vpdev2/metakyc 1.0.48 → 1.0.51

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.
package/README.md CHANGED
@@ -13,6 +13,7 @@ A comprehensive React SDK for MetaKYC due diligence workflows with configurable
13
13
  - ✅ **Dynamic Form Validation** - Automatic zod schema generation from API rules
14
14
  - ✅ **Identity Provider Integration** - Sumsub, Onfido, and SardinAI support
15
15
  - ✅ **TypeScript** - Full type safety with types generated from C# DTOs
16
+ - ✅ **Session Token Auth** - Server-side token creation with optional `externalRefId` scoping guard
16
17
  - ✅ **Dark Mode** - Built-in dark mode support
17
18
 
18
19
  ## Installation
@@ -27,20 +28,53 @@ pnpm add @metakyc/sdk
27
28
 
28
29
  ## Quick Start
29
30
 
30
- ### 1. Wrap your app with MetaKYCProvider
31
+ ### Step 1 Server: create a session token
32
+
33
+ Create a short-lived session token on your backend. The API key and secret never leave your server.
34
+
35
+ ```typescript
36
+ // ── Server-side (Next.js API route, Express, etc.) ──
37
+ import { MetaKYCSession } from '@vpdev2/metakyc';
38
+
39
+ export async function POST() {
40
+ const { accessToken, expiresInSeconds } = await MetaKYCSession.createToken({
41
+ baseUrl: 'https://api.example.com',
42
+ clientId: 'your-client-id', // or tenantId: 1
43
+ apiKey: process.env.METAKYC_API_KEY!,
44
+ secretKey: process.env.METAKYC_SECRET_KEY!,
45
+ externalRefId: 'USER-12345', // optional — scopes the token to this user
46
+ });
47
+ return Response.json({ accessToken, expiresInSeconds });
48
+ }
49
+ ```
50
+
51
+ | Parameter | Type | Required | Description |
52
+ |---|---|---|---|
53
+ | `baseUrl` | `string` | Yes | MetaKYC API base URL |
54
+ | `apiKey` | `string` | Yes | Your tenant API key |
55
+ | `secretKey` | `string` | Yes | Your tenant secret key |
56
+ | `tenantId` | `number` | One of | Numeric tenant ID (provide this **or** `clientId`) |
57
+ | `clientId` | `string` | One of | String client ID (provide this **or** `tenantId`) |
58
+ | `externalRefId` | `string` | No | When set, the returned token is **scoped**: all API calls made with it can only create or access applicants matching this `externalRefId`. Tokens created without it remain unrestricted (backward-compatible). |
59
+
60
+ ### Step 2 — Client: initialize the SDK
61
+
62
+ Pass the token to the frontend SDK via `getAccessToken`:
31
63
 
32
64
  ```tsx
33
- import { MetaKYCProvider } from '@metakyc/sdk';
34
- import '@metakyc/sdk/styles';
65
+ import { MetaKYCProvider } from '@vpdev2/metakyc';
35
66
 
36
67
  function App() {
37
68
  return (
38
69
  <MetaKYCProvider
39
70
  config={{
40
- apiKey: process.env.METAKYC_API_KEY,
41
- tenantId: parseInt(process.env.TENANT_ID),
42
- baseUrl: process.env.METAKYC_BASE_URL,
71
+ getAccessToken: () => fetchSessionToken(), // returns the accessToken string
72
+ clientId: 'your-client-id',
73
+ baseUrl: 'https://api.example.com',
43
74
  endpoints: { pattern: 'host-controller' },
75
+ applicantForm: {
76
+ externalRefId: 'USER-12345',
77
+ },
44
78
  // Optional: Configure identity providers (e.g., SardinAI)
45
79
  identityProviders: {
46
80
  sardinai: process.env.SARDINAI_CLIENT_ID ? {
@@ -59,7 +93,9 @@ function App() {
59
93
  }
60
94
  ```
61
95
 
62
- ### 2. Use the complete workflow component
96
+ > **Tip:** You can also pass `apiKey` directly instead of `getAccessToken` for quick testing, but session tokens are recommended for production since they keep your secret key on the server.
97
+
98
+ ### Step 3 — Use the workflow component
63
99
 
64
100
  ```tsx
65
101
  import { KycWorkflow } from '@metakyc/sdk';
@@ -75,7 +111,7 @@ function KYCPage() {
75
111
  }
76
112
  ```
77
113
 
78
- ### 3. Or build custom UI with hooks
114
+ ### Step 4 — Or build custom UI with hooks
79
115
 
80
116
  ```tsx
81
117
  import { useKycWorkflow, useQuestionnaire } from '@metakyc/sdk';
@@ -133,6 +133,12 @@ export interface MetaKYCClientConfig {
133
133
  locale?: string;
134
134
  /** Identity provider configurations */
135
135
  identityProviders?: IdentityProviderConfigs;
136
+ /**
137
+ * Existing applicant ID to continue a previous KYC session.
138
+ * When provided, the SDK skips applicant creation and goes straight to the workflow.
139
+ * When omitted or null, the SDK starts with the applicant creation form.
140
+ */
141
+ applicantId?: number;
136
142
  /** Applicant form configuration */
137
143
  applicantForm?: ApplicantFormConfig;
138
144
  /** Theme configuration (optional - will fetch from backend if not provided) */
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/client/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/client/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,MAAM,eAAe,GAAG,iBAAiB,GAAG,qBAAqB,GAAG,QAAQ,CAAC;AAEnF;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,eAAe,CAAC;IACzB,WAAW,CAAC,EAAE,mBAAmB,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,SAAS,GAAG,YAAY,CAAC;IACtC,MAAM,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IACnC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,+EAA+E;IAC/E,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB,+DAA+D;IAC/D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2EAA2E;IAC3E,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,EAAE,sBAAsB,CAAC;IAClC,MAAM,CAAC,EAAE,oBAAoB,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAC1B,WAAW,GACX,UAAU,GACV,OAAO,GACP,OAAO,GACP,aAAa,GACb,aAAa,GACb,mBAAmB,GACnB,QAAQ,GACR,cAAc,GACd,KAAK,GACL,MAAM,GACN,SAAS,GACT,aAAa,GACb,kBAAkB,GAClB,iBAAiB,GACjB,YAAY,GACZ,cAAc,GACd,gBAAgB,GAChB,YAAY,GACZ,gBAAgB,GAChB,YAAY,GACZ,WAAW,GACX,eAAe,CAAC;AAEpB;;GAEG;AACH,MAAM,MAAM,yBAAyB,GACjC,aAAa,GACb,oBAAoB,GACpB,OAAO,GACP,OAAO,GACP,kBAAkB,GAClB,cAAc,GACd,gBAAgB,GAChB,eAAe,GACf,OAAO,GACP,sBAAsB,GACtB,SAAS,GACT,eAAe,GACf,QAAQ,GACR,MAAM,GACN,OAAO,GACP,YAAY,GACZ,gBAAgB,GAChB,KAAK,GACL,cAAc,GACd,eAAe,CAAC;AAEpB;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,aAAa,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;IAEzC,iFAAiF;IACjF,aAAa,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAErC,4FAA4F;IAC5F,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,8EAA8E;IAC9E,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,sFAAsF;IACtF,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEtC;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,GAAG,aAAa,CAAC;IAEzC;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACxC;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,8EAA8E;IAC9E,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,gEAAgE;IAChE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,sFAAsF;IACtF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAC;IAEhB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAEjD,6BAA6B;IAC7B,SAAS,CAAC,EAAE,cAAc,CAAC;IAE3B,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,gEAAgE;IAChE,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,2CAA2C;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,uCAAuC;IACvC,iBAAiB,CAAC,EAAE,uBAAuB,CAAC;IAE5C;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,mCAAmC;IACnC,aAAa,CAAC,EAAE,mBAAmB,CAAC;IAEpC,+EAA+E;IAC/E,KAAK,CAAC,EAAE,GAAG,CAAC;IAEZ,4EAA4E;IAC5E,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,OAAO,CAAC,mBAAmB,CAOtD,CAAC"}
@@ -6,6 +6,12 @@ export interface CreateSessionTokenParams {
6
6
  tenantId?: number;
7
7
  /** String client ID (non-ABP projects). Provide this OR tenantId. */
8
8
  clientId?: string;
9
+ /**
10
+ * Optional external reference ID to bind the session token to a specific user.
11
+ * When set, the server enforces that all API calls made with this token
12
+ * can only create/access applicants matching this externalRefId.
13
+ */
14
+ externalRefId?: string;
9
15
  }
10
16
  export interface SessionTokenResult {
11
17
  accessToken: string;
@@ -1 +1 @@
1
- {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/client/session.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;GAOG;AACH,qBAAa,cAAc;WACZ,WAAW,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,kBAAkB,CAAC;CA4BxF"}
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/client/session.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;GAOG;AACH,qBAAa,cAAc;WACZ,WAAW,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,kBAAkB,CAAC;CA+BxF"}
@@ -2,11 +2,11 @@ import { ProgressApplicantResult, ApplicantProgressStatus } from '../types';
2
2
  import { WorkflowOrchestrator } from '../state';
3
3
 
4
4
  /**
5
- * Hook to manage KYC workflow state and progression with automatic persistence
5
+ * Hook to manage KYC workflow state and progression
6
6
  */
7
7
  export declare function useKycWorkflow(applicantId?: number): {
8
8
  progress: ProgressApplicantResult | null;
9
- applicantId: number | null;
9
+ applicantId: number | undefined;
10
10
  currentStep: import('..').FlowStep | null;
11
11
  steps: import('..').StepInfo[];
12
12
  status: ApplicantProgressStatus;
@@ -1 +1 @@
1
- {"version":3,"file":"useKycWorkflow.d.ts","sourceRoot":"","sources":["../../src/hooks/useKycWorkflow.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACxB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAGhD;;GAEG;AACH,wBAAgB,cAAc,CAAC,WAAW,CAAC,EAAE,MAAM;;;;;;;;;;;;;;;;;8BAiIE,GAAG;;EAkDvD"}
1
+ {"version":3,"file":"useKycWorkflow.d.ts","sourceRoot":"","sources":["../../src/hooks/useKycWorkflow.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACxB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAGhD;;GAEG;AACH,wBAAgB,cAAc,CAAC,WAAW,CAAC,EAAE,MAAM;;;;;;;;;;;;;;;;;8BA+HE,GAAG;;EAkDvD"}