@contio/partner-sdk 1.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.
- package/README.md +105 -0
- package/dist/auth/apiKey.d.ts +13 -0
- package/dist/auth/apiKey.d.ts.map +1 -0
- package/dist/auth/apiKey.js +31 -0
- package/dist/auth/apiKey.js.map +1 -0
- package/dist/auth/oauth.d.ts +52 -0
- package/dist/auth/oauth.d.ts.map +1 -0
- package/dist/auth/oauth.js +259 -0
- package/dist/auth/oauth.js.map +1 -0
- package/dist/client/admin.d.ts +33 -0
- package/dist/client/admin.d.ts.map +1 -0
- package/dist/client/admin.js +85 -0
- package/dist/client/admin.js.map +1 -0
- package/dist/client/base.d.ts +29 -0
- package/dist/client/base.d.ts.map +1 -0
- package/dist/client/base.js +106 -0
- package/dist/client/base.js.map +1 -0
- package/dist/client/user.d.ts +21 -0
- package/dist/client/user.d.ts.map +1 -0
- package/dist/client/user.js +62 -0
- package/dist/client/user.js.map +1 -0
- package/dist/index.d.ts +49 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +89 -0
- package/dist/index.js.map +1 -0
- package/dist/models/actionItems.d.ts +39 -0
- package/dist/models/actionItems.d.ts.map +1 -0
- package/dist/models/actionItems.js +3 -0
- package/dist/models/actionItems.js.map +1 -0
- package/dist/models/auth.d.ts +37 -0
- package/dist/models/auth.d.ts.map +1 -0
- package/dist/models/auth.js +3 -0
- package/dist/models/auth.js.map +1 -0
- package/dist/models/credentials.d.ts +62 -0
- package/dist/models/credentials.d.ts.map +1 -0
- package/dist/models/credentials.js +3 -0
- package/dist/models/credentials.js.map +1 -0
- package/dist/models/index.d.ts +6 -0
- package/dist/models/index.d.ts.map +1 -0
- package/dist/models/index.js +22 -0
- package/dist/models/index.js.map +1 -0
- package/dist/models/meetings.d.ts +42 -0
- package/dist/models/meetings.d.ts.map +1 -0
- package/dist/models/meetings.js +3 -0
- package/dist/models/meetings.js.map +1 -0
- package/dist/models/workflows.d.ts +117 -0
- package/dist/models/workflows.d.ts.map +1 -0
- package/dist/models/workflows.js +3 -0
- package/dist/models/workflows.js.map +1 -0
- package/dist/webhooks/index.d.ts +4 -0
- package/dist/webhooks/index.d.ts.map +1 -0
- package/dist/webhooks/index.js +25 -0
- package/dist/webhooks/index.js.map +1 -0
- package/dist/webhooks/types.d.ts +51 -0
- package/dist/webhooks/types.d.ts.map +1 -0
- package/dist/webhooks/types.js +8 -0
- package/dist/webhooks/types.js.map +1 -0
- package/dist/webhooks/verifier.d.ts +12 -0
- package/dist/webhooks/verifier.d.ts.map +1 -0
- package/dist/webhooks/verifier.js +101 -0
- package/dist/webhooks/verifier.js.map +1 -0
- package/package.json +45 -0
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
export interface PhraseMatchConfig {
|
|
2
|
+
phrases: string[];
|
|
3
|
+
}
|
|
4
|
+
export interface WorkflowAction {
|
|
5
|
+
type: string;
|
|
6
|
+
config?: Record<string, any>;
|
|
7
|
+
}
|
|
8
|
+
export interface PhraseMatchAction {
|
|
9
|
+
type: 'phrase_match';
|
|
10
|
+
config: PhraseMatchConfig;
|
|
11
|
+
}
|
|
12
|
+
export interface Workflow {
|
|
13
|
+
id: string;
|
|
14
|
+
partner_app_id: string;
|
|
15
|
+
name: string;
|
|
16
|
+
description?: string;
|
|
17
|
+
trigger_type: string;
|
|
18
|
+
actions: WorkflowAction[];
|
|
19
|
+
status: WorkflowStatus;
|
|
20
|
+
created_at: string;
|
|
21
|
+
updated_at: string;
|
|
22
|
+
}
|
|
23
|
+
export type WorkflowStatus = 'active' | 'inactive';
|
|
24
|
+
export interface CreateWorkflowRequest {
|
|
25
|
+
name: string;
|
|
26
|
+
description?: string;
|
|
27
|
+
trigger_type: string;
|
|
28
|
+
actions: WorkflowAction[];
|
|
29
|
+
}
|
|
30
|
+
export interface UpdateWorkflowRequest {
|
|
31
|
+
name?: string;
|
|
32
|
+
description?: string;
|
|
33
|
+
trigger_type?: string;
|
|
34
|
+
actions?: WorkflowAction[];
|
|
35
|
+
status?: WorkflowStatus;
|
|
36
|
+
is_active?: boolean;
|
|
37
|
+
}
|
|
38
|
+
export interface WorkflowListParams {
|
|
39
|
+
limit?: number;
|
|
40
|
+
offset?: number;
|
|
41
|
+
}
|
|
42
|
+
export interface WorkflowListResponse {
|
|
43
|
+
items: Workflow[];
|
|
44
|
+
total: number;
|
|
45
|
+
limit: number;
|
|
46
|
+
offset: number;
|
|
47
|
+
}
|
|
48
|
+
export interface WebhookDelivery {
|
|
49
|
+
id: string;
|
|
50
|
+
partner_app_id: string;
|
|
51
|
+
event_type: string;
|
|
52
|
+
event_id: string;
|
|
53
|
+
delivery_status: string;
|
|
54
|
+
http_status_code?: number;
|
|
55
|
+
retry_count: number;
|
|
56
|
+
next_retry_at?: string;
|
|
57
|
+
delivered_at?: string;
|
|
58
|
+
error_message: string;
|
|
59
|
+
created_at: string;
|
|
60
|
+
}
|
|
61
|
+
export interface WebhookDeliveryListParams {
|
|
62
|
+
limit?: number;
|
|
63
|
+
offset?: number;
|
|
64
|
+
status?: string;
|
|
65
|
+
}
|
|
66
|
+
export interface WebhookDeliveryListResponse {
|
|
67
|
+
items: WebhookDelivery[];
|
|
68
|
+
total: number;
|
|
69
|
+
limit: number;
|
|
70
|
+
offset: number;
|
|
71
|
+
}
|
|
72
|
+
export interface PartnerApp {
|
|
73
|
+
id: string;
|
|
74
|
+
name: string;
|
|
75
|
+
description?: string;
|
|
76
|
+
company_name: string;
|
|
77
|
+
client_id: string;
|
|
78
|
+
primary_contact_email: string;
|
|
79
|
+
webhook_url?: string;
|
|
80
|
+
status: string;
|
|
81
|
+
created_at: string;
|
|
82
|
+
updated_at: string;
|
|
83
|
+
}
|
|
84
|
+
export interface UpdatePartnerAppRequest {
|
|
85
|
+
name?: string;
|
|
86
|
+
description?: string;
|
|
87
|
+
webhook_url?: string | null;
|
|
88
|
+
}
|
|
89
|
+
export interface UpdatePartnerAppStatusRequest {
|
|
90
|
+
status: 'active' | 'suspended' | 'inactive';
|
|
91
|
+
}
|
|
92
|
+
export interface UserConnection {
|
|
93
|
+
id: string;
|
|
94
|
+
user_id: string;
|
|
95
|
+
user_name?: string;
|
|
96
|
+
user_email?: string;
|
|
97
|
+
oauth_scopes: string[];
|
|
98
|
+
oauth_expires_at?: string;
|
|
99
|
+
feature_activated_at?: string;
|
|
100
|
+
last_used_at?: string;
|
|
101
|
+
status: string;
|
|
102
|
+
created_at: string;
|
|
103
|
+
updated_at: string;
|
|
104
|
+
}
|
|
105
|
+
export interface UserConnectionListParams {
|
|
106
|
+
limit?: number;
|
|
107
|
+
offset?: number;
|
|
108
|
+
user_id?: string;
|
|
109
|
+
status?: 'active' | 'revoked' | 'expired';
|
|
110
|
+
}
|
|
111
|
+
export interface UserConnectionListResponse {
|
|
112
|
+
items: UserConnection[];
|
|
113
|
+
total: number;
|
|
114
|
+
limit: number;
|
|
115
|
+
offset: number;
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=workflows.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflows.d.ts","sourceRoot":"","sources":["../../src/models/workflows.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflows.js","sourceRoot":"","sources":["../../src/models/workflows.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/webhooks/index.ts"],"names":[],"mappings":"AAqCA,cAAc,SAAS,CAAC;AAGxB,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAGnF,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.WEBHOOK_EVENTS = exports.parseWebhook = exports.verifyWebhookSignature = exports.WebhookVerifier = void 0;
|
|
18
|
+
__exportStar(require("./types"), exports);
|
|
19
|
+
var verifier_1 = require("./verifier");
|
|
20
|
+
Object.defineProperty(exports, "WebhookVerifier", { enumerable: true, get: function () { return verifier_1.WebhookVerifier; } });
|
|
21
|
+
Object.defineProperty(exports, "verifyWebhookSignature", { enumerable: true, get: function () { return verifier_1.verifyWebhookSignature; } });
|
|
22
|
+
Object.defineProperty(exports, "parseWebhook", { enumerable: true, get: function () { return verifier_1.parseWebhook; } });
|
|
23
|
+
var types_1 = require("./types");
|
|
24
|
+
Object.defineProperty(exports, "WEBHOOK_EVENTS", { enumerable: true, get: function () { return types_1.WEBHOOK_EVENTS; } });
|
|
25
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/webhooks/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAqCA,0CAAwB;AAGxB,uCAAmF;AAA1E,2GAAA,eAAe,OAAA;AAAE,kHAAA,sBAAsB,OAAA;AAAE,wGAAA,YAAY,OAAA;AAG9D,iCAAyC;AAAhC,uGAAA,cAAc,OAAA"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
export interface WebhookPayload<T = any> {
|
|
2
|
+
event_type: string;
|
|
3
|
+
event_id: string;
|
|
4
|
+
timestamp: string;
|
|
5
|
+
partner_app_id: string;
|
|
6
|
+
data: T;
|
|
7
|
+
}
|
|
8
|
+
export interface WorkflowAssignmentData {
|
|
9
|
+
assignment_id: string;
|
|
10
|
+
action_item_id: string;
|
|
11
|
+
workflow_id: string;
|
|
12
|
+
workflow_name: string;
|
|
13
|
+
confidence_score?: number;
|
|
14
|
+
workflow_data_payload: Record<string, any>;
|
|
15
|
+
status: string;
|
|
16
|
+
created_at: string;
|
|
17
|
+
}
|
|
18
|
+
export interface ActionItemUpdateData {
|
|
19
|
+
action_item_id: string;
|
|
20
|
+
meeting_id: string;
|
|
21
|
+
description: string;
|
|
22
|
+
is_completed: boolean;
|
|
23
|
+
due_date?: string;
|
|
24
|
+
completed_at?: string;
|
|
25
|
+
assigned_to_user_id?: string;
|
|
26
|
+
has_partner_assignment: boolean;
|
|
27
|
+
partner_context: Record<string, any>;
|
|
28
|
+
updated_at: string;
|
|
29
|
+
}
|
|
30
|
+
export interface WorkflowAssignmentCreatedWebhook extends WebhookPayload<{
|
|
31
|
+
assignment: WorkflowAssignmentData;
|
|
32
|
+
}> {
|
|
33
|
+
event_type: 'workflow.assignment.created';
|
|
34
|
+
}
|
|
35
|
+
export interface ActionItemUpdatedWebhook extends WebhookPayload<{
|
|
36
|
+
action_item: ActionItemUpdateData;
|
|
37
|
+
}> {
|
|
38
|
+
event_type: 'action_item.updated';
|
|
39
|
+
}
|
|
40
|
+
export type ContioWebhookEvent = WorkflowAssignmentCreatedWebhook | ActionItemUpdatedWebhook;
|
|
41
|
+
export declare const WEBHOOK_EVENTS: {
|
|
42
|
+
readonly WORKFLOW_ASSIGNMENT_CREATED: "workflow.assignment.created";
|
|
43
|
+
readonly ACTION_ITEM_UPDATED: "action_item.updated";
|
|
44
|
+
};
|
|
45
|
+
export type WebhookEventType = typeof WEBHOOK_EVENTS[keyof typeof WEBHOOK_EVENTS];
|
|
46
|
+
export interface WebhookVerificationResult {
|
|
47
|
+
isValid: boolean;
|
|
48
|
+
error?: string;
|
|
49
|
+
}
|
|
50
|
+
export type WebhookHandler<T extends ContioWebhookEvent = ContioWebhookEvent> = (event: T) => Promise<void> | void;
|
|
51
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/webhooks/types.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,cAAc,CAAC,CAAC,GAAG,GAAG;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,CAAC,CAAC;CACT;AAGD,MAAM,WAAW,sBAAsB;IACrC,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAGD,MAAM,WAAW,oBAAoB;IACnC,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,sBAAsB,EAAE,OAAO,CAAC;IAChC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACrC,UAAU,EAAE,MAAM,CAAC;CACpB;AAGD,MAAM,WAAW,gCAAiC,SAAQ,cAAc,CAAC;IAAE,UAAU,EAAE,sBAAsB,CAAA;CAAE,CAAC;IAC9G,UAAU,EAAE,6BAA6B,CAAC;CAC3C;AAED,MAAM,WAAW,wBAAyB,SAAQ,cAAc,CAAC;IAAE,WAAW,EAAE,oBAAoB,CAAA;CAAE,CAAC;IACrG,UAAU,EAAE,qBAAqB,CAAC;CACnC;AAGD,MAAM,MAAM,kBAAkB,GAC1B,gCAAgC,GAChC,wBAAwB,CAAC;AAG7B,eAAO,MAAM,cAAc;;;CAGjB,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAAG,OAAO,cAAc,CAAC,MAAM,OAAO,cAAc,CAAC,CAAC;AAGlF,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAGD,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,kBAAkB,GAAG,kBAAkB,IAAI,CAC9E,KAAK,EAAE,CAAC,KACL,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WEBHOOK_EVENTS = void 0;
|
|
4
|
+
exports.WEBHOOK_EVENTS = {
|
|
5
|
+
WORKFLOW_ASSIGNMENT_CREATED: 'workflow.assignment.created',
|
|
6
|
+
ACTION_ITEM_UPDATED: 'action_item.updated',
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/webhooks/types.ts"],"names":[],"mappings":";;;AAsDa,QAAA,cAAc,GAAG;IAC5B,2BAA2B,EAAE,6BAA6B;IAC1D,mBAAmB,EAAE,qBAAqB;CAClC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
/// <reference types="node" />
|
|
3
|
+
import { WebhookVerificationResult, ContioWebhookEvent } from './types';
|
|
4
|
+
export declare class WebhookVerifier {
|
|
5
|
+
private readonly secret;
|
|
6
|
+
constructor(secret: string);
|
|
7
|
+
verifySignature(payload: string | Buffer, signature: string): WebhookVerificationResult;
|
|
8
|
+
parseWebhook(payload: string | Buffer, signature: string): ContioWebhookEvent | null;
|
|
9
|
+
}
|
|
10
|
+
export declare function verifyWebhookSignature(payload: string | Buffer, signature: string, secret: string): boolean;
|
|
11
|
+
export declare function parseWebhook(payload: string | Buffer, signature: string, secret: string): ContioWebhookEvent;
|
|
12
|
+
//# sourceMappingURL=verifier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verifier.d.ts","sourceRoot":"","sources":["../../src/webhooks/verifier.ts"],"names":[],"mappings":";;AAKA,OAAO,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAExE,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEpB,MAAM,EAAE,MAAM;IAa1B,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,yBAAyB;IAiDvF,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI;CAsBrF;AASD,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,OAAO,CAGT;AAUD,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,kBAAkB,CAOpB"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.parseWebhook = exports.verifyWebhookSignature = exports.WebhookVerifier = void 0;
|
|
27
|
+
const crypto = __importStar(require("crypto"));
|
|
28
|
+
class WebhookVerifier {
|
|
29
|
+
constructor(secret) {
|
|
30
|
+
if (!secret) {
|
|
31
|
+
throw new Error('Webhook secret is required');
|
|
32
|
+
}
|
|
33
|
+
this.secret = secret;
|
|
34
|
+
}
|
|
35
|
+
verifySignature(payload, signature) {
|
|
36
|
+
try {
|
|
37
|
+
if (!signature) {
|
|
38
|
+
return { isValid: false, error: 'Missing signature' };
|
|
39
|
+
}
|
|
40
|
+
const signatureParts = signature.split('=');
|
|
41
|
+
if (signatureParts.length !== 2 || signatureParts[0] !== 'sha256') {
|
|
42
|
+
return { isValid: false, error: 'Invalid signature format (expected "sha256=<hex>")' };
|
|
43
|
+
}
|
|
44
|
+
const cleanSignature = signatureParts[1];
|
|
45
|
+
const hmac = crypto.createHmac('sha256', this.secret);
|
|
46
|
+
if (typeof payload === 'string') {
|
|
47
|
+
hmac.update(payload, 'utf8');
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
hmac.update(payload);
|
|
51
|
+
}
|
|
52
|
+
const expectedSignature = hmac.digest('hex');
|
|
53
|
+
const signatureBuffer = Buffer.from(cleanSignature, 'hex');
|
|
54
|
+
const expectedSignatureBuffer = Buffer.from(expectedSignature, 'hex');
|
|
55
|
+
if (signatureBuffer.length !== expectedSignatureBuffer.length) {
|
|
56
|
+
return { isValid: false, error: 'Signature length mismatch' };
|
|
57
|
+
}
|
|
58
|
+
const isValid = crypto.timingSafeEqual(signatureBuffer, expectedSignatureBuffer);
|
|
59
|
+
return { isValid };
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
return {
|
|
63
|
+
isValid: false,
|
|
64
|
+
error: error instanceof Error ? error.message : 'Signature verification failed'
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
parseWebhook(payload, signature) {
|
|
69
|
+
const verification = this.verifySignature(payload, signature);
|
|
70
|
+
if (!verification.isValid) {
|
|
71
|
+
throw new Error(`Webhook verification failed: ${verification.error}`);
|
|
72
|
+
}
|
|
73
|
+
try {
|
|
74
|
+
const payloadString = typeof payload === 'string' ? payload : payload.toString('utf8');
|
|
75
|
+
const event = JSON.parse(payloadString);
|
|
76
|
+
if (!event.event_type || !event.event_id || !event.timestamp || !event.partner_app_id) {
|
|
77
|
+
throw new Error('Invalid webhook payload: missing required fields');
|
|
78
|
+
}
|
|
79
|
+
return event;
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
throw new Error(`Failed to parse webhook payload: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
exports.WebhookVerifier = WebhookVerifier;
|
|
87
|
+
function verifyWebhookSignature(payload, signature, secret) {
|
|
88
|
+
const verifier = new WebhookVerifier(secret);
|
|
89
|
+
return verifier.verifySignature(payload, signature).isValid;
|
|
90
|
+
}
|
|
91
|
+
exports.verifyWebhookSignature = verifyWebhookSignature;
|
|
92
|
+
function parseWebhook(payload, signature, secret) {
|
|
93
|
+
const verifier = new WebhookVerifier(secret);
|
|
94
|
+
const event = verifier.parseWebhook(payload, signature);
|
|
95
|
+
if (!event) {
|
|
96
|
+
throw new Error('Failed to parse webhook');
|
|
97
|
+
}
|
|
98
|
+
return event;
|
|
99
|
+
}
|
|
100
|
+
exports.parseWebhook = parseWebhook;
|
|
101
|
+
//# sourceMappingURL=verifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verifier.js","sourceRoot":"","sources":["../../src/webhooks/verifier.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@contio/partner-sdk",
|
|
3
|
+
"version": "1.0.1",
|
|
4
|
+
"description": "Official SDK for Contio MeetingOS Partner API",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"build": "tsc",
|
|
9
|
+
"test": "jest",
|
|
10
|
+
"lint": "eslint src/**/*.ts",
|
|
11
|
+
"docs": "typedoc --out ../../dist/typedoc src/index.ts",
|
|
12
|
+
"prepublishOnly": "npm run build && npm run test"
|
|
13
|
+
},
|
|
14
|
+
"dependencies": {
|
|
15
|
+
"axios": "^1.12.0",
|
|
16
|
+
"qs": "^6.11.0"
|
|
17
|
+
},
|
|
18
|
+
"devDependencies": {
|
|
19
|
+
"@types/jest": "^30.0.0",
|
|
20
|
+
"@types/qs": "^6.9.7",
|
|
21
|
+
"axios-mock-adapter": "^1.22.0",
|
|
22
|
+
"ts-jest": "^29.4.1",
|
|
23
|
+
"typedoc": "^0.25.0"
|
|
24
|
+
},
|
|
25
|
+
"peerDependencies": {
|
|
26
|
+
"typescript": ">=4.5.0"
|
|
27
|
+
},
|
|
28
|
+
"files": [
|
|
29
|
+
"dist",
|
|
30
|
+
"README.md"
|
|
31
|
+
],
|
|
32
|
+
"keywords": [
|
|
33
|
+
"contio",
|
|
34
|
+
"partner",
|
|
35
|
+
"api",
|
|
36
|
+
"sdk",
|
|
37
|
+
"meetingos"
|
|
38
|
+
],
|
|
39
|
+
"author": "Contio AI",
|
|
40
|
+
"license": "Commercial",
|
|
41
|
+
"repository": {
|
|
42
|
+
"type": "git",
|
|
43
|
+
"url": "https://github.com/Contio-AI/partner-sdk"
|
|
44
|
+
}
|
|
45
|
+
}
|