@dossier-wiki/cloud-sdk 0.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.
- package/README.md +88 -0
- package/dist/api.d.ts +529 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +22 -0
- package/dist/api.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/service.d.ts +39 -0
- package/dist/service.d.ts.map +1 -0
- package/dist/service.js +150 -0
- package/dist/service.js.map +1 -0
- package/dist/types.d.ts +101 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +49 -0
- package/dist/types.js.map +1 -0
- package/dist/webhooks.d.ts +34 -0
- package/dist/webhooks.d.ts.map +1 -0
- package/dist/webhooks.js +90 -0
- package/dist/webhooks.js.map +1 -0
- package/docs/REFERENCE.md +114 -0
- package/package.json +44 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,OAAO,CAAC;AACtB,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAEnD,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { CreateKycSessionDTO, CreateKycSessionOutputDTO, CreateScreeningRequestDto, CreateScreeningRequestResponseDto, DeleteSessionOutputDTO, DocumentProcessingDeleteResponse, DocumentProcessingExtractedSchema, DocumentProcessingInstance, DocumentProcessingStageResponse, DocumentProcessorTypeDTO, DossierSearchInput, DossierSearchResponse, InitiateDocumentProcessingInput, KycSessionFiltersDTO, KycSessionOutputDTO, ListDocumentProcessingInstancesQuery, ListDocumentProcessingInstancesResponse, PaginatedKycSessionsDTO, SanctionSearchInput, SanctionSearchResponse } from './api';
|
|
2
|
+
export declare const DOSSIERS_API_BASE_URL = "https://api.dossiers.wiki";
|
|
3
|
+
export interface DossiersAPIServiceOptions {
|
|
4
|
+
apiKey: string;
|
|
5
|
+
baseUrl?: string;
|
|
6
|
+
fetch?: typeof fetch;
|
|
7
|
+
}
|
|
8
|
+
export declare class DossiersAPIError extends Error {
|
|
9
|
+
readonly status: number;
|
|
10
|
+
readonly body: unknown;
|
|
11
|
+
constructor(status: number, message: string, body: unknown);
|
|
12
|
+
}
|
|
13
|
+
export declare class DossiersAPIService {
|
|
14
|
+
private readonly apiKey;
|
|
15
|
+
private readonly baseUrl;
|
|
16
|
+
private readonly fetchImpl;
|
|
17
|
+
constructor(options: DossiersAPIServiceOptions);
|
|
18
|
+
searchSanctions(input: SanctionSearchInput): Promise<SanctionSearchResponse>;
|
|
19
|
+
searchDossiers(input: DossierSearchInput): Promise<DossierSearchResponse>;
|
|
20
|
+
createScreeningRequest(input: CreateScreeningRequestDto): Promise<CreateScreeningRequestResponseDto>;
|
|
21
|
+
createKycSession(input: CreateKycSessionDTO): Promise<CreateKycSessionOutputDTO>;
|
|
22
|
+
listKycSessions(filters?: KycSessionFiltersDTO): Promise<PaginatedKycSessionsDTO>;
|
|
23
|
+
getKycSession(id: string): Promise<KycSessionOutputDTO>;
|
|
24
|
+
deleteKycSession(id: string): Promise<DeleteSessionOutputDTO>;
|
|
25
|
+
initiateDocumentProcessing<TSchema extends DocumentProcessingExtractedSchema = DocumentProcessingExtractedSchema>(input: InitiateDocumentProcessingInput): Promise<DocumentProcessingInstance<TSchema>>;
|
|
26
|
+
listDocumentProcessingInstances(query?: ListDocumentProcessingInstancesQuery): Promise<ListDocumentProcessingInstancesResponse>;
|
|
27
|
+
listDocumentProcessors(): Promise<DocumentProcessorTypeDTO[]>;
|
|
28
|
+
getDocumentProcessingInstance<TSchema extends DocumentProcessingExtractedSchema = DocumentProcessingExtractedSchema>(id: string): Promise<DocumentProcessingInstance<TSchema>>;
|
|
29
|
+
getDocumentProcessingStage(id: string, stageId: string): Promise<DocumentProcessingStageResponse>;
|
|
30
|
+
deleteDocumentProcessingInstance(id: string): Promise<DocumentProcessingDeleteResponse>;
|
|
31
|
+
/**
|
|
32
|
+
* Server-Sent Events stream for a document processing instance.
|
|
33
|
+
* Returns the raw `Response` so the caller can consume `response.body`
|
|
34
|
+
* (a `ReadableStream`) directly.
|
|
35
|
+
*/
|
|
36
|
+
streamDocumentProcessingEvents(id: string, init?: RequestInit): Promise<Response>;
|
|
37
|
+
private request;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,mBAAmB,EACnB,yBAAyB,EACzB,yBAAyB,EACzB,iCAAiC,EACjC,sBAAsB,EACtB,gCAAgC,EAChC,iCAAiC,EACjC,0BAA0B,EAC1B,+BAA+B,EAC/B,wBAAwB,EACxB,kBAAkB,EAClB,qBAAqB,EACrB,+BAA+B,EAC/B,oBAAoB,EACpB,mBAAmB,EACnB,oCAAoC,EACpC,uCAAuC,EACvC,uBAAuB,EACvB,mBAAmB,EACnB,sBAAsB,EACzB,MAAM,OAAO,CAAC;AAEf,eAAO,MAAM,qBAAqB,8BAA8B,CAAC;AAEjE,MAAM,WAAW,yBAAyB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CACxB;AAED,qBAAa,gBAAiB,SAAQ,KAAK;IACvC,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,SAAgB,IAAI,EAAE,OAAO,CAAC;gBAElB,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO;CAM7D;AAED,qBAAa,kBAAkB;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;gBAE7B,OAAO,EAAE,yBAAyB;IAWvC,eAAe,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAQ5E,cAAc,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAQzE,sBAAsB,CACzB,KAAK,EAAE,yBAAyB,GACjC,OAAO,CAAC,iCAAiC,CAAC;IAUtC,gBAAgB,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,yBAAyB,CAAC;IAIhF,eAAe,CAAC,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAIrF,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAIvD,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAW7D,0BAA0B,CAC7B,OAAO,SAAS,iCAAiC,GAAG,iCAAiC,EACvF,KAAK,EAAE,+BAA+B,GAAG,OAAO,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC;IAMhF,+BAA+B,CAClC,KAAK,GAAE,oCAAyC,GACjD,OAAO,CAAC,uCAAuC,CAAC;IAU5C,sBAAsB,IAAI,OAAO,CAAC,wBAAwB,EAAE,CAAC;IAI7D,6BAA6B,CAChC,OAAO,SAAS,iCAAiC,GAAG,iCAAiC,EACvF,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC;IAOpD,0BAA0B,CAC7B,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,MAAM,GAChB,OAAO,CAAC,+BAA+B,CAAC;IAOpC,gCAAgC,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,gCAAgC,CAAC;IAO9F;;;;OAIG;IACI,8BAA8B,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC;YAiB1E,OAAO;CA4CxB"}
|
package/dist/service.js
ADDED
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
export const DOSSIERS_API_BASE_URL = 'https://api.dossiers.wiki';
|
|
2
|
+
export class DossiersAPIError extends Error {
|
|
3
|
+
status;
|
|
4
|
+
body;
|
|
5
|
+
constructor(status, message, body) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.name = 'DossiersAPIError';
|
|
8
|
+
this.status = status;
|
|
9
|
+
this.body = body;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export class DossiersAPIService {
|
|
13
|
+
apiKey;
|
|
14
|
+
baseUrl;
|
|
15
|
+
fetchImpl;
|
|
16
|
+
constructor(options) {
|
|
17
|
+
if (!options.apiKey)
|
|
18
|
+
throw new Error('DossiersAPIService: apiKey is required');
|
|
19
|
+
this.apiKey = options.apiKey;
|
|
20
|
+
this.baseUrl = (options.baseUrl ?? DOSSIERS_API_BASE_URL).replace(/\/$/, '');
|
|
21
|
+
this.fetchImpl = options.fetch ?? fetch;
|
|
22
|
+
}
|
|
23
|
+
// -----------------------------------------------------------------------
|
|
24
|
+
// Sanctions
|
|
25
|
+
// -----------------------------------------------------------------------
|
|
26
|
+
searchSanctions(input) {
|
|
27
|
+
return this.request('POST', '/sanctions/search', { body: input });
|
|
28
|
+
}
|
|
29
|
+
// -----------------------------------------------------------------------
|
|
30
|
+
// High-risk dossiers
|
|
31
|
+
// -----------------------------------------------------------------------
|
|
32
|
+
searchDossiers(input) {
|
|
33
|
+
return this.request('POST', '/high-risk/search', { body: input });
|
|
34
|
+
}
|
|
35
|
+
// -----------------------------------------------------------------------
|
|
36
|
+
// Screening
|
|
37
|
+
// -----------------------------------------------------------------------
|
|
38
|
+
createScreeningRequest(input) {
|
|
39
|
+
return this.request('POST', '/screening/request', {
|
|
40
|
+
body: input,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
// -----------------------------------------------------------------------
|
|
44
|
+
// KYC sessions
|
|
45
|
+
// -----------------------------------------------------------------------
|
|
46
|
+
createKycSession(input) {
|
|
47
|
+
return this.request('POST', '/kyc-sessions', { body: input });
|
|
48
|
+
}
|
|
49
|
+
listKycSessions(filters = {}) {
|
|
50
|
+
return this.request('GET', '/kyc-sessions', { query: filters });
|
|
51
|
+
}
|
|
52
|
+
getKycSession(id) {
|
|
53
|
+
return this.request('GET', `/kyc-sessions/${encodeURIComponent(id)}`);
|
|
54
|
+
}
|
|
55
|
+
deleteKycSession(id) {
|
|
56
|
+
return this.request('DELETE', `/kyc-sessions/${encodeURIComponent(id)}`);
|
|
57
|
+
}
|
|
58
|
+
// -----------------------------------------------------------------------
|
|
59
|
+
// Document processing
|
|
60
|
+
// -----------------------------------------------------------------------
|
|
61
|
+
initiateDocumentProcessing(input) {
|
|
62
|
+
return this.request('POST', '/document-processing', {
|
|
63
|
+
body: input,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
listDocumentProcessingInstances(query = {}) {
|
|
67
|
+
return this.request('GET', '/document-processing', {
|
|
68
|
+
query,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
listDocumentProcessors() {
|
|
72
|
+
return this.request('GET', '/document-processing/processors');
|
|
73
|
+
}
|
|
74
|
+
getDocumentProcessingInstance(id) {
|
|
75
|
+
return this.request('GET', `/document-processing/${encodeURIComponent(id)}`);
|
|
76
|
+
}
|
|
77
|
+
getDocumentProcessingStage(id, stageId) {
|
|
78
|
+
return this.request('GET', `/document-processing/${encodeURIComponent(id)}/stages/${encodeURIComponent(stageId)}`);
|
|
79
|
+
}
|
|
80
|
+
deleteDocumentProcessingInstance(id) {
|
|
81
|
+
return this.request('DELETE', `/document-processing/${encodeURIComponent(id)}`);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Server-Sent Events stream for a document processing instance.
|
|
85
|
+
* Returns the raw `Response` so the caller can consume `response.body`
|
|
86
|
+
* (a `ReadableStream`) directly.
|
|
87
|
+
*/
|
|
88
|
+
streamDocumentProcessingEvents(id, init) {
|
|
89
|
+
const url = `${this.baseUrl}/document-processing/${encodeURIComponent(id)}/events`;
|
|
90
|
+
return this.fetchImpl(url, {
|
|
91
|
+
...init,
|
|
92
|
+
method: 'GET',
|
|
93
|
+
headers: {
|
|
94
|
+
...(init?.headers ?? {}),
|
|
95
|
+
Authorization: `Bearer ${this.apiKey}`,
|
|
96
|
+
Accept: 'text/event-stream',
|
|
97
|
+
},
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
// -----------------------------------------------------------------------
|
|
101
|
+
// Internal
|
|
102
|
+
// -----------------------------------------------------------------------
|
|
103
|
+
async request(method, path, opts = {}) {
|
|
104
|
+
const url = new URL(`${this.baseUrl}${path}`);
|
|
105
|
+
if (opts.query) {
|
|
106
|
+
for (const [key, value] of Object.entries(opts.query)) {
|
|
107
|
+
if (value === undefined || value === null)
|
|
108
|
+
continue;
|
|
109
|
+
if (Array.isArray(value)) {
|
|
110
|
+
for (const v of value)
|
|
111
|
+
url.searchParams.append(key, String(v));
|
|
112
|
+
}
|
|
113
|
+
else if (typeof value === 'object') {
|
|
114
|
+
url.searchParams.append(key, JSON.stringify(value));
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
url.searchParams.append(key, String(value));
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
const headers = {
|
|
122
|
+
Authorization: `Bearer ${this.apiKey}`,
|
|
123
|
+
Accept: 'application/json',
|
|
124
|
+
};
|
|
125
|
+
let body;
|
|
126
|
+
if (opts.body !== undefined) {
|
|
127
|
+
headers['Content-Type'] = 'application/json';
|
|
128
|
+
body = JSON.stringify(opts.body);
|
|
129
|
+
}
|
|
130
|
+
const response = await this.fetchImpl(url.toString(), { method, headers, body });
|
|
131
|
+
const raw = await response.text();
|
|
132
|
+
const parsed = raw.length > 0 ? safeJsonParse(raw) : undefined;
|
|
133
|
+
if (!response.ok) {
|
|
134
|
+
const message = (parsed && typeof parsed === 'object' && 'message' in parsed
|
|
135
|
+
? String(parsed.message)
|
|
136
|
+
: null) ?? `Dossiers API ${method} ${path} failed: ${response.status}`;
|
|
137
|
+
throw new DossiersAPIError(response.status, message, parsed ?? raw);
|
|
138
|
+
}
|
|
139
|
+
return parsed;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
function safeJsonParse(raw) {
|
|
143
|
+
try {
|
|
144
|
+
return JSON.parse(raw);
|
|
145
|
+
}
|
|
146
|
+
catch {
|
|
147
|
+
return raw;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAuBA,MAAM,CAAC,MAAM,qBAAqB,GAAG,2BAA2B,CAAC;AAQjE,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IACvB,MAAM,CAAS;IACf,IAAI,CAAU;IAE9B,YAAY,MAAc,EAAE,OAAe,EAAE,IAAa;QACtD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACrB,CAAC;CACJ;AAED,MAAM,OAAO,kBAAkB;IACV,MAAM,CAAS;IACf,OAAO,CAAS;IAChB,SAAS,CAAe;IAEzC,YAAY,OAAkC;QAC1C,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC/E,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,qBAAqB,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC7E,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC;IAC5C,CAAC;IAED,0EAA0E;IAC1E,YAAY;IACZ,0EAA0E;IAEnE,eAAe,CAAC,KAA0B;QAC7C,OAAO,IAAI,CAAC,OAAO,CAAyB,MAAM,EAAE,mBAAmB,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9F,CAAC;IAED,0EAA0E;IAC1E,qBAAqB;IACrB,0EAA0E;IAEnE,cAAc,CAAC,KAAyB;QAC3C,OAAO,IAAI,CAAC,OAAO,CAAwB,MAAM,EAAE,mBAAmB,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7F,CAAC;IAED,0EAA0E;IAC1E,YAAY;IACZ,0EAA0E;IAEnE,sBAAsB,CACzB,KAAgC;QAEhC,OAAO,IAAI,CAAC,OAAO,CAAoC,MAAM,EAAE,oBAAoB,EAAE;YACjF,IAAI,EAAE,KAAK;SACd,CAAC,CAAC;IACP,CAAC;IAED,0EAA0E;IAC1E,eAAe;IACf,0EAA0E;IAEnE,gBAAgB,CAAC,KAA0B;QAC9C,OAAO,IAAI,CAAC,OAAO,CAA4B,MAAM,EAAE,eAAe,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7F,CAAC;IAEM,eAAe,CAAC,UAAgC,EAAE;QACrD,OAAO,IAAI,CAAC,OAAO,CAA0B,KAAK,EAAE,eAAe,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IAC7F,CAAC;IAEM,aAAa,CAAC,EAAU;QAC3B,OAAO,IAAI,CAAC,OAAO,CAAsB,KAAK,EAAE,iBAAiB,kBAAkB,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC/F,CAAC;IAEM,gBAAgB,CAAC,EAAU;QAC9B,OAAO,IAAI,CAAC,OAAO,CACf,QAAQ,EACR,iBAAiB,kBAAkB,CAAC,EAAE,CAAC,EAAE,CAC5C,CAAC;IACN,CAAC;IAED,0EAA0E;IAC1E,sBAAsB;IACtB,0EAA0E;IAEnE,0BAA0B,CAE/B,KAAsC;QACpC,OAAO,IAAI,CAAC,OAAO,CAAsC,MAAM,EAAE,sBAAsB,EAAE;YACrF,IAAI,EAAE,KAAK;SACd,CAAC,CAAC;IACP,CAAC;IAEM,+BAA+B,CAClC,QAA8C,EAAE;QAEhD,OAAO,IAAI,CAAC,OAAO,CACf,KAAK,EACL,sBAAsB,EACtB;YACI,KAAK;SACR,CACJ,CAAC;IACN,CAAC;IAEM,sBAAsB;QACzB,OAAO,IAAI,CAAC,OAAO,CAA6B,KAAK,EAAE,iCAAiC,CAAC,CAAC;IAC9F,CAAC;IAEM,6BAA6B,CAElC,EAAU;QACR,OAAO,IAAI,CAAC,OAAO,CACf,KAAK,EACL,wBAAwB,kBAAkB,CAAC,EAAE,CAAC,EAAE,CACnD,CAAC;IACN,CAAC;IAEM,0BAA0B,CAC7B,EAAU,EACV,OAAe;QAEf,OAAO,IAAI,CAAC,OAAO,CACf,KAAK,EACL,wBAAwB,kBAAkB,CAAC,EAAE,CAAC,WAAW,kBAAkB,CAAC,OAAO,CAAC,EAAE,CACzF,CAAC;IACN,CAAC;IAEM,gCAAgC,CAAC,EAAU;QAC9C,OAAO,IAAI,CAAC,OAAO,CACf,QAAQ,EACR,wBAAwB,kBAAkB,CAAC,EAAE,CAAC,EAAE,CACnD,CAAC;IACN,CAAC;IAED;;;;OAIG;IACI,8BAA8B,CAAC,EAAU,EAAE,IAAkB;QAChE,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,wBAAwB,kBAAkB,CAAC,EAAE,CAAC,SAAS,CAAC;QACnF,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE;YACvB,GAAG,IAAI;YACP,MAAM,EAAE,KAAK;YACb,OAAO,EAAE;gBACL,GAAG,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC;gBACxB,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;gBACtC,MAAM,EAAE,mBAAmB;aAC9B;SACJ,CAAC,CAAC;IACP,CAAC;IAED,0EAA0E;IAC1E,WAAW;IACX,0EAA0E;IAElE,KAAK,CAAC,OAAO,CACjB,MAAiC,EACjC,IAAY,EACZ,OAAqE,EAAE;QAEvE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,CAAC,CAAC;QAC9C,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAgC,CAAC,EAAE,CAAC;gBAC/E,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;oBAAE,SAAS;gBACpD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;oBACvB,KAAK,MAAM,CAAC,IAAI,KAAK;wBAAE,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnE,CAAC;qBAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;oBACnC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;gBACxD,CAAC;qBAAM,CAAC;oBACJ,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBAChD,CAAC;YACL,CAAC;QACL,CAAC;QAED,MAAM,OAAO,GAA2B;YACpC,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;YACtC,MAAM,EAAE,kBAAkB;SAC7B,CAAC;QACF,IAAI,IAAwB,CAAC;QAC7B,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,CAAC,cAAc,CAAC,GAAG,kBAAkB,CAAC;YAC7C,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAEjF,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAClC,MAAM,MAAM,GAAY,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAExE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACf,MAAM,OAAO,GACT,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,SAAS,IAAI,MAAM;gBACxD,CAAC,CAAC,MAAM,CAAE,MAA+B,CAAC,OAAO,CAAC;gBAClD,CAAC,CAAC,IAAI,CAAC,IAAI,gBAAgB,MAAM,IAAI,IAAI,YAAY,QAAQ,CAAC,MAAM,EAAE,CAAC;YAC/E,MAAM,IAAI,gBAAgB,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,GAAG,CAAC,CAAC;QACxE,CAAC;QAED,OAAO,MAAW,CAAC;IACvB,CAAC;CACJ;AAED,SAAS,aAAa,CAAC,GAAW;IAC9B,IAAI,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,GAAG,CAAC;IACf,CAAC;AACL,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
export declare enum DossiersWebhookEventTypes {
|
|
2
|
+
DOCUMENT_VERIFICATION_INSTANCE_CREATED = "documentVerification.instance.created",
|
|
3
|
+
DOCUMENT_VERIFICATION_INSTANCE_UPDATED = "documentVerification.instance.updated",
|
|
4
|
+
DOCUMENT_VERIFICATION_INSTANCE_COMPLETED = "documentVerification.instance.completed",
|
|
5
|
+
DOCUMENT_VERIFICATION_INSTANCE_DELETED = "documentVerification.instance.deleted",
|
|
6
|
+
AML_SCREENING_REQUEST_CREATED = "amlScreening.screeningRequest.created",
|
|
7
|
+
AML_SCREENING_REQUEST_COMPLETED = "amlScreening.screeningRequest.completed",
|
|
8
|
+
AML_SCREENING_ALERT_TRIGGERED = "amlScreening.screeningAlert.triggered",
|
|
9
|
+
AML_SCREENING_ALERT_STATUS_CHANGED = "amlScreening.screeningAlert.statusChanged",
|
|
10
|
+
AML_SCREENING_ALERT_COMMENT_ADDED = "amlScreening.screeningAlert.commentAdded",
|
|
11
|
+
AML_SCREENING_ALERT_COMMENT_DELETED = "amlScreening.screeningAlert.commentDeleted",
|
|
12
|
+
AML_SCREENING_ALERT_DELETED = "amlScreening.screeningAlert.deleted",
|
|
13
|
+
SYSTEM_TEST_EVENT = "system.testEvent",
|
|
14
|
+
SYSTEM_PRODUCT_ACCESS_GRANTED = "system.product.accessGranted",
|
|
15
|
+
SYSTEM_PRODUCT_ACCESS_REVOKED = "system.product.accessRevoked",
|
|
16
|
+
SYSTEM_API_KEY_CREATED = "system.apiKey.created",
|
|
17
|
+
SYSTEM_API_KEY_INVALIDATED = "system.apiKey.invalidated",
|
|
18
|
+
SYSTEM_USAGE_LIMIT_REACHED = "system.usage.limitReached",
|
|
19
|
+
SYSTEM_USAGE_LIMIT_WARNING = "system.usage.limitWarning"
|
|
20
|
+
}
|
|
21
|
+
export interface DossiersWebhookContext {
|
|
22
|
+
eventId: string | null;
|
|
23
|
+
retryCount: string | null;
|
|
24
|
+
}
|
|
25
|
+
export interface DossiersWebhookEvent<TType extends DossiersWebhookEventTypes = DossiersWebhookEventTypes, TData = unknown> {
|
|
26
|
+
id: string;
|
|
27
|
+
type: TType;
|
|
28
|
+
organizationId: string;
|
|
29
|
+
createdAt: string;
|
|
30
|
+
data: TData;
|
|
31
|
+
}
|
|
32
|
+
export type DocumentVerificationInstanceStatus = 'pending' | 'running' | 'completed' | 'failed' | 'error';
|
|
33
|
+
export type DocumentVerificationStageStatus = 'pending' | 'running' | 'success' | 'failed';
|
|
34
|
+
export interface DocumentVerificationStageProgress {
|
|
35
|
+
stageId: string;
|
|
36
|
+
label: string;
|
|
37
|
+
status: DocumentVerificationStageStatus;
|
|
38
|
+
}
|
|
39
|
+
export interface DocumentVerificationInstanceCreatedData {
|
|
40
|
+
processorId: string;
|
|
41
|
+
documentProcessorInstanceId: string;
|
|
42
|
+
}
|
|
43
|
+
export interface DocumentVerificationInstanceUpdatedData {
|
|
44
|
+
processorId: string;
|
|
45
|
+
documentProcessorInstanceId: string;
|
|
46
|
+
status: DocumentVerificationInstanceStatus;
|
|
47
|
+
statusLabel: string;
|
|
48
|
+
stageProgress: DocumentVerificationStageProgress[];
|
|
49
|
+
error: string | null;
|
|
50
|
+
}
|
|
51
|
+
/** Fires when processing finishes successfully — terminal variant of the updated event. */
|
|
52
|
+
export interface DocumentVerificationInstanceCompletedData {
|
|
53
|
+
processorId: string;
|
|
54
|
+
documentProcessorInstanceId: string;
|
|
55
|
+
status: DocumentVerificationInstanceStatus;
|
|
56
|
+
statusLabel: string;
|
|
57
|
+
stageProgress: DocumentVerificationStageProgress[];
|
|
58
|
+
error: string | null;
|
|
59
|
+
}
|
|
60
|
+
export interface DocumentVerificationInstanceDeletedData {
|
|
61
|
+
deletedDocumentProcessorInstanceId: string;
|
|
62
|
+
}
|
|
63
|
+
export type AmlScreeningRequestCreatedData = Record<string, unknown>;
|
|
64
|
+
export type AmlScreeningRequestCompletedData = Record<string, unknown>;
|
|
65
|
+
export type AmlScreeningAlertTriggeredData = Record<string, unknown>;
|
|
66
|
+
export type AmlScreeningAlertStatusChangedData = Record<string, unknown>;
|
|
67
|
+
export type AmlScreeningAlertCommentAddedData = Record<string, unknown>;
|
|
68
|
+
export type AmlScreeningAlertCommentDeletedData = Record<string, unknown>;
|
|
69
|
+
export type AmlScreeningAlertDeletedData = Record<string, unknown>;
|
|
70
|
+
export type SystemTestEventData = Record<string, unknown>;
|
|
71
|
+
export type SystemProductAccessGrantedData = Record<string, unknown>;
|
|
72
|
+
export type SystemProductAccessRevokedData = Record<string, unknown>;
|
|
73
|
+
export type SystemApiKeyCreatedData = Record<string, unknown>;
|
|
74
|
+
export type SystemApiKeyInvalidatedData = Record<string, unknown>;
|
|
75
|
+
export type SystemUsageLimitReachedData = Record<string, unknown>;
|
|
76
|
+
export type SystemUsageLimitWarningData = Record<string, unknown>;
|
|
77
|
+
export interface DossiersWebhookEventDataMap {
|
|
78
|
+
[DossiersWebhookEventTypes.DOCUMENT_VERIFICATION_INSTANCE_CREATED]: DocumentVerificationInstanceCreatedData;
|
|
79
|
+
[DossiersWebhookEventTypes.DOCUMENT_VERIFICATION_INSTANCE_UPDATED]: DocumentVerificationInstanceUpdatedData;
|
|
80
|
+
[DossiersWebhookEventTypes.DOCUMENT_VERIFICATION_INSTANCE_COMPLETED]: DocumentVerificationInstanceCompletedData;
|
|
81
|
+
[DossiersWebhookEventTypes.DOCUMENT_VERIFICATION_INSTANCE_DELETED]: DocumentVerificationInstanceDeletedData;
|
|
82
|
+
[DossiersWebhookEventTypes.AML_SCREENING_REQUEST_CREATED]: AmlScreeningRequestCreatedData;
|
|
83
|
+
[DossiersWebhookEventTypes.AML_SCREENING_REQUEST_COMPLETED]: AmlScreeningRequestCompletedData;
|
|
84
|
+
[DossiersWebhookEventTypes.AML_SCREENING_ALERT_TRIGGERED]: AmlScreeningAlertTriggeredData;
|
|
85
|
+
[DossiersWebhookEventTypes.AML_SCREENING_ALERT_STATUS_CHANGED]: AmlScreeningAlertStatusChangedData;
|
|
86
|
+
[DossiersWebhookEventTypes.AML_SCREENING_ALERT_COMMENT_ADDED]: AmlScreeningAlertCommentAddedData;
|
|
87
|
+
[DossiersWebhookEventTypes.AML_SCREENING_ALERT_COMMENT_DELETED]: AmlScreeningAlertCommentDeletedData;
|
|
88
|
+
[DossiersWebhookEventTypes.AML_SCREENING_ALERT_DELETED]: AmlScreeningAlertDeletedData;
|
|
89
|
+
[DossiersWebhookEventTypes.SYSTEM_TEST_EVENT]: SystemTestEventData;
|
|
90
|
+
[DossiersWebhookEventTypes.SYSTEM_PRODUCT_ACCESS_GRANTED]: SystemProductAccessGrantedData;
|
|
91
|
+
[DossiersWebhookEventTypes.SYSTEM_PRODUCT_ACCESS_REVOKED]: SystemProductAccessRevokedData;
|
|
92
|
+
[DossiersWebhookEventTypes.SYSTEM_API_KEY_CREATED]: SystemApiKeyCreatedData;
|
|
93
|
+
[DossiersWebhookEventTypes.SYSTEM_API_KEY_INVALIDATED]: SystemApiKeyInvalidatedData;
|
|
94
|
+
[DossiersWebhookEventTypes.SYSTEM_USAGE_LIMIT_REACHED]: SystemUsageLimitReachedData;
|
|
95
|
+
[DossiersWebhookEventTypes.SYSTEM_USAGE_LIMIT_WARNING]: SystemUsageLimitWarningData;
|
|
96
|
+
}
|
|
97
|
+
export type DossiersWebhookEventDataFor<T extends DossiersWebhookEventTypes> = DossiersWebhookEventDataMap[T];
|
|
98
|
+
export type DossiersWebhookPayload = {
|
|
99
|
+
[T in DossiersWebhookEventTypes]: DossiersWebhookEvent<T, DossiersWebhookEventDataMap[T]>;
|
|
100
|
+
}[DossiersWebhookEventTypes];
|
|
101
|
+
//# 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,49 @@
|
|
|
1
|
+
/*
|
|
2
|
+
WEBHOOK EVENTS (https://docs.dossiers.wiki/webhooks):
|
|
3
|
+
|
|
4
|
+
// document verification
|
|
5
|
+
documentVerification.instance.created A new processing instance has been created
|
|
6
|
+
documentVerification.instance.updated The instance status or result has changed
|
|
7
|
+
documentVerification.instance.completed Processing finished successfully (terminal updated)
|
|
8
|
+
documentVerification.instance.deleted The instance has been deleted
|
|
9
|
+
|
|
10
|
+
// aml screening
|
|
11
|
+
amlScreening.screeningRequest.created Screening request submitted
|
|
12
|
+
amlScreening.screeningRequest.completed Screening finished
|
|
13
|
+
amlScreening.screeningAlert.triggered High-risk match found
|
|
14
|
+
amlScreening.screeningAlert.statusChanged Alert status updated
|
|
15
|
+
amlScreening.screeningAlert.commentAdded Comment added to an alert
|
|
16
|
+
amlScreening.screeningAlert.commentDeleted Comment removed from an alert
|
|
17
|
+
amlScreening.screeningAlert.deleted Alert deleted
|
|
18
|
+
|
|
19
|
+
// system
|
|
20
|
+
system.testEvent Test event for verifying webhook connectivity
|
|
21
|
+
system.product.accessGranted Product enabled for the organization
|
|
22
|
+
system.product.accessRevoked Product disabled for the organization
|
|
23
|
+
system.apiKey.created API key created
|
|
24
|
+
system.apiKey.invalidated API key revoked
|
|
25
|
+
system.usage.limitReached Credit limit reached
|
|
26
|
+
system.usage.limitWarning Approaching credit limit
|
|
27
|
+
*/
|
|
28
|
+
export var DossiersWebhookEventTypes;
|
|
29
|
+
(function (DossiersWebhookEventTypes) {
|
|
30
|
+
DossiersWebhookEventTypes["DOCUMENT_VERIFICATION_INSTANCE_CREATED"] = "documentVerification.instance.created";
|
|
31
|
+
DossiersWebhookEventTypes["DOCUMENT_VERIFICATION_INSTANCE_UPDATED"] = "documentVerification.instance.updated";
|
|
32
|
+
DossiersWebhookEventTypes["DOCUMENT_VERIFICATION_INSTANCE_COMPLETED"] = "documentVerification.instance.completed";
|
|
33
|
+
DossiersWebhookEventTypes["DOCUMENT_VERIFICATION_INSTANCE_DELETED"] = "documentVerification.instance.deleted";
|
|
34
|
+
DossiersWebhookEventTypes["AML_SCREENING_REQUEST_CREATED"] = "amlScreening.screeningRequest.created";
|
|
35
|
+
DossiersWebhookEventTypes["AML_SCREENING_REQUEST_COMPLETED"] = "amlScreening.screeningRequest.completed";
|
|
36
|
+
DossiersWebhookEventTypes["AML_SCREENING_ALERT_TRIGGERED"] = "amlScreening.screeningAlert.triggered";
|
|
37
|
+
DossiersWebhookEventTypes["AML_SCREENING_ALERT_STATUS_CHANGED"] = "amlScreening.screeningAlert.statusChanged";
|
|
38
|
+
DossiersWebhookEventTypes["AML_SCREENING_ALERT_COMMENT_ADDED"] = "amlScreening.screeningAlert.commentAdded";
|
|
39
|
+
DossiersWebhookEventTypes["AML_SCREENING_ALERT_COMMENT_DELETED"] = "amlScreening.screeningAlert.commentDeleted";
|
|
40
|
+
DossiersWebhookEventTypes["AML_SCREENING_ALERT_DELETED"] = "amlScreening.screeningAlert.deleted";
|
|
41
|
+
DossiersWebhookEventTypes["SYSTEM_TEST_EVENT"] = "system.testEvent";
|
|
42
|
+
DossiersWebhookEventTypes["SYSTEM_PRODUCT_ACCESS_GRANTED"] = "system.product.accessGranted";
|
|
43
|
+
DossiersWebhookEventTypes["SYSTEM_PRODUCT_ACCESS_REVOKED"] = "system.product.accessRevoked";
|
|
44
|
+
DossiersWebhookEventTypes["SYSTEM_API_KEY_CREATED"] = "system.apiKey.created";
|
|
45
|
+
DossiersWebhookEventTypes["SYSTEM_API_KEY_INVALIDATED"] = "system.apiKey.invalidated";
|
|
46
|
+
DossiersWebhookEventTypes["SYSTEM_USAGE_LIMIT_REACHED"] = "system.usage.limitReached";
|
|
47
|
+
DossiersWebhookEventTypes["SYSTEM_USAGE_LIMIT_WARNING"] = "system.usage.limitWarning";
|
|
48
|
+
})(DossiersWebhookEventTypes || (DossiersWebhookEventTypes = {}));
|
|
49
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;EA0BE;AAEF,MAAM,CAAN,IAAY,yBAqBX;AArBD,WAAY,yBAAyB;IACjC,6GAAgF,CAAA;IAChF,6GAAgF,CAAA;IAChF,iHAAoF,CAAA;IACpF,6GAAgF,CAAA;IAEhF,oGAAuE,CAAA;IACvE,wGAA2E,CAAA;IAC3E,oGAAuE,CAAA;IACvE,6GAAgF,CAAA;IAChF,2GAA8E,CAAA;IAC9E,+GAAkF,CAAA;IAClF,gGAAmE,CAAA;IAEnE,mEAAsC,CAAA;IACtC,2FAA8D,CAAA;IAC9D,2FAA8D,CAAA;IAC9D,6EAAgD,CAAA;IAChD,qFAAwD,CAAA;IACxD,qFAAwD,CAAA;IACxD,qFAAwD,CAAA;AAC5D,CAAC,EArBW,yBAAyB,KAAzB,yBAAyB,QAqBpC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { DossiersWebhookContext, DossiersWebhookEvent, DossiersWebhookEventDataFor } from './types';
|
|
2
|
+
import { DossiersWebhookEventTypes } from './types';
|
|
3
|
+
export type DossiersWebhookHandler<T extends DossiersWebhookEventTypes = DossiersWebhookEventTypes> = (body: DossiersWebhookEvent<T, DossiersWebhookEventDataFor<T>>, ctx: DossiersWebhookContext) => Promise<void> | void;
|
|
4
|
+
export declare class DossiersWebhookRouter {
|
|
5
|
+
private static readonly encoder;
|
|
6
|
+
private static readonly SIGNATURE_HEADER;
|
|
7
|
+
private static readonly EVENT_ID_HEADER;
|
|
8
|
+
private static readonly EVENT_TYPE_HEADER;
|
|
9
|
+
private static readonly RETRY_COUNT_HEADER;
|
|
10
|
+
private keyPromise;
|
|
11
|
+
private handlers;
|
|
12
|
+
constructor(secret: string);
|
|
13
|
+
on<T extends DossiersWebhookEventTypes>(eventType: T, handler: DossiersWebhookHandler<T>): this;
|
|
14
|
+
/**
|
|
15
|
+
* Verify the signature and acknowledge the webhook with `200 ok` *before*
|
|
16
|
+
* the handler runs. The handler is dispatched asynchronously so a slow
|
|
17
|
+
* downstream call cannot cause Dossiers to time out the webhook and retry.
|
|
18
|
+
*
|
|
19
|
+
* Trade-off: because we ack before the handler executes, a handler that
|
|
20
|
+
* throws will NOT trigger an automatic Dossiers retry — you own retries
|
|
21
|
+
* inside the handler. Failures are logged via `console.error`.
|
|
22
|
+
*
|
|
23
|
+
* On serverless runtimes that freeze execution after the response is sent
|
|
24
|
+
* (Vercel Functions, Cloudflare Workers), pass `opts.waitUntil` so the
|
|
25
|
+
* runtime keeps the handler alive past the response.
|
|
26
|
+
*/
|
|
27
|
+
handle(req: Request, opts?: {
|
|
28
|
+
waitUntil?: (promise: Promise<unknown>) => void;
|
|
29
|
+
}): Promise<Response>;
|
|
30
|
+
private verify;
|
|
31
|
+
private verifyHmacSha256;
|
|
32
|
+
private static timingSafeEqual;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=webhooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhooks.d.ts","sourceRoot":"","sources":["../src/webhooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,sBAAsB,EACtB,oBAAoB,EACpB,2BAA2B,EAC9B,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAC;AAEpD,MAAM,MAAM,sBAAsB,CAC9B,CAAC,SAAS,yBAAyB,GAAG,yBAAyB,IAC/D,CACA,IAAI,EAAE,oBAAoB,CAAC,CAAC,EAAE,2BAA2B,CAAC,CAAC,CAAC,CAAC,EAC7D,GAAG,EAAE,sBAAsB,KAC1B,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAE1B,qBAAa,qBAAqB;IAC9B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAqB;IACpD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAyB;IACjE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAwB;IAC/D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAA0B;IACnE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAA2B;IAErE,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,QAAQ,CAGZ;gBAEQ,MAAM,EAAE,MAAM;IAUnB,EAAE,CAAC,CAAC,SAAS,yBAAyB,EACzC,SAAS,EAAE,CAAC,EACZ,OAAO,EAAE,sBAAsB,CAAC,CAAC,CAAC,GACnC,IAAI;IAKP;;;;;;;;;;;;OAYG;IACU,MAAM,CACf,GAAG,EAAE,OAAO,EACZ,IAAI,GAAE;QAAE,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,CAAA;KAAO,GAC/D,OAAO,CAAC,QAAQ,CAAC;YAgDN,MAAM;YAQN,gBAAgB;IAc9B,OAAO,CAAC,MAAM,CAAC,eAAe;CAQjC"}
|
package/dist/webhooks.js
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { DossiersWebhookEventTypes } from './types';
|
|
2
|
+
export class DossiersWebhookRouter {
|
|
3
|
+
static encoder = new TextEncoder();
|
|
4
|
+
static SIGNATURE_HEADER = 'x-webhook-signature';
|
|
5
|
+
static EVENT_ID_HEADER = 'x-webhook-event-id';
|
|
6
|
+
static EVENT_TYPE_HEADER = 'x-webhook-event-type';
|
|
7
|
+
static RETRY_COUNT_HEADER = 'x-webhook-retry-count';
|
|
8
|
+
keyPromise;
|
|
9
|
+
handlers = new Map();
|
|
10
|
+
constructor(secret) {
|
|
11
|
+
this.keyPromise = crypto.subtle.importKey('raw', DossiersWebhookRouter.encoder.encode(secret), { name: 'HMAC', hash: 'SHA-256' }, false, ['sign']);
|
|
12
|
+
}
|
|
13
|
+
on(eventType, handler) {
|
|
14
|
+
this.handlers.set(eventType, handler);
|
|
15
|
+
return this;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Verify the signature and acknowledge the webhook with `200 ok` *before*
|
|
19
|
+
* the handler runs. The handler is dispatched asynchronously so a slow
|
|
20
|
+
* downstream call cannot cause Dossiers to time out the webhook and retry.
|
|
21
|
+
*
|
|
22
|
+
* Trade-off: because we ack before the handler executes, a handler that
|
|
23
|
+
* throws will NOT trigger an automatic Dossiers retry — you own retries
|
|
24
|
+
* inside the handler. Failures are logged via `console.error`.
|
|
25
|
+
*
|
|
26
|
+
* On serverless runtimes that freeze execution after the response is sent
|
|
27
|
+
* (Vercel Functions, Cloudflare Workers), pass `opts.waitUntil` so the
|
|
28
|
+
* runtime keeps the handler alive past the response.
|
|
29
|
+
*/
|
|
30
|
+
async handle(req, opts = {}) {
|
|
31
|
+
const { valid, raw } = await this.verify(req);
|
|
32
|
+
if (!valid)
|
|
33
|
+
return new Response('Invalid signature', { status: 401 });
|
|
34
|
+
const eventId = req.headers.get(DossiersWebhookRouter.EVENT_ID_HEADER);
|
|
35
|
+
const eventType = req.headers.get(DossiersWebhookRouter.EVENT_TYPE_HEADER);
|
|
36
|
+
const retryCount = req.headers.get(DossiersWebhookRouter.RETRY_COUNT_HEADER);
|
|
37
|
+
console.log(`Event ID: ${eventId}, Event Type: ${eventType}, Retry Count: ${retryCount}`);
|
|
38
|
+
if (!eventType ||
|
|
39
|
+
!Object.values(DossiersWebhookEventTypes).includes(eventType)) {
|
|
40
|
+
console.error('Invalid event type', eventType);
|
|
41
|
+
return new Response('Invalid event type', { status: 400 });
|
|
42
|
+
}
|
|
43
|
+
const handler = this.handlers.get(eventType);
|
|
44
|
+
if (!handler)
|
|
45
|
+
return new Response('ok');
|
|
46
|
+
let body;
|
|
47
|
+
try {
|
|
48
|
+
body = JSON.parse(raw);
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
console.error('Webhook body is not valid JSON', error);
|
|
52
|
+
return new Response('Invalid body', { status: 400 });
|
|
53
|
+
}
|
|
54
|
+
const work = Promise.resolve()
|
|
55
|
+
.then(() => handler(body, { eventId, retryCount }))
|
|
56
|
+
.catch((error) => {
|
|
57
|
+
console.error(`Webhook handler for ${eventType} (event ${eventId ?? 'unknown'}) failed`, error);
|
|
58
|
+
});
|
|
59
|
+
if (opts.waitUntil)
|
|
60
|
+
opts.waitUntil(work);
|
|
61
|
+
return new Response('ok');
|
|
62
|
+
}
|
|
63
|
+
async verify(req) {
|
|
64
|
+
const raw = await req.text();
|
|
65
|
+
const signature = req.headers.get(DossiersWebhookRouter.SIGNATURE_HEADER);
|
|
66
|
+
if (!signature)
|
|
67
|
+
return { valid: false, raw };
|
|
68
|
+
const valid = await this.verifyHmacSha256(raw, signature);
|
|
69
|
+
return { valid, raw };
|
|
70
|
+
}
|
|
71
|
+
async verifyHmacSha256(payload, signature) {
|
|
72
|
+
const key = await this.keyPromise;
|
|
73
|
+
const sigBuf = await crypto.subtle.sign('HMAC', key, DossiersWebhookRouter.encoder.encode(payload));
|
|
74
|
+
const expected = Array.from(new Uint8Array(sigBuf))
|
|
75
|
+
.map((b) => b.toString(16).padStart(2, '0'))
|
|
76
|
+
.join('');
|
|
77
|
+
const provided = signature.replace(/^sha256=/, '').toLowerCase();
|
|
78
|
+
return DossiersWebhookRouter.timingSafeEqual(expected, provided);
|
|
79
|
+
}
|
|
80
|
+
static timingSafeEqual(a, b) {
|
|
81
|
+
if (a.length !== b.length)
|
|
82
|
+
return false;
|
|
83
|
+
let mismatch = 0;
|
|
84
|
+
for (let i = 0; i < a.length; i++) {
|
|
85
|
+
mismatch |= a.charCodeAt(i) ^ b.charCodeAt(i);
|
|
86
|
+
}
|
|
87
|
+
return mismatch === 0;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=webhooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../src/webhooks.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAC;AASpD,MAAM,OAAO,qBAAqB;IACtB,MAAM,CAAU,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAC5C,MAAM,CAAU,gBAAgB,GAAG,qBAAqB,CAAC;IACzD,MAAM,CAAU,eAAe,GAAG,oBAAoB,CAAC;IACvD,MAAM,CAAU,iBAAiB,GAAG,sBAAsB,CAAC;IAC3D,MAAM,CAAU,kBAAkB,GAAG,uBAAuB,CAAC;IAE7D,UAAU,CAAqB;IAC/B,QAAQ,GAAG,IAAI,GAAG,EAGvB,CAAC;IAEJ,YAAY,MAAc;QACtB,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CACrC,KAAK,EACL,qBAAqB,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAC5C,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,EACjC,KAAK,EACL,CAAC,MAAM,CAAC,CACX,CAAC;IACN,CAAC;IAEM,EAAE,CACL,SAAY,EACZ,OAAkC;QAElC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,OAA4D,CAAC,CAAC;QAC3F,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;;;;;;;;;OAYG;IACI,KAAK,CAAC,MAAM,CACf,GAAY,EACZ,OAA4D,EAAE;QAE9D,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC9C,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,QAAQ,CAAC,mBAAmB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QAEtE,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,eAAe,CAAC,CAAC;QACvE,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,CAAC;QAC3E,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,CAAC;QAE7E,OAAO,CAAC,GAAG,CAAC,aAAa,OAAO,iBAAiB,SAAS,kBAAkB,UAAU,EAAE,CAAC,CAAC;QAE1F,IACI,CAAC,SAAS;YACV,CAAE,MAAM,CAAC,MAAM,CAAC,yBAAyB,CAAc,CAAC,QAAQ,CAAC,SAAS,CAAC,EAC7E,CAAC;YACC,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,SAAS,CAAC,CAAC;YAC/C,OAAO,IAAI,QAAQ,CAAC,oBAAoB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QAC/D,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAsC,CAAC,CAAC;QAC1E,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;QAExC,IAAI,IAAa,CAAC;QAClB,IAAI,CAAC;YACD,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;YACvD,OAAO,IAAI,QAAQ,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QACzD,CAAC;QAED,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE;aACzB,IAAI,CAAC,GAAG,EAAE,CACP,OAAO,CACH,IAAwE,EACxE,EAAE,OAAO,EAAE,UAAU,EAAE,CAC1B,CACJ;aACA,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YACb,OAAO,CAAC,KAAK,CACT,uBAAuB,SAAS,WAAW,OAAO,IAAI,SAAS,UAAU,EACzE,KAAK,CACR,CAAC;QACN,CAAC,CAAC,CAAC;QAEP,IAAI,IAAI,CAAC,SAAS;YAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAEzC,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAEO,KAAK,CAAC,MAAM,CAAC,GAAY;QAC7B,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC7B,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,CAAC;QAC1E,IAAI,CAAC,SAAS;YAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;QAC7C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAC1D,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;IAC1B,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,OAAe,EAAE,SAAiB;QAC7D,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC;QAClC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CACnC,MAAM,EACN,GAAG,EACH,qBAAqB,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAChD,CAAC;QACF,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;aAC9C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;aAC3C,IAAI,CAAC,EAAE,CAAC,CAAC;QACd,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QACjE,OAAO,qBAAqB,CAAC,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACrE,CAAC;IAEO,MAAM,CAAC,eAAe,CAAC,CAAS,EAAE,CAAS;QAC/C,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QACxC,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAChC,QAAQ,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAClD,CAAC;QACD,OAAO,QAAQ,KAAK,CAAC,CAAC;IAC1B,CAAC"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# `@dossier-wiki/cloud-sdk` reference
|
|
2
|
+
|
|
3
|
+
All methods on `DossiersAPIService` return a `Promise` and throw `DossiersAPIError` on non-2xx responses.
|
|
4
|
+
|
|
5
|
+
## `DossiersAPIService`
|
|
6
|
+
|
|
7
|
+
### Construction
|
|
8
|
+
|
|
9
|
+
```ts
|
|
10
|
+
new DossiersAPIService({ apiKey, baseUrl?, fetch? })
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
| Option | Type | Default | Notes |
|
|
14
|
+
| --- | --- | --- | --- |
|
|
15
|
+
| `apiKey` | `string` | — | Required. Bearer token sent on every request. |
|
|
16
|
+
| `baseUrl` | `string` | `https://api.dossiers.wiki` | Override for self-hosted or staging. |
|
|
17
|
+
| `fetch` | `typeof fetch` | global `fetch` | Inject for testing or custom transports. |
|
|
18
|
+
|
|
19
|
+
### Sanctions
|
|
20
|
+
|
|
21
|
+
| Method | Endpoint |
|
|
22
|
+
| --- | --- |
|
|
23
|
+
| `searchSanctions(input)` | `POST /sanctions/search` |
|
|
24
|
+
|
|
25
|
+
### High-risk dossiers
|
|
26
|
+
|
|
27
|
+
| Method | Endpoint |
|
|
28
|
+
| --- | --- |
|
|
29
|
+
| `searchDossiers(input)` | `POST /high-risk/search` |
|
|
30
|
+
|
|
31
|
+
### Screening
|
|
32
|
+
|
|
33
|
+
| Method | Endpoint |
|
|
34
|
+
| --- | --- |
|
|
35
|
+
| `createScreeningRequest(input)` | `POST /screening/request` |
|
|
36
|
+
|
|
37
|
+
### KYC sessions
|
|
38
|
+
|
|
39
|
+
| Method | Endpoint |
|
|
40
|
+
| --- | --- |
|
|
41
|
+
| `createKycSession(input)` | `POST /kyc-sessions` |
|
|
42
|
+
| `listKycSessions(filters?)` | `GET /kyc-sessions` |
|
|
43
|
+
| `getKycSession(id)` | `GET /kyc-sessions/{id}` |
|
|
44
|
+
| `deleteKycSession(id)` | `DELETE /kyc-sessions/{id}` |
|
|
45
|
+
|
|
46
|
+
### Document processing
|
|
47
|
+
|
|
48
|
+
| Method | Endpoint |
|
|
49
|
+
| --- | --- |
|
|
50
|
+
| `initiateDocumentProcessing(input)` | `POST /document-processing` |
|
|
51
|
+
| `listDocumentProcessingInstances(query?)` | `GET /document-processing` |
|
|
52
|
+
| `listDocumentProcessors()` | `GET /document-processing/processors` |
|
|
53
|
+
| `getDocumentProcessingInstance(id)` | `GET /document-processing/{id}` |
|
|
54
|
+
| `getDocumentProcessingStage(id, stageId)` | `GET /document-processing/{id}/stages/{stageId}` |
|
|
55
|
+
| `deleteDocumentProcessingInstance(id)` | `DELETE /document-processing/{id}` |
|
|
56
|
+
| `streamDocumentProcessingEvents(id, init?)` | `GET /document-processing/{id}/events` (SSE — returns raw `Response`) |
|
|
57
|
+
|
|
58
|
+
`initiateDocumentProcessing` and `getDocumentProcessingInstance` accept a generic schema parameter so you can type the extracted fields:
|
|
59
|
+
|
|
60
|
+
```ts
|
|
61
|
+
type SriLankaIdSchema = { fullName: string; nic: string; /* ... */ };
|
|
62
|
+
|
|
63
|
+
const instance = await dossiers
|
|
64
|
+
.initiateDocumentProcessing<SriLankaIdSchema>({ /* ... */ });
|
|
65
|
+
|
|
66
|
+
instance.result?.extracted.fullName; // typed
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## `DossiersWebhookRouter`
|
|
70
|
+
|
|
71
|
+
```ts
|
|
72
|
+
new DossiersWebhookRouter(secret: string)
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
| Method | Description |
|
|
76
|
+
| --- | --- |
|
|
77
|
+
| `on(eventType, handler)` | Register a handler for a `DossiersWebhookEventTypes` value. Last registration wins. Returns `this` for chaining. |
|
|
78
|
+
| `handle(req, opts?)` | Verify the HMAC signature, parse the body, **acknowledge with `200 ok` immediately**, and dispatch the handler asynchronously. Pass `opts.waitUntil` on serverless runtimes that freeze after the response (Vercel Functions, Cloudflare Workers). |
|
|
79
|
+
|
|
80
|
+
Because the response is sent before the handler runs, a thrown handler **does not** trigger an automatic Dossiers retry — failures are logged via `console.error`. If you need at-least-once semantics, persist the event inside the handler before doing the work.
|
|
81
|
+
|
|
82
|
+
### Headers consumed
|
|
83
|
+
|
|
84
|
+
| Header | Purpose |
|
|
85
|
+
| --- | --- |
|
|
86
|
+
| `x-webhook-signature` | HMAC-SHA256 of the raw body, hex-encoded. May be prefixed with `sha256=`. |
|
|
87
|
+
| `x-webhook-event-id` | Forwarded to handlers via the `ctx` argument. |
|
|
88
|
+
| `x-webhook-event-type` | Selects the handler. |
|
|
89
|
+
| `x-webhook-retry-count` | Forwarded to handlers via `ctx`. |
|
|
90
|
+
|
|
91
|
+
### Status codes
|
|
92
|
+
|
|
93
|
+
| Outcome | Status |
|
|
94
|
+
| --- | --- |
|
|
95
|
+
| Signature missing or invalid | `401` |
|
|
96
|
+
| Body is not valid JSON | `400` |
|
|
97
|
+
| Unknown event type | `400` |
|
|
98
|
+
| No handler registered | `200 ok` |
|
|
99
|
+
| Valid event (handler runs asynchronously) | `200 ok` |
|
|
100
|
+
|
|
101
|
+
### Event types
|
|
102
|
+
|
|
103
|
+
The `DossiersWebhookEventTypes` enum and the payload types are re-exported from the package root. See `types.ts` for the full list — each event has a strongly-typed `data` payload via `DossiersWebhookEventDataFor<T>`.
|
|
104
|
+
|
|
105
|
+
## Errors
|
|
106
|
+
|
|
107
|
+
```ts
|
|
108
|
+
class DossiersAPIError extends Error {
|
|
109
|
+
status: number; // HTTP status
|
|
110
|
+
body: unknown; // parsed JSON, or raw text if not JSON
|
|
111
|
+
}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Use `instanceof DossiersAPIError` to distinguish API errors from network errors (which surface as the underlying `fetch` rejection).
|