instasign 1.1.0 → 1.1.3
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/CHANGELOG.md +28 -1
- package/README.md +16 -9
- package/dist/index.cjs +17 -17
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +233 -819
- package/dist/index.d.ts +233 -819
- package/dist/index.js +17 -19
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
- package/types/schema.d.ts +115 -616
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,33 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## [1.1.3] - 2026-03-01
|
|
6
|
+
- **Improved Type Precision**: Refactored resource types (Envelopes, SignRequests) to be derived directly from the OpenAPI schema using new utility types (`ResponseResult`, `RequestBody`).
|
|
7
|
+
- **Read-only Resources**: The `envelopes`, `signRequests`, and `webhooks` properties on the `Instasign` class are now `readonly`.
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
- **Swagger Enum Serialization**: Fixed an issue where string union types (like `status`) were serialized as generic objects in Swagger.
|
|
11
|
+
- **Swagger Param Enums**: Enhanced parameter extraction to correctly map cloud function parameters (like `orderBy`, `orderDirection`) to OpenAPI enums.
|
|
12
|
+
- **Swagger Nested Objects**: Increased recursion depth and refined mapping to ensure nested arrays and objects (like `signRequests` inside `envelope:list`) are fully typed.
|
|
13
|
+
- **Swagger Date Serialization**: Fixed `Date` objects being expanded into generic objects; they are now correctly mapped to `string` with `format: date-time`.
|
|
14
|
+
|
|
15
|
+
### Changed
|
|
16
|
+
- **Type Safety**: Improved internal type synchronization with compile-time schema validation against the OpenAPI specification.
|
|
17
|
+
|
|
18
|
+
## [1.1.2] - 2026-03-01
|
|
19
|
+
|
|
20
|
+
### Added
|
|
21
|
+
- **Scoped Types Package**: Rewrote the shared types infrastructure to use the scoped `@instasign/types` package, resolving naming conflicts with the main SDK.
|
|
22
|
+
- **Type Re-exports**: Shared types are now directly re-exported from the `instasign` entry point, enabling seamless IntelliSense and simpler imports (e.g., `import { WebhookEventType } from 'instasign'`).
|
|
23
|
+
|
|
24
|
+
### Fixed
|
|
25
|
+
- **Type Import Error**: Resolved the TypeScript error `Cannot import type declaration files` caused by direct `@types/instasign` imports.
|
|
26
|
+
|
|
27
|
+
## [1.1.1] - 2026-02-28
|
|
28
|
+
|
|
29
|
+
### Changed
|
|
30
|
+
- **Version Bump**: Updated version to 1.1.1 to fix publishing issues.
|
|
31
|
+
|
|
5
32
|
## [1.1.0] - 2026-02-28
|
|
6
33
|
|
|
7
34
|
### Added
|
|
@@ -9,7 +36,7 @@ All notable changes to this project will be documented in this file.
|
|
|
9
36
|
|
|
10
37
|
### Changed
|
|
11
38
|
- **License**: Changed package license from ISC to Apache-2.0.
|
|
12
|
-
- **Dependency Refactoring**: Moved shared types to a dedicated `@instasign
|
|
39
|
+
- **Dependency Refactoring**: Moved shared types to a dedicated `@types/instasign` package for better consistency across the project.
|
|
13
40
|
- **Type Safety**: Improved internal type synchronization with compile-time schema validation against the OpenAPI specification.
|
|
14
41
|
|
|
15
42
|
## [1.0.1] - 2026-02-27
|
package/README.md
CHANGED
|
@@ -15,7 +15,7 @@ npm install instasign
|
|
|
15
15
|
|
|
16
16
|
## Usage
|
|
17
17
|
|
|
18
|
-
The package needs to be configured with your account's API key.
|
|
18
|
+
The package needs to be configured with your account's API key. You can also provide Parse Server configuration if you are using a custom instance.
|
|
19
19
|
|
|
20
20
|
```typescript
|
|
21
21
|
import { Instasign } from 'instasign';
|
|
@@ -23,9 +23,9 @@ import { Instasign } from 'instasign';
|
|
|
23
23
|
const instasign = new Instasign({
|
|
24
24
|
apiKey: 'your_api_key',
|
|
25
25
|
restApiKey: 'your_parse_rest_api_key', // Optional
|
|
26
|
-
serverUrl: 'https://
|
|
27
|
-
appId: 'your_app_id', // Optional
|
|
28
|
-
webhookTolerance: 300 // default is 300 seconds
|
|
26
|
+
serverUrl: 'https://api.instasign.io', // Optional: Your server URL
|
|
27
|
+
appId: 'your_app_id', // Optional: Your Parse App ID
|
|
28
|
+
webhookTolerance: 300 // default is 300 seconds
|
|
29
29
|
});
|
|
30
30
|
```
|
|
31
31
|
|
|
@@ -40,8 +40,12 @@ const envelope = await instasign.envelopes.create({
|
|
|
40
40
|
description: 'Please sign the attached document',
|
|
41
41
|
});
|
|
42
42
|
|
|
43
|
-
// List envelopes
|
|
44
|
-
const envelopes = await instasign.envelopes.list(
|
|
43
|
+
// List envelopes with full type support for nested objects
|
|
44
|
+
const envelopes = await instasign.envelopes.list({
|
|
45
|
+
status: 'pending',
|
|
46
|
+
orderBy: 'createdAt',
|
|
47
|
+
orderDirection: 'desc'
|
|
48
|
+
});
|
|
45
49
|
|
|
46
50
|
// Retrieve an envelope by ID
|
|
47
51
|
const envelope = await instasign.envelopes.get('envelope_id_here');
|
|
@@ -95,8 +99,8 @@ const endpointSecret = 'secret_key';
|
|
|
95
99
|
|
|
96
100
|
try {
|
|
97
101
|
const event = instasign.webhooks.constructEvent(payload, sig, endpointSecret);
|
|
98
|
-
// Handle the event
|
|
99
|
-
console.log(event.type);
|
|
102
|
+
// Handle the event (fully typed)
|
|
103
|
+
console.log(event.type); // e.g., 'envelope.completed'
|
|
100
104
|
} catch (err) {
|
|
101
105
|
console.error(`Webhook Error: ${err.message}`);
|
|
102
106
|
res.status(400).send(`Webhook Error: ${err.message}`);
|
|
@@ -105,7 +109,10 @@ try {
|
|
|
105
109
|
|
|
106
110
|
## TypeScript Support
|
|
107
111
|
|
|
108
|
-
This library is built with TypeScript and provides industry-standard type definitions auto-generated from the Instasign OpenAPI schema. Every method in the SDK is strictly typed,
|
|
112
|
+
This library is built with TypeScript and provides industry-standard type definitions auto-generated from the Instasign OpenAPI schema. Every method in the SDK is strictly typed, including:
|
|
113
|
+
- **Enums**: Fields like `status`, `orderBy`, and `orderDirection` use string union types.
|
|
114
|
+
- **Nested Objects**: Complex structures like the `signRequests` array inside an envelope are fully typed.
|
|
115
|
+
- **Dates**: Automatic mapping of ISO date strings for `createdAt`, `updatedAt`, and `expirationDate`.
|
|
109
116
|
|
|
110
117
|
## Configuration Options
|
|
111
118
|
|
package/dist/index.cjs
CHANGED
|
@@ -36,7 +36,6 @@ __export(index_exports, {
|
|
|
36
36
|
Webhooks: () => Webhooks
|
|
37
37
|
});
|
|
38
38
|
module.exports = __toCommonJS(index_exports);
|
|
39
|
-
var import_axios = __toESM(require("axios"), 1);
|
|
40
39
|
|
|
41
40
|
// src/resources/Envelopes.ts
|
|
42
41
|
var Envelopes = class {
|
|
@@ -47,56 +46,56 @@ var Envelopes = class {
|
|
|
47
46
|
* Create a new envelope
|
|
48
47
|
*/
|
|
49
48
|
async create(params) {
|
|
50
|
-
const response = await this.client.post("/functions/
|
|
49
|
+
const response = await this.client.post("/functions/envelope:create", params);
|
|
51
50
|
return response.data.result;
|
|
52
51
|
}
|
|
53
52
|
/**
|
|
54
53
|
* List envelopes
|
|
55
54
|
*/
|
|
56
55
|
async list(params = {}) {
|
|
57
|
-
const response = await this.client.post("/functions/
|
|
56
|
+
const response = await this.client.post("/functions/envelope:list", params);
|
|
58
57
|
return response.data.result;
|
|
59
58
|
}
|
|
60
59
|
/**
|
|
61
60
|
* Retrieve a single envelope with its sign requests
|
|
62
61
|
*/
|
|
63
62
|
async get(envelopeId) {
|
|
64
|
-
const response = await this.client.post("/functions/
|
|
63
|
+
const response = await this.client.post("/functions/envelope:get", { envelopeId });
|
|
65
64
|
return response.data.result;
|
|
66
65
|
}
|
|
67
66
|
/**
|
|
68
67
|
* Complete an envelope
|
|
69
68
|
*/
|
|
70
69
|
async complete(envelopeId) {
|
|
71
|
-
const response = await this.client.post("/functions/
|
|
70
|
+
const response = await this.client.post("/functions/envelope:complete", { envelopeId });
|
|
72
71
|
return response.data.result;
|
|
73
72
|
}
|
|
74
73
|
/**
|
|
75
74
|
* Delete an envelope
|
|
76
75
|
*/
|
|
77
76
|
async delete(envelopeId) {
|
|
78
|
-
const response = await this.client.post("/functions/
|
|
77
|
+
const response = await this.client.post("/functions/envelope:delete", { envelopeId });
|
|
79
78
|
return response.data.result;
|
|
80
79
|
}
|
|
81
80
|
/**
|
|
82
81
|
* Update envelope metadata
|
|
83
82
|
*/
|
|
84
83
|
async updateMetadata(params) {
|
|
85
|
-
const response = await this.client.post("/functions/
|
|
84
|
+
const response = await this.client.post("/functions/envelope:update-metadata", params);
|
|
86
85
|
return response.data.result;
|
|
87
86
|
}
|
|
88
87
|
/**
|
|
89
88
|
* Remove a sign request from an envelope
|
|
90
89
|
*/
|
|
91
90
|
async removeSignRequest(params) {
|
|
92
|
-
const response = await this.client.post("/functions/
|
|
91
|
+
const response = await this.client.post("/functions/envelope:remove-sign-request", params);
|
|
93
92
|
return response.data.result;
|
|
94
93
|
}
|
|
95
94
|
/**
|
|
96
95
|
* Add a sign request to an envelope
|
|
97
96
|
*/
|
|
98
97
|
async addSignRequest(params) {
|
|
99
|
-
const response = await this.client.post("/functions/
|
|
98
|
+
const response = await this.client.post("/functions/envelope:add-sign-request", params);
|
|
100
99
|
return response.data.result;
|
|
101
100
|
}
|
|
102
101
|
/**
|
|
@@ -118,21 +117,21 @@ var SignRequests = class {
|
|
|
118
117
|
* Create a new sign request
|
|
119
118
|
*/
|
|
120
119
|
async create(params) {
|
|
121
|
-
const response = await this.client.post("/functions/
|
|
120
|
+
const response = await this.client.post("/functions/sign-request:create", params);
|
|
122
121
|
return response.data.result;
|
|
123
122
|
}
|
|
124
123
|
/**
|
|
125
124
|
* Complete a sign request
|
|
126
125
|
*/
|
|
127
126
|
async complete(params) {
|
|
128
|
-
const response = await this.client.post("/functions/
|
|
127
|
+
const response = await this.client.post("/functions/sign-request:complete", params);
|
|
129
128
|
return response.data.result;
|
|
130
129
|
}
|
|
131
130
|
/**
|
|
132
131
|
* Get the file associated with a sign request
|
|
133
132
|
*/
|
|
134
|
-
async
|
|
135
|
-
const response = await this.client.post("/functions/
|
|
133
|
+
async get(requestId) {
|
|
134
|
+
const response = await this.client.post("/functions/sign-request:get", { requestId });
|
|
136
135
|
return response.data.result;
|
|
137
136
|
}
|
|
138
137
|
};
|
|
@@ -170,7 +169,8 @@ var Webhooks = class {
|
|
|
170
169
|
}
|
|
171
170
|
};
|
|
172
171
|
|
|
173
|
-
// src/
|
|
172
|
+
// src/instasign.ts
|
|
173
|
+
var import_axios = __toESM(require("axios"), 1);
|
|
174
174
|
var Instasign = class {
|
|
175
175
|
client;
|
|
176
176
|
envelopes;
|
|
@@ -178,10 +178,10 @@ var Instasign = class {
|
|
|
178
178
|
webhooks;
|
|
179
179
|
constructor(config) {
|
|
180
180
|
this.client = import_axios.default.create({
|
|
181
|
-
baseURL: config.serverUrl
|
|
181
|
+
baseURL: config.serverUrl,
|
|
182
182
|
headers: {
|
|
183
|
-
"X-Parse-APPLICATION-ID": config.appId
|
|
184
|
-
"X-Parse-REST-API-KEY": config.restApiKey
|
|
183
|
+
"X-Parse-APPLICATION-ID": config.appId,
|
|
184
|
+
"X-Parse-REST-API-KEY": config.restApiKey,
|
|
185
185
|
"x-api-key": config.apiKey,
|
|
186
186
|
"Content-Type": "application/json"
|
|
187
187
|
}
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/resources/Envelopes.ts","../src/resources/SignRequests.ts","../src/resources/Webhooks.ts"],"sourcesContent":["import axios, { AxiosInstance } from 'axios';\nimport { Envelopes } from './resources/Envelopes.js';\nimport { SignRequests } from './resources/SignRequests.js';\nimport { Webhooks } from './resources/Webhooks.js';\n\nexport * from './resources/Envelopes.js';\nexport * from './resources/SignRequests.js';\nexport * from './resources/Webhooks.js';\n\nexport type * from '../types/schema.js';\n\nexport interface IInstasignConfig {\n /// Required Instasign API key\n apiKey: string;\n\n /// Optional Parse Server config\n appId?: string;\n restApiKey?: string;\n serverUrl?: string;\n /// Optional webhook signature tolerance in seconds (default 300)\n webhookTolerance?: number;\n}\n\nexport class Instasign {\n private client: AxiosInstance;\n\n public envelopes: Envelopes;\n public signRequests: SignRequests;\n public webhooks: Webhooks;\n\n constructor(config: IInstasignConfig) {\n this.client = axios.create({\n baseURL: config.serverUrl || 'https://parseapi.back4app.com',\n headers: {\n 'X-Parse-APPLICATION-ID': config.appId || 'jKFo8BFQRdiAUV4F3o3SIDWLpLUb2TVW7bVl7lwH',\n 'X-Parse-REST-API-KEY': config.restApiKey || 'Gjm9pmxZh0DjXHkcFlf0kGZjHfYEY4ERw71TvLig',\n 'x-api-key': config.apiKey,\n 'Content-Type': 'application/json',\n },\n });\n\n this.envelopes = new Envelopes(this.client);\n this.signRequests = new SignRequests(this.client);\n this.webhooks = new Webhooks(config.webhookTolerance ?? 300);\n }\n}\n\n","import { AxiosInstance } from 'axios';\nimport {\n type CreateEnvelopeParams,\n type CreateEnvelopeResponse,\n type GetEnvelopesParams,\n type EnvelopeListItem,\n type Envelope,\n type OperationResponse,\n type UpdateEnvelopeMetadataParams,\n type UpdateEnvelopeMetadataResponse,\n type RemoveSignRequestFromEnvelopeParams,\n type AddSignRequestToEnvelopeParams,\n type AddSignRequestToEnvelopeResponse,\n} from '../types.js';\n\nexport class Envelopes {\n constructor(private client: AxiosInstance) { }\n\n /**\n * Create a new envelope\n */\n async create(params: CreateEnvelopeParams): Promise<CreateEnvelopeResponse | undefined> {\n const response = await this.client.post('/functions/createEnvelope', params);\n return response.data.result;\n }\n\n /**\n * List envelopes\n */\n async list(params: GetEnvelopesParams = {}): Promise<EnvelopeListItem[] | undefined> {\n const response = await this.client.post('/functions/getEnvelopes', params);\n return response.data.result;\n }\n\n /**\n * Retrieve a single envelope with its sign requests\n */\n async get(envelopeId: string): Promise<Envelope | undefined> {\n const response = await this.client.post('/functions/getEnvelope', { envelopeId });\n return response.data.result;\n }\n\n /**\n * Complete an envelope\n */\n async complete(envelopeId: string): Promise<OperationResponse | undefined> {\n const response = await this.client.post('/functions/completeEnvelope', { envelopeId });\n return response.data.result;\n }\n\n /**\n * Delete an envelope\n */\n async delete(envelopeId: string): Promise<OperationResponse | undefined> {\n const response = await this.client.post('/functions/deleteEnvelope', { envelopeId });\n return response.data.result;\n }\n\n /**\n * Update envelope metadata\n */\n async updateMetadata(params: UpdateEnvelopeMetadataParams): Promise<UpdateEnvelopeMetadataResponse | undefined> {\n const response = await this.client.post('/functions/updateEnvelopeMetadata', params);\n return response.data.result;\n }\n\n /**\n * Remove a sign request from an envelope\n */\n async removeSignRequest(params: RemoveSignRequestFromEnvelopeParams): Promise<OperationResponse | undefined> {\n const response = await this.client.post('/functions/removeSignRequestFromEnvelope', params);\n return response.data.result;\n }\n\n /**\n * Add a sign request to an envelope\n */\n async addSignRequest(params: AddSignRequestToEnvelopeParams): Promise<AddSignRequestToEnvelopeResponse | undefined> {\n const response = await this.client.post('/functions/addSignRequestToEnvelope', params);\n return response.data.result;\n }\n\n /**\n * Add multiple sign requests to an envelope\n */\n // async addSignRequests(params: AddSignRequestToEnvelopeParams[]): Promise<AddSignRequestToEnvelopeResponse[] | undefined> {\n // // TODO(ciro): must be implemented on back-end\n // const response = await this.client.post('/functions/addMultipleSignRequestsToEnvelope', params);\n // return response.data.result;\n // }\n}","import { AxiosInstance } from 'axios';\nimport {\n type CreateSignRequestParams,\n type CreateSignRequestResponse,\n type CompleteSignRequestParams,\n type CompleteSignRequestResponse,\n type SignRequestFile,\n} from '../types.js';\n\nexport class SignRequests {\n constructor(private client: AxiosInstance) { }\n\n /**\n * Create a new sign request\n */\n async create(params: CreateSignRequestParams): Promise<CreateSignRequestResponse | undefined> {\n const response = await this.client.post('/functions/createSignRequest', params);\n return response.data.result;\n }\n\n /**\n * Complete a sign request\n */\n async complete(params: CompleteSignRequestParams): Promise<CompleteSignRequestResponse | undefined> {\n const response = await this.client.post('/functions/completeSignRequest', params);\n return response.data.result;\n }\n\n /**\n * Get the file associated with a sign request\n */\n async getFile(requestId: string): Promise<SignRequestFile | undefined> {\n const response = await this.client.post('/functions/getFileFromRequestId', { requestId });\n return response.data.result;\n }\n}","import * as crypto from 'node:crypto';\nimport { WebhookEvent } from '../types';\n\nexport class Webhooks {\n constructor(private tolerance: number = 300) { }\n\n /**\n * Verify and parse a webhook event\n */\n public constructEvent(payload: string, signatureHeader: string, webhookSecret: string): WebhookEvent {\n const parts = signatureHeader.split(',');\n const timestamp = parts.find((p) => p.startsWith('t='))?.split('=')[1];\n const signature = parts.find((p) => p.startsWith('v1='))?.split('=')[1];\n\n if (!timestamp || !signature) {\n throw new Error('Invalid signature header');\n }\n\n const now = Math.floor(Date.now() / 1000);\n if (Math.abs(now - parseInt(timestamp)) > this.tolerance) {\n throw new Error('Signature too old');\n }\n\n const signedPayload = `${timestamp}.${payload}`;\n const expectedSignature = crypto\n .createHmac('sha256', webhookSecret)\n .update(signedPayload)\n .digest('hex');\n\n const isValid = crypto.timingSafeEqual(\n Buffer.from(signature),\n Buffer.from(expectedSignature)\n );\n\n if (!isValid) {\n throw new Error('Invalid signature');\n }\n\n return JSON.parse(payload) as WebhookEvent;\n }\n}\n"],"mappings":"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","names":["axios"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/resources/Envelopes.ts","../src/resources/SignRequests.ts","../src/resources/Webhooks.ts","../src/instasign.ts"],"sourcesContent":["\n\nexport * from './resources/Envelopes.js';\nexport * from './resources/SignRequests.js';\nexport * from './resources/Webhooks.js';\nexport * from './types.js';\n\nexport type * from '../types/schema.js';\nexport type * from './types/index.js';\n\nexport * from './instasign.js';","import { AxiosInstance } from 'axios';\nimport {\n Envelope,\n type AddSignRequestToEnvelopeParams,\n type AddSignRequestToEnvelopeResponse,\n type CreateEnvelopeParams,\n type CreateEnvelopeResponse,\n type GetEnvelopesParams,\n type OperationResponse,\n type RemoveSignRequestFromEnvelopeParams,\n type UpdateEnvelopeMetadataParams,\n type UpdateEnvelopeMetadataResponse\n} from '../types.js';\n\nexport class Envelopes {\n constructor(private client: AxiosInstance) { }\n\n /**\n * Create a new envelope\n */\n async create(params: CreateEnvelopeParams): Promise<CreateEnvelopeResponse | undefined> {\n const response = await this.client.post('/functions/envelope:create', params);\n return response.data.result;\n }\n\n /**\n * List envelopes\n */\n async list(params: GetEnvelopesParams = {}): Promise<Envelope[] | undefined> {\n const response = await this.client.post('/functions/envelope:list', params);\n return response.data.result;\n }\n\n /**\n * Retrieve a single envelope with its sign requests\n */\n async get(envelopeId: string): Promise<Envelope | undefined> {\n const response = await this.client.post('/functions/envelope:get', { envelopeId });\n return response.data.result;\n }\n\n /**\n * Complete an envelope\n */\n async complete(envelopeId: string): Promise<OperationResponse | undefined> {\n const response = await this.client.post('/functions/envelope:complete', { envelopeId });\n return response.data.result;\n }\n\n /**\n * Delete an envelope\n */\n async delete(envelopeId: string): Promise<OperationResponse | undefined> {\n const response = await this.client.post('/functions/envelope:delete', { envelopeId });\n return response.data.result;\n }\n\n /**\n * Update envelope metadata\n */\n async updateMetadata(params: UpdateEnvelopeMetadataParams): Promise<UpdateEnvelopeMetadataResponse | undefined> {\n const response = await this.client.post('/functions/envelope:update-metadata', params);\n return response.data.result;\n }\n\n /**\n * Remove a sign request from an envelope\n */\n async removeSignRequest(params: RemoveSignRequestFromEnvelopeParams): Promise<OperationResponse | undefined> {\n const response = await this.client.post('/functions/envelope:remove-sign-request', params);\n return response.data.result;\n }\n\n /**\n * Add a sign request to an envelope\n */\n async addSignRequest(params: AddSignRequestToEnvelopeParams): Promise<AddSignRequestToEnvelopeResponse | undefined> {\n const response = await this.client.post('/functions/envelope:add-sign-request', params);\n return response.data.result;\n }\n\n /**\n * Add multiple sign requests to an envelope\n */\n // async addSignRequests(params: AddSignRequestToEnvelopeParams[]): Promise<AddSignRequestToEnvelopeResponse[] | undefined> {\n // // TODO(ciro): must be implemented on back-end\n // const response = await this.client.post('/functions/addMultipleSignRequestsToEnvelope', params);\n // return response.data.result;\n // }\n}","import { AxiosInstance } from 'axios';\nimport {\n type CreateSignRequestParams,\n type CreateSignRequestResponse,\n type CompleteSignRequestParams,\n type CompleteSignRequestResponse,\n type SignRequest,\n} from '../types.js';\n\nexport class SignRequests {\n constructor(private client: AxiosInstance) { }\n\n /**\n * Create a new sign request\n */\n async create(params: CreateSignRequestParams): Promise<CreateSignRequestResponse | undefined> {\n const response = await this.client.post('/functions/sign-request:create', params);\n return response.data.result;\n }\n\n /**\n * Complete a sign request\n */\n async complete(params: CompleteSignRequestParams): Promise<CompleteSignRequestResponse | undefined> {\n const response = await this.client.post('/functions/sign-request:complete', params);\n return response.data.result;\n }\n\n /**\n * Get the file associated with a sign request\n */\n async get(requestId: string): Promise<SignRequest | undefined> {\n const response = await this.client.post('/functions/sign-request:get', { requestId });\n return response.data.result;\n }\n}","import * as crypto from 'node:crypto';\nimport { WebhookEvent } from '../types';\n\nexport class Webhooks {\n constructor(private tolerance: number = 300) { }\n\n /**\n * Verify and parse a webhook event\n */\n public constructEvent(payload: string, signatureHeader: string, webhookSecret: string): WebhookEvent {\n const parts = signatureHeader.split(',');\n const timestamp = parts.find((p) => p.startsWith('t='))?.split('=')[1];\n const signature = parts.find((p) => p.startsWith('v1='))?.split('=')[1];\n\n if (!timestamp || !signature) {\n throw new Error('Invalid signature header');\n }\n\n const now = Math.floor(Date.now() / 1000);\n if (Math.abs(now - parseInt(timestamp)) > this.tolerance) {\n throw new Error('Signature too old');\n }\n\n const signedPayload = `${timestamp}.${payload}`;\n const expectedSignature = crypto\n .createHmac('sha256', webhookSecret)\n .update(signedPayload)\n .digest('hex');\n\n const isValid = crypto.timingSafeEqual(\n Buffer.from(signature),\n Buffer.from(expectedSignature)\n );\n\n if (!isValid) {\n throw new Error('Invalid signature');\n }\n\n return JSON.parse(payload) as WebhookEvent;\n }\n}\n","import axios, { AxiosInstance } from 'axios';\nimport { Envelopes } from './resources/Envelopes.js';\nimport { SignRequests } from './resources/SignRequests.js';\nimport { Webhooks } from './resources/Webhooks.js';\n\nexport interface IInstasignConfig {\n /// Required Instasign API key\n apiKey: string;\n\n /// Optional Parse Server config\n appId?: string;\n restApiKey?: string;\n serverUrl?: string;\n /// Optional webhook signature tolerance in seconds (default 300)\n webhookTolerance?: number;\n}\n\nexport class Instasign {\n private client: AxiosInstance;\n\n public readonly envelopes: Envelopes;\n public readonly signRequests: SignRequests;\n public readonly webhooks: Webhooks;\n\n constructor(config: IInstasignConfig) {\n this.client = axios.create({\n baseURL: config.serverUrl,\n headers: {\n 'X-Parse-APPLICATION-ID': config.appId,\n 'X-Parse-REST-API-KEY': config.restApiKey,\n 'x-api-key': config.apiKey,\n 'Content-Type': 'application/json',\n },\n });\n\n this.envelopes = new Envelopes(this.client);\n this.signRequests = new SignRequests(this.client);\n this.webhooks = new Webhooks(config.webhookTolerance ?? 300);\n }\n}\n\n"],"mappings":"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","names":["axios"]}
|