moss-partner-sdk 0.1.0 → 0.2.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/dist/__tests__/setup.d.ts +2 -13
- package/dist/__tests__/setup.d.ts.map +1 -1
- package/dist/__tests__/setup.js +3 -16
- package/dist/__tests__/setup.js.map +1 -1
- package/dist/analytics.d.ts +4 -15
- package/dist/analytics.d.ts.map +1 -1
- package/dist/analytics.js +1 -38
- package/dist/analytics.js.map +1 -1
- package/dist/billing.d.ts +13 -0
- package/dist/billing.d.ts.map +1 -0
- package/dist/billing.js +18 -0
- package/dist/billing.js.map +1 -0
- package/dist/client.d.ts +5 -3
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +6 -14
- package/dist/client.js.map +1 -1
- package/dist/customers.d.ts +12 -11
- package/dist/customers.d.ts.map +1 -1
- package/dist/customers.js +116 -101
- package/dist/customers.js.map +1 -1
- package/dist/http.d.ts +3 -4
- package/dist/http.d.ts.map +1 -1
- package/dist/http.js +76 -91
- package/dist/http.js.map +1 -1
- package/dist/index.d.ts +10 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -3
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +343 -131
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +8 -1
- package/dist/types.js.map +1 -1
- package/dist/usage.d.ts +19 -0
- package/dist/usage.d.ts.map +1 -0
- package/dist/usage.js +26 -0
- package/dist/usage.js.map +1 -0
- package/dist/webhooks.d.ts +6 -6
- package/dist/webhooks.d.ts.map +1 -1
- package/dist/webhooks.js +28 -14
- package/dist/webhooks.js.map +1 -1
- package/package.json +2 -2
- package/dist/utils/case.d.ts +0 -5
- package/dist/utils/case.d.ts.map +0 -1
- package/dist/utils/case.js +0 -47
- package/dist/utils/case.js.map +0 -1
package/dist/webhooks.d.ts
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { HTTPClient } from './http';
|
|
2
|
-
import { Webhook, CreateWebhookRequest,
|
|
2
|
+
import { Webhook, CreateWebhookRequest, WebhookListResponse, WebhookDeliveriesResponse } from './types';
|
|
3
3
|
export declare class WebhooksResource {
|
|
4
4
|
private http;
|
|
5
5
|
constructor(http: HTTPClient);
|
|
6
6
|
create(request: CreateWebhookRequest): Promise<Webhook>;
|
|
7
|
-
list(): Promise<
|
|
7
|
+
list(): Promise<WebhookListResponse>;
|
|
8
8
|
get(webhookId: string): Promise<Webhook>;
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
verify(webhookId: string): Promise<Webhook>;
|
|
10
|
+
deliveries(webhookId: string, cursor?: string, limit?: number): Promise<WebhookDeliveriesResponse>;
|
|
11
|
+
delete(webhookId: string): Promise<Webhook>;
|
|
12
|
+
verifySignature(payload: string | Buffer, signature: string, timestamp: string, secret: string, toleranceSeconds?: number): boolean;
|
|
12
13
|
private computeSignature;
|
|
13
14
|
private secureCompare;
|
|
14
|
-
on<T = any>(_eventType: string, _handler: (event: WebhookEvent<T>) => void | Promise<void>): void;
|
|
15
15
|
}
|
|
16
16
|
//# sourceMappingURL=webhooks.d.ts.map
|
package/dist/webhooks.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhooks.d.ts","sourceRoot":"","sources":["../src/webhooks.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"webhooks.d.ts","sourceRoot":"","sources":["../src/webhooks.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EACL,OAAO,EACP,oBAAoB,EACpB,mBAAmB,EACnB,yBAAyB,EAC1B,MAAM,SAAS,CAAC;AAEjB,qBAAa,gBAAgB;IACf,OAAO,CAAC,IAAI;gBAAJ,IAAI,EAAE,UAAU;IAU9B,MAAM,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;IAgBvD,IAAI,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAepC,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAaxC,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAa3C,UAAU,CACd,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,MAAM,EACf,KAAK,GAAE,MAAW,GACjB,OAAO,CAAC,yBAAyB,CAAC;IAsB/B,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAyBjD,eAAe,CACb,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,gBAAgB,GAAE,MAAY,GAC7B,OAAO;IAmCV,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,aAAa;CAUtB"}
|
package/dist/webhooks.js
CHANGED
|
@@ -19,7 +19,9 @@ class WebhooksResource {
|
|
|
19
19
|
method: 'GET',
|
|
20
20
|
path: '/v1/partner/webhooks',
|
|
21
21
|
});
|
|
22
|
-
return
|
|
22
|
+
return {
|
|
23
|
+
webhooks: response.data.webhooks || [],
|
|
24
|
+
};
|
|
23
25
|
}
|
|
24
26
|
async get(webhookId) {
|
|
25
27
|
const response = await this.http.request({
|
|
@@ -28,22 +30,37 @@ class WebhooksResource {
|
|
|
28
30
|
});
|
|
29
31
|
return response.data;
|
|
30
32
|
}
|
|
31
|
-
async
|
|
33
|
+
async verify(webhookId) {
|
|
32
34
|
const response = await this.http.request({
|
|
33
|
-
method: '
|
|
34
|
-
path: `/v1/partner/webhooks/${webhookId}`,
|
|
35
|
-
|
|
35
|
+
method: 'POST',
|
|
36
|
+
path: `/v1/partner/webhooks/${webhookId}/verify`,
|
|
37
|
+
});
|
|
38
|
+
return response.data;
|
|
39
|
+
}
|
|
40
|
+
async deliveries(webhookId, cursor, limit = 50) {
|
|
41
|
+
const query = { limit };
|
|
42
|
+
if (cursor) {
|
|
43
|
+
query.cursor = cursor;
|
|
44
|
+
}
|
|
45
|
+
const response = await this.http.request({
|
|
46
|
+
method: 'GET',
|
|
47
|
+
path: `/v1/partner/webhooks/${webhookId}/deliveries`,
|
|
48
|
+
query,
|
|
36
49
|
});
|
|
37
50
|
return response.data;
|
|
38
51
|
}
|
|
39
52
|
async delete(webhookId) {
|
|
40
|
-
await this.http.request({
|
|
53
|
+
const response = await this.http.request({
|
|
41
54
|
method: 'DELETE',
|
|
42
55
|
path: `/v1/partner/webhooks/${webhookId}`,
|
|
43
56
|
});
|
|
57
|
+
return response.data;
|
|
44
58
|
}
|
|
45
|
-
|
|
59
|
+
verifySignature(payload, signature, timestamp, secret, toleranceSeconds = 300) {
|
|
46
60
|
try {
|
|
61
|
+
const sigHex = signature.startsWith('sha256=')
|
|
62
|
+
? signature.slice(7)
|
|
63
|
+
: signature;
|
|
47
64
|
const now = Math.floor(Date.now() / 1000);
|
|
48
65
|
const webhookTime = parseInt(timestamp, 10);
|
|
49
66
|
if (isNaN(webhookTime)) {
|
|
@@ -53,11 +70,12 @@ class WebhooksResource {
|
|
|
53
70
|
if (age > toleranceSeconds) {
|
|
54
71
|
return false;
|
|
55
72
|
}
|
|
56
|
-
const
|
|
73
|
+
const payloadStr = typeof payload === 'string' ? payload : payload.toString('utf-8');
|
|
74
|
+
const signedPayload = `${timestamp}.${payloadStr}`;
|
|
57
75
|
const expectedSignature = this.computeSignature(signedPayload, secret);
|
|
58
|
-
return this.secureCompare(
|
|
76
|
+
return this.secureCompare(sigHex, expectedSignature);
|
|
59
77
|
}
|
|
60
|
-
catch
|
|
78
|
+
catch {
|
|
61
79
|
return false;
|
|
62
80
|
}
|
|
63
81
|
}
|
|
@@ -74,10 +92,6 @@ class WebhooksResource {
|
|
|
74
92
|
const bufferB = Buffer.from(b);
|
|
75
93
|
return (0, crypto_1.timingSafeEqual)(bufferA, bufferB);
|
|
76
94
|
}
|
|
77
|
-
on(_eventType, _handler) {
|
|
78
|
-
throw new Error('Event handler registration is not yet implemented. ' +
|
|
79
|
-
'Use the verify() method to validate webhooks in your HTTP handler.');
|
|
80
|
-
}
|
|
81
95
|
}
|
|
82
96
|
exports.WebhooksResource = WebhooksResource;
|
|
83
97
|
//# sourceMappingURL=webhooks.js.map
|
package/dist/webhooks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../src/webhooks.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../src/webhooks.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "moss-partner-sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "TypeScript SDK for MOSS Partner API - Manage customers, configure governance, and monitor compliance",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"license": "SEE LICENSE IN LICENSE",
|
|
29
29
|
"repository": {
|
|
30
30
|
"type": "git",
|
|
31
|
-
"url": "https://github.com/mosscomputing/moss-partner-sdk-ts.git",
|
|
31
|
+
"url": "git+https://github.com/mosscomputing/moss-partner-sdk-ts.git",
|
|
32
32
|
"private": true
|
|
33
33
|
},
|
|
34
34
|
"publishConfig": {
|
package/dist/utils/case.d.ts
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
export declare function toSnakeCase(str: string): string;
|
|
2
|
-
export declare function toCamelCase(str: string): string;
|
|
3
|
-
export declare function keysToSnakeCase<T = any>(obj: any): T;
|
|
4
|
-
export declare function keysToCamelCase<T = any>(obj: any): T;
|
|
5
|
-
//# sourceMappingURL=case.d.ts.map
|
package/dist/utils/case.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"case.d.ts","sourceRoot":"","sources":["../../src/utils/case.ts"],"names":[],"mappings":"AAQA,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE/C;AAKD,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE/C;AAKD,wBAAgB,eAAe,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,CAmBpD;AAKD,wBAAgB,eAAe,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,CAmBpD"}
|
package/dist/utils/case.js
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.toSnakeCase = toSnakeCase;
|
|
4
|
-
exports.toCamelCase = toCamelCase;
|
|
5
|
-
exports.keysToSnakeCase = keysToSnakeCase;
|
|
6
|
-
exports.keysToCamelCase = keysToCamelCase;
|
|
7
|
-
function toSnakeCase(str) {
|
|
8
|
-
return str.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);
|
|
9
|
-
}
|
|
10
|
-
function toCamelCase(str) {
|
|
11
|
-
return str.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());
|
|
12
|
-
}
|
|
13
|
-
function keysToSnakeCase(obj) {
|
|
14
|
-
if (obj === null || obj === undefined) {
|
|
15
|
-
return obj;
|
|
16
|
-
}
|
|
17
|
-
if (Array.isArray(obj)) {
|
|
18
|
-
return obj.map((item) => keysToSnakeCase(item));
|
|
19
|
-
}
|
|
20
|
-
if (typeof obj === 'object' && obj.constructor === Object) {
|
|
21
|
-
const result = {};
|
|
22
|
-
for (const [key, value] of Object.entries(obj)) {
|
|
23
|
-
const newKey = toSnakeCase(key);
|
|
24
|
-
result[newKey] = keysToSnakeCase(value);
|
|
25
|
-
}
|
|
26
|
-
return result;
|
|
27
|
-
}
|
|
28
|
-
return obj;
|
|
29
|
-
}
|
|
30
|
-
function keysToCamelCase(obj) {
|
|
31
|
-
if (obj === null || obj === undefined) {
|
|
32
|
-
return obj;
|
|
33
|
-
}
|
|
34
|
-
if (Array.isArray(obj)) {
|
|
35
|
-
return obj.map((item) => keysToCamelCase(item));
|
|
36
|
-
}
|
|
37
|
-
if (typeof obj === 'object' && obj.constructor === Object) {
|
|
38
|
-
const result = {};
|
|
39
|
-
for (const [key, value] of Object.entries(obj)) {
|
|
40
|
-
const newKey = toCamelCase(key);
|
|
41
|
-
result[newKey] = keysToCamelCase(value);
|
|
42
|
-
}
|
|
43
|
-
return result;
|
|
44
|
-
}
|
|
45
|
-
return obj;
|
|
46
|
-
}
|
|
47
|
-
//# sourceMappingURL=case.js.map
|
package/dist/utils/case.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"case.js","sourceRoot":"","sources":["../../src/utils/case.ts"],"names":[],"mappings":";;AAQA,kCAEC;AAKD,kCAEC;AAKD,0CAmBC;AAKD,0CAmBC;AAzDD,SAAgB,WAAW,CAAC,GAAW;IACrC,OAAO,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AACvE,CAAC;AAKD,SAAgB,WAAW,CAAC,GAAW;IACrC,OAAO,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;AACvE,CAAC;AAKD,SAAgB,eAAe,CAAU,GAAQ;IAC/C,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtC,OAAO,GAAG,CAAC;IACb,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAM,CAAC;IACvD,CAAC;IAED,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;QAC1D,MAAM,MAAM,GAAQ,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/C,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;YAChC,MAAM,CAAC,MAAM,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,MAAW,CAAC;IACrB,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAKD,SAAgB,eAAe,CAAU,GAAQ;IAC/C,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtC,OAAO,GAAG,CAAC;IACb,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAM,CAAC;IACvD,CAAC;IAED,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;QAC1D,MAAM,MAAM,GAAQ,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/C,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;YAChC,MAAM,CAAC,MAAM,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,MAAW,CAAC;IACrB,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
|