@inkbox/sdk 0.2.1 → 0.2.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/README.md +241 -12
- package/dist/_http.d.ts +1 -0
- package/dist/_http.d.ts.map +1 -1
- package/dist/_http.js +3 -0
- package/dist/_http.js.map +1 -1
- package/dist/agent_identity.d.ts +63 -4
- package/dist/agent_identity.d.ts.map +1 -1
- package/dist/agent_identity.js +69 -1
- package/dist/agent_identity.js.map +1 -1
- package/dist/identities/resources/identities.d.ts +9 -2
- package/dist/identities/resources/identities.d.ts.map +1 -1
- package/dist/identities/resources/identities.js +12 -4
- package/dist/identities/resources/identities.js.map +1 -1
- package/dist/identities/types.d.ts +35 -0
- package/dist/identities/types.d.ts.map +1 -1
- package/dist/identities/types.js +45 -0
- package/dist/identities/types.js.map +1 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/inkbox.d.ts +20 -5
- package/dist/inkbox.d.ts.map +1 -1
- package/dist/inkbox.js +33 -6
- package/dist/inkbox.js.map +1 -1
- package/dist/mail/resources/mailboxes.d.ts +13 -12
- package/dist/mail/resources/mailboxes.d.ts.map +1 -1
- package/dist/mail/resources/mailboxes.js +17 -16
- package/dist/mail/resources/mailboxes.js.map +1 -1
- package/dist/mail/types.d.ts +1 -1
- package/dist/mail/types.d.ts.map +1 -1
- package/dist/mail/types.js +1 -1
- package/dist/mail/types.js.map +1 -1
- package/dist/phone/resources/numbers.d.ts +2 -0
- package/dist/phone/resources/numbers.d.ts.map +1 -1
- package/dist/phone/resources/numbers.js +6 -0
- package/dist/phone/resources/numbers.js.map +1 -1
- package/dist/phone/resources/texts.d.ts +93 -0
- package/dist/phone/resources/texts.d.ts.map +1 -0
- package/dist/phone/resources/texts.js +109 -0
- package/dist/phone/resources/texts.js.map +1 -0
- package/dist/phone/types.d.ts +62 -0
- package/dist/phone/types.d.ts.map +1 -1
- package/dist/phone/types.js +34 -0
- package/dist/phone/types.js.map +1 -1
- package/dist/vault/resources/vault.d.ts +50 -1
- package/dist/vault/resources/vault.d.ts.map +1 -1
- package/dist/vault/resources/vault.js +123 -1
- package/dist/vault/resources/vault.js.map +1 -1
- package/dist/vault/totp.js +3 -3
- package/dist/vault/totp.js.map +1 -1
- package/dist/vault/types.d.ts +17 -0
- package/dist/vault/types.d.ts.map +1 -1
- package/dist/vault/types.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"numbers.d.ts","sourceRoot":"","sources":["../../../src/phone/resources/numbers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EACL,WAAW,EACX,eAAe,EAKhB,MAAM,aAAa,CAAC;AAIrB,qBAAa,oBAAoB;IACnB,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,aAAa;IAEhD,oDAAoD;IAC9C,IAAI,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAKpC,gCAAgC;IAC1B,GAAG,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAOtD;;;;;;;;OAQG;IACG,MAAM,CACV,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE;QACP,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACnC,sBAAsB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KACxC,GACA,OAAO,CAAC,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"numbers.d.ts","sourceRoot":"","sources":["../../../src/phone/resources/numbers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EACL,WAAW,EACX,eAAe,EAKhB,MAAM,aAAa,CAAC;AAIrB,qBAAa,oBAAoB;IACnB,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,aAAa;IAEhD,oDAAoD;IAC9C,IAAI,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAKpC,gCAAgC;IAC1B,GAAG,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAOtD;;;;;;;;OAQG;IACG,MAAM,CACV,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE;QACP,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACnC,sBAAsB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACvC,sBAAsB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KACxC,GACA,OAAO,CAAC,WAAW,CAAC;IAqBvB;;;;;;OAMG;IACG,SAAS,CAAC,OAAO,EAAE;QACvB,WAAW,EAAE,MAAM,CAAC;QACpB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,sBAAsB,CAAC,EAAE,MAAM,CAAC;KACjC,GAAG,OAAO,CAAC,WAAW,CAAC;IAexB;;;;OAIG;IACG,OAAO,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAInD;;;;;;;OAOG;IACG,iBAAiB,CACrB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GACrD,OAAO,CAAC,eAAe,EAAE,CAAC;CAO9B"}
|
|
@@ -40,6 +40,9 @@ export class PhoneNumbersResource {
|
|
|
40
40
|
if ("incomingCallWebhookUrl" in options) {
|
|
41
41
|
body["incoming_call_webhook_url"] = options.incomingCallWebhookUrl;
|
|
42
42
|
}
|
|
43
|
+
if ("incomingTextWebhookUrl" in options) {
|
|
44
|
+
body["incoming_text_webhook_url"] = options.incomingTextWebhookUrl;
|
|
45
|
+
}
|
|
43
46
|
const data = await this.http.patch(`${BASE}/${phoneNumberId}`, body);
|
|
44
47
|
return parsePhoneNumber(data);
|
|
45
48
|
}
|
|
@@ -58,6 +61,9 @@ export class PhoneNumbersResource {
|
|
|
58
61
|
if (options.state !== undefined) {
|
|
59
62
|
body["state"] = options.state;
|
|
60
63
|
}
|
|
64
|
+
if (options.incomingTextWebhookUrl !== undefined) {
|
|
65
|
+
body["incoming_text_webhook_url"] = options.incomingTextWebhookUrl;
|
|
66
|
+
}
|
|
61
67
|
const data = await this.http.post(BASE, body);
|
|
62
68
|
return parsePhoneNumber(data);
|
|
63
69
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"numbers.js","sourceRoot":"","sources":["../../../src/phone/resources/numbers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAKL,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AAErB,MAAM,IAAI,GAAG,UAAU,CAAC;AAExB,MAAM,OAAO,oBAAoB;IACF;IAA7B,YAA6B,IAAmB;QAAnB,SAAI,GAAJ,IAAI,CAAe;IAAG,CAAC;IAEpD,oDAAoD;IACpD,KAAK,CAAC,IAAI;QACR,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAmB,IAAI,CAAC,CAAC;QACzD,OAAO,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IACpC,CAAC;IAED,gCAAgC;IAChC,KAAK,CAAC,GAAG,CAAC,aAAqB;QAC7B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAC9B,GAAG,IAAI,IAAI,aAAa,EAAE,CAC3B,CAAC;QACF,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,MAAM,CACV,aAAqB,EACrB,
|
|
1
|
+
{"version":3,"file":"numbers.js","sourceRoot":"","sources":["../../../src/phone/resources/numbers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* inkbox-phone/resources/texts.ts
|
|
3
|
+
*
|
|
4
|
+
* Text message (SMS/MMS) operations: list, get, update, search, conversations.
|
|
5
|
+
*/
|
|
6
|
+
import { HttpTransport } from "../../_http.js";
|
|
7
|
+
import { TextMessage, TextConversationSummary } from "../types.js";
|
|
8
|
+
export declare class TextsResource {
|
|
9
|
+
private readonly http;
|
|
10
|
+
constructor(http: HttpTransport);
|
|
11
|
+
/**
|
|
12
|
+
* List text messages for a phone number, newest first.
|
|
13
|
+
*
|
|
14
|
+
* @param phoneNumberId - UUID of the phone number.
|
|
15
|
+
* @param options.limit - Max results (1–200). Defaults to 50.
|
|
16
|
+
* @param options.offset - Pagination offset. Defaults to 0.
|
|
17
|
+
* @param options.isRead - Filter by read state.
|
|
18
|
+
*/
|
|
19
|
+
list(phoneNumberId: string, options?: {
|
|
20
|
+
limit?: number;
|
|
21
|
+
offset?: number;
|
|
22
|
+
isRead?: boolean;
|
|
23
|
+
}): Promise<TextMessage[]>;
|
|
24
|
+
/**
|
|
25
|
+
* Get a single text message by ID.
|
|
26
|
+
*
|
|
27
|
+
* @param phoneNumberId - UUID of the phone number.
|
|
28
|
+
* @param textId - UUID of the text message.
|
|
29
|
+
*/
|
|
30
|
+
get(phoneNumberId: string, textId: string): Promise<TextMessage>;
|
|
31
|
+
/**
|
|
32
|
+
* Update a text message (mark as read, delete).
|
|
33
|
+
*
|
|
34
|
+
* @param phoneNumberId - UUID of the phone number.
|
|
35
|
+
* @param textId - UUID of the text message.
|
|
36
|
+
* @param options.isRead - Mark as read or unread.
|
|
37
|
+
* @param options.status - Set to `"deleted"` to delete.
|
|
38
|
+
*/
|
|
39
|
+
update(phoneNumberId: string, textId: string, options: {
|
|
40
|
+
isRead?: boolean;
|
|
41
|
+
status?: string;
|
|
42
|
+
}): Promise<TextMessage>;
|
|
43
|
+
/**
|
|
44
|
+
* Full-text search across text messages for a phone number.
|
|
45
|
+
*
|
|
46
|
+
* @param phoneNumberId - UUID of the phone number.
|
|
47
|
+
* @param options.q - Search query string.
|
|
48
|
+
* @param options.limit - Max results (1–200). Defaults to 50.
|
|
49
|
+
*/
|
|
50
|
+
search(phoneNumberId: string, options: {
|
|
51
|
+
q: string;
|
|
52
|
+
limit?: number;
|
|
53
|
+
}): Promise<TextMessage[]>;
|
|
54
|
+
/**
|
|
55
|
+
* List conversations (one row per remote number) with latest message preview.
|
|
56
|
+
*
|
|
57
|
+
* @param phoneNumberId - UUID of the phone number.
|
|
58
|
+
* @param options.limit - Max results (1–200). Defaults to 50.
|
|
59
|
+
* @param options.offset - Pagination offset. Defaults to 0.
|
|
60
|
+
*/
|
|
61
|
+
listConversations(phoneNumberId: string, options?: {
|
|
62
|
+
limit?: number;
|
|
63
|
+
offset?: number;
|
|
64
|
+
}): Promise<TextConversationSummary[]>;
|
|
65
|
+
/**
|
|
66
|
+
* Get all messages with a specific remote number, newest first.
|
|
67
|
+
*
|
|
68
|
+
* @param phoneNumberId - UUID of the phone number.
|
|
69
|
+
* @param remoteNumber - E.164 remote phone number.
|
|
70
|
+
* @param options.limit - Max results (1–200). Defaults to 50.
|
|
71
|
+
* @param options.offset - Pagination offset. Defaults to 0.
|
|
72
|
+
*/
|
|
73
|
+
getConversation(phoneNumberId: string, remoteNumber: string, options?: {
|
|
74
|
+
limit?: number;
|
|
75
|
+
offset?: number;
|
|
76
|
+
}): Promise<TextMessage[]>;
|
|
77
|
+
/**
|
|
78
|
+
* Update the read state for all messages in a conversation.
|
|
79
|
+
*
|
|
80
|
+
* @param phoneNumberId - UUID of the phone number.
|
|
81
|
+
* @param remoteNumber - E.164 remote phone number.
|
|
82
|
+
* @param options.isRead - Mark all messages as read or unread.
|
|
83
|
+
* @returns Object with `remotePhoneNumber`, `isRead`, and `updatedCount`.
|
|
84
|
+
*/
|
|
85
|
+
updateConversation(phoneNumberId: string, remoteNumber: string, options: {
|
|
86
|
+
isRead: boolean;
|
|
87
|
+
}): Promise<{
|
|
88
|
+
remotePhoneNumber: string;
|
|
89
|
+
isRead: boolean;
|
|
90
|
+
updatedCount: number;
|
|
91
|
+
}>;
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=texts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"texts.d.ts","sourceRoot":"","sources":["../../../src/phone/resources/texts.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EACL,WAAW,EACX,uBAAuB,EAKxB,MAAM,aAAa,CAAC;AAErB,qBAAa,aAAa;IACZ,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,aAAa;IAEhD;;;;;;;OAOG;IACG,IAAI,CACR,aAAa,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAC9D,OAAO,CAAC,WAAW,EAAE,CAAC;IAezB;;;;;OAKG;IACG,GAAG,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAOtE;;;;;;;OAOG;IACG,MAAM,CACV,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAC7C,OAAO,CAAC,WAAW,CAAC;IAWvB;;;;;;OAMG;IACG,MAAM,CACV,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GACrC,OAAO,CAAC,WAAW,EAAE,CAAC;IAQzB;;;;;;OAMG;IACG,iBAAiB,CACrB,aAAa,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAC5C,OAAO,CAAC,uBAAuB,EAAE,CAAC;IAQrC;;;;;;;OAOG;IACG,eAAe,CACnB,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAC5C,OAAO,CAAC,WAAW,EAAE,CAAC;IAQzB;;;;;;;OAOG;IACG,kBAAkB,CACtB,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE;QAAE,MAAM,EAAE,OAAO,CAAA;KAAE,GAC3B,OAAO,CAAC;QAAE,iBAAiB,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;CAejF"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* inkbox-phone/resources/texts.ts
|
|
3
|
+
*
|
|
4
|
+
* Text message (SMS/MMS) operations: list, get, update, search, conversations.
|
|
5
|
+
*/
|
|
6
|
+
import { parseTextMessage, parseTextConversationSummary, } from "../types.js";
|
|
7
|
+
export class TextsResource {
|
|
8
|
+
http;
|
|
9
|
+
constructor(http) {
|
|
10
|
+
this.http = http;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* List text messages for a phone number, newest first.
|
|
14
|
+
*
|
|
15
|
+
* @param phoneNumberId - UUID of the phone number.
|
|
16
|
+
* @param options.limit - Max results (1–200). Defaults to 50.
|
|
17
|
+
* @param options.offset - Pagination offset. Defaults to 0.
|
|
18
|
+
* @param options.isRead - Filter by read state.
|
|
19
|
+
*/
|
|
20
|
+
async list(phoneNumberId, options) {
|
|
21
|
+
const params = {
|
|
22
|
+
limit: options?.limit ?? 50,
|
|
23
|
+
offset: options?.offset ?? 0,
|
|
24
|
+
};
|
|
25
|
+
if (options?.isRead !== undefined) {
|
|
26
|
+
params["is_read"] = options.isRead;
|
|
27
|
+
}
|
|
28
|
+
const data = await this.http.get(`/numbers/${phoneNumberId}/texts`, params);
|
|
29
|
+
return data.map(parseTextMessage);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Get a single text message by ID.
|
|
33
|
+
*
|
|
34
|
+
* @param phoneNumberId - UUID of the phone number.
|
|
35
|
+
* @param textId - UUID of the text message.
|
|
36
|
+
*/
|
|
37
|
+
async get(phoneNumberId, textId) {
|
|
38
|
+
const data = await this.http.get(`/numbers/${phoneNumberId}/texts/${textId}`);
|
|
39
|
+
return parseTextMessage(data);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Update a text message (mark as read, delete).
|
|
43
|
+
*
|
|
44
|
+
* @param phoneNumberId - UUID of the phone number.
|
|
45
|
+
* @param textId - UUID of the text message.
|
|
46
|
+
* @param options.isRead - Mark as read or unread.
|
|
47
|
+
* @param options.status - Set to `"deleted"` to delete.
|
|
48
|
+
*/
|
|
49
|
+
async update(phoneNumberId, textId, options) {
|
|
50
|
+
const body = {};
|
|
51
|
+
if (options.isRead !== undefined)
|
|
52
|
+
body["is_read"] = options.isRead;
|
|
53
|
+
if (options.status !== undefined)
|
|
54
|
+
body["status"] = options.status;
|
|
55
|
+
const data = await this.http.patch(`/numbers/${phoneNumberId}/texts/${textId}`, body);
|
|
56
|
+
return parseTextMessage(data);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Full-text search across text messages for a phone number.
|
|
60
|
+
*
|
|
61
|
+
* @param phoneNumberId - UUID of the phone number.
|
|
62
|
+
* @param options.q - Search query string.
|
|
63
|
+
* @param options.limit - Max results (1–200). Defaults to 50.
|
|
64
|
+
*/
|
|
65
|
+
async search(phoneNumberId, options) {
|
|
66
|
+
const data = await this.http.get(`/numbers/${phoneNumberId}/texts/search`, { q: options.q, limit: options.limit ?? 50 });
|
|
67
|
+
return data.map(parseTextMessage);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* List conversations (one row per remote number) with latest message preview.
|
|
71
|
+
*
|
|
72
|
+
* @param phoneNumberId - UUID of the phone number.
|
|
73
|
+
* @param options.limit - Max results (1–200). Defaults to 50.
|
|
74
|
+
* @param options.offset - Pagination offset. Defaults to 0.
|
|
75
|
+
*/
|
|
76
|
+
async listConversations(phoneNumberId, options) {
|
|
77
|
+
const data = await this.http.get(`/numbers/${phoneNumberId}/texts/conversations`, { limit: options?.limit ?? 50, offset: options?.offset ?? 0 });
|
|
78
|
+
return data.map(parseTextConversationSummary);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Get all messages with a specific remote number, newest first.
|
|
82
|
+
*
|
|
83
|
+
* @param phoneNumberId - UUID of the phone number.
|
|
84
|
+
* @param remoteNumber - E.164 remote phone number.
|
|
85
|
+
* @param options.limit - Max results (1–200). Defaults to 50.
|
|
86
|
+
* @param options.offset - Pagination offset. Defaults to 0.
|
|
87
|
+
*/
|
|
88
|
+
async getConversation(phoneNumberId, remoteNumber, options) {
|
|
89
|
+
const data = await this.http.get(`/numbers/${phoneNumberId}/texts/conversations/${remoteNumber}`, { limit: options?.limit ?? 50, offset: options?.offset ?? 0 });
|
|
90
|
+
return data.map(parseTextMessage);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Update the read state for all messages in a conversation.
|
|
94
|
+
*
|
|
95
|
+
* @param phoneNumberId - UUID of the phone number.
|
|
96
|
+
* @param remoteNumber - E.164 remote phone number.
|
|
97
|
+
* @param options.isRead - Mark all messages as read or unread.
|
|
98
|
+
* @returns Object with `remotePhoneNumber`, `isRead`, and `updatedCount`.
|
|
99
|
+
*/
|
|
100
|
+
async updateConversation(phoneNumberId, remoteNumber, options) {
|
|
101
|
+
const data = await this.http.patch(`/numbers/${phoneNumberId}/texts/conversations/${remoteNumber}`, { is_read: options.isRead });
|
|
102
|
+
return {
|
|
103
|
+
remotePhoneNumber: data.remote_phone_number,
|
|
104
|
+
isRead: data.is_read,
|
|
105
|
+
updatedCount: data.updated_count,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=texts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"texts.js","sourceRoot":"","sources":["../../../src/phone/resources/texts.ts"],"names":[],"mappings":"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"}
|
package/dist/phone/types.d.ts
CHANGED
|
@@ -12,6 +12,7 @@ export interface PhoneNumber {
|
|
|
12
12
|
incomingCallAction: string;
|
|
13
13
|
clientWebsocketUrl: string | null;
|
|
14
14
|
incomingCallWebhookUrl: string | null;
|
|
15
|
+
incomingTextWebhookUrl: string | null;
|
|
15
16
|
createdAt: Date;
|
|
16
17
|
updatedAt: Date;
|
|
17
18
|
}
|
|
@@ -54,6 +55,36 @@ export interface PhoneTranscript {
|
|
|
54
55
|
text: string;
|
|
55
56
|
createdAt: Date;
|
|
56
57
|
}
|
|
58
|
+
export interface TextMediaItem {
|
|
59
|
+
contentType: string;
|
|
60
|
+
size: number;
|
|
61
|
+
url: string;
|
|
62
|
+
}
|
|
63
|
+
export interface TextMessage {
|
|
64
|
+
id: string;
|
|
65
|
+
/** "inbound" | "outbound" */
|
|
66
|
+
direction: string;
|
|
67
|
+
localPhoneNumber: string;
|
|
68
|
+
remotePhoneNumber: string;
|
|
69
|
+
text: string | null;
|
|
70
|
+
/** "sms" | "mms" */
|
|
71
|
+
type: string;
|
|
72
|
+
media: TextMediaItem[] | null;
|
|
73
|
+
/** "active" | "deleted" */
|
|
74
|
+
status: string;
|
|
75
|
+
isRead: boolean;
|
|
76
|
+
createdAt: Date;
|
|
77
|
+
updatedAt: Date;
|
|
78
|
+
}
|
|
79
|
+
export interface TextConversationSummary {
|
|
80
|
+
remotePhoneNumber: string;
|
|
81
|
+
latestText: string | null;
|
|
82
|
+
latestDirection: string;
|
|
83
|
+
latestType: string;
|
|
84
|
+
latestMessageAt: Date;
|
|
85
|
+
unreadCount: number;
|
|
86
|
+
totalCount: number;
|
|
87
|
+
}
|
|
57
88
|
export interface RawPhoneNumber {
|
|
58
89
|
id: string;
|
|
59
90
|
number: string;
|
|
@@ -62,6 +93,7 @@ export interface RawPhoneNumber {
|
|
|
62
93
|
incoming_call_action: string;
|
|
63
94
|
client_websocket_url: string | null;
|
|
64
95
|
incoming_call_webhook_url: string | null;
|
|
96
|
+
incoming_text_webhook_url: string | null;
|
|
65
97
|
created_at: string;
|
|
66
98
|
updated_at: string;
|
|
67
99
|
}
|
|
@@ -91,6 +123,33 @@ export interface RawRateLimitInfo {
|
|
|
91
123
|
export interface RawPhoneCallWithRateLimit extends RawPhoneCall {
|
|
92
124
|
rate_limit: RawRateLimitInfo;
|
|
93
125
|
}
|
|
126
|
+
export interface RawTextMediaItem {
|
|
127
|
+
content_type: string;
|
|
128
|
+
size: number;
|
|
129
|
+
url: string;
|
|
130
|
+
}
|
|
131
|
+
export interface RawTextMessage {
|
|
132
|
+
id: string;
|
|
133
|
+
direction: string;
|
|
134
|
+
local_phone_number: string;
|
|
135
|
+
remote_phone_number: string;
|
|
136
|
+
text: string | null;
|
|
137
|
+
type: string;
|
|
138
|
+
media: RawTextMediaItem[] | null;
|
|
139
|
+
status: string;
|
|
140
|
+
is_read: boolean;
|
|
141
|
+
created_at: string;
|
|
142
|
+
updated_at: string;
|
|
143
|
+
}
|
|
144
|
+
export interface RawTextConversationSummary {
|
|
145
|
+
remote_phone_number: string;
|
|
146
|
+
latest_text: string | null;
|
|
147
|
+
latest_direction: string;
|
|
148
|
+
latest_type: string;
|
|
149
|
+
latest_message_at: string;
|
|
150
|
+
unread_count: number;
|
|
151
|
+
total_count: number;
|
|
152
|
+
}
|
|
94
153
|
export interface RawPhoneTranscript {
|
|
95
154
|
id: string;
|
|
96
155
|
call_id: string;
|
|
@@ -105,4 +164,7 @@ export declare function parsePhoneCall(r: RawPhoneCall): PhoneCall;
|
|
|
105
164
|
export declare function parseRateLimitInfo(r: RawRateLimitInfo): RateLimitInfo;
|
|
106
165
|
export declare function parsePhoneCallWithRateLimit(r: RawPhoneCallWithRateLimit): PhoneCallWithRateLimit;
|
|
107
166
|
export declare function parsePhoneTranscript(r: RawPhoneTranscript): PhoneTranscript;
|
|
167
|
+
export declare function parseTextMediaItem(r: RawTextMediaItem): TextMediaItem;
|
|
168
|
+
export declare function parseTextMessage(r: RawTextMessage): TextMessage;
|
|
169
|
+
export declare function parseTextConversationSummary(r: RawTextConversationSummary): TextConversationSummary;
|
|
108
170
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/phone/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/phone/types.ts"],"names":[],"mappings":"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"}
|
package/dist/phone/types.js
CHANGED
|
@@ -11,6 +11,7 @@ export function parsePhoneNumber(r) {
|
|
|
11
11
|
incomingCallAction: r.incoming_call_action,
|
|
12
12
|
clientWebsocketUrl: r.client_websocket_url,
|
|
13
13
|
incomingCallWebhookUrl: r.incoming_call_webhook_url,
|
|
14
|
+
incomingTextWebhookUrl: r.incoming_text_webhook_url,
|
|
14
15
|
createdAt: new Date(r.created_at),
|
|
15
16
|
updatedAt: new Date(r.updated_at),
|
|
16
17
|
};
|
|
@@ -59,4 +60,37 @@ export function parsePhoneTranscript(r) {
|
|
|
59
60
|
createdAt: new Date(r.created_at),
|
|
60
61
|
};
|
|
61
62
|
}
|
|
63
|
+
export function parseTextMediaItem(r) {
|
|
64
|
+
return {
|
|
65
|
+
contentType: r.content_type,
|
|
66
|
+
size: r.size,
|
|
67
|
+
url: r.url,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
export function parseTextMessage(r) {
|
|
71
|
+
return {
|
|
72
|
+
id: r.id,
|
|
73
|
+
direction: r.direction,
|
|
74
|
+
localPhoneNumber: r.local_phone_number,
|
|
75
|
+
remotePhoneNumber: r.remote_phone_number,
|
|
76
|
+
text: r.text,
|
|
77
|
+
type: r.type,
|
|
78
|
+
media: r.media ? r.media.map(parseTextMediaItem) : null,
|
|
79
|
+
status: r.status,
|
|
80
|
+
isRead: r.is_read,
|
|
81
|
+
createdAt: new Date(r.created_at),
|
|
82
|
+
updatedAt: new Date(r.updated_at),
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
export function parseTextConversationSummary(r) {
|
|
86
|
+
return {
|
|
87
|
+
remotePhoneNumber: r.remote_phone_number,
|
|
88
|
+
latestText: r.latest_text,
|
|
89
|
+
latestDirection: r.latest_direction,
|
|
90
|
+
latestType: r.latest_type,
|
|
91
|
+
latestMessageAt: new Date(r.latest_message_at),
|
|
92
|
+
unreadCount: r.unread_count,
|
|
93
|
+
totalCount: r.total_count,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
62
96
|
//# sourceMappingURL=types.js.map
|
package/dist/phone/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/phone/types.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/phone/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { HttpTransport } from "../../_http.js";
|
|
8
8
|
import type { TOTPCode, TOTPConfig } from "../totp.js";
|
|
9
|
-
import type { AccessRule, DecryptedVaultSecret, SecretPayload, VaultInfo, VaultKey, VaultSecret } from "../types.js";
|
|
9
|
+
import type { AccessRule, DecryptedVaultSecret, SecretPayload, VaultInfo, VaultInitializeResult, VaultKey, VaultSecret } from "../types.js";
|
|
10
10
|
/**
|
|
11
11
|
* Org-level vault operations.
|
|
12
12
|
*
|
|
@@ -23,6 +23,49 @@ export declare class VaultResource {
|
|
|
23
23
|
constructor(http: HttpTransport);
|
|
24
24
|
/** Get vault metadata for the caller's organisation. */
|
|
25
25
|
info(): Promise<VaultInfo>;
|
|
26
|
+
/**
|
|
27
|
+
* Initialize a new vault for the organisation.
|
|
28
|
+
*
|
|
29
|
+
* Generates a random org encryption key, wraps it with the provided
|
|
30
|
+
* vault key, and creates four recovery codes. All cryptographic
|
|
31
|
+
* material is generated client-side; the server only receives
|
|
32
|
+
* ciphertexts and identifiers.
|
|
33
|
+
*
|
|
34
|
+
* @param vaultKey - The vault key (password) to protect the vault.
|
|
35
|
+
* Must be at least 16 characters with uppercase, lowercase, digit,
|
|
36
|
+
* and special character.
|
|
37
|
+
* @param organizationId - The organisation ID (needed for key
|
|
38
|
+
* derivation; the vault does not exist yet so it cannot be fetched).
|
|
39
|
+
* @returns {@link VaultInitializeResult} containing the vault ID,
|
|
40
|
+
* primary key ID, and recovery codes. The recovery codes must be
|
|
41
|
+
* stored securely — they cannot be retrieved again.
|
|
42
|
+
* @throws If the organisation already has an active vault (409).
|
|
43
|
+
*/
|
|
44
|
+
initialize(vaultKey: string, organizationId: string): Promise<VaultInitializeResult>;
|
|
45
|
+
/**
|
|
46
|
+
* Replace the primary vault key (change the vault password).
|
|
47
|
+
*
|
|
48
|
+
* Exactly one of `currentVaultKey` or `recoveryCode` must be
|
|
49
|
+
* provided to authenticate the change:
|
|
50
|
+
*
|
|
51
|
+
* - **Normal update** (`currentVaultKey`): proves knowledge of the
|
|
52
|
+
* current primary key. The old key is deleted.
|
|
53
|
+
* - **Recovery update** (`recoveryCode`): proves knowledge of a
|
|
54
|
+
* recovery code which is consumed (one-time use). The current
|
|
55
|
+
* primary key is also deleted.
|
|
56
|
+
*
|
|
57
|
+
* In both cases a new primary key is created from `newVaultKey`.
|
|
58
|
+
*
|
|
59
|
+
* @param options.newVaultKey - The new vault key (password).
|
|
60
|
+
* @param options.currentVaultKey - Current primary vault key (normal update).
|
|
61
|
+
* @param options.recoveryCode - A recovery code (recovery update).
|
|
62
|
+
* @returns {@link VaultKey} metadata for the newly created primary key.
|
|
63
|
+
*/
|
|
64
|
+
updateKey(options: {
|
|
65
|
+
newVaultKey: string;
|
|
66
|
+
currentVaultKey?: string;
|
|
67
|
+
recoveryCode?: string;
|
|
68
|
+
}): Promise<VaultKey>;
|
|
26
69
|
/**
|
|
27
70
|
* List vault keys (metadata only — no wrapped key material).
|
|
28
71
|
*
|
|
@@ -31,6 +74,12 @@ export declare class VaultResource {
|
|
|
31
74
|
listKeys(options?: {
|
|
32
75
|
keyType?: string;
|
|
33
76
|
}): Promise<VaultKey[]>;
|
|
77
|
+
/**
|
|
78
|
+
* Delete a vault key by auth hash.
|
|
79
|
+
*
|
|
80
|
+
* @param authHash - Auth hash of the key to revoke.
|
|
81
|
+
*/
|
|
82
|
+
deleteKey(authHash: string): Promise<void>;
|
|
34
83
|
/**
|
|
35
84
|
* List vault secrets (metadata only, no encrypted payload).
|
|
36
85
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vault.d.ts","sourceRoot":"","sources":["../../../src/vault/resources/vault.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAe,MAAM,gBAAgB,CAAC;AAC5D,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"vault.d.ts","sourceRoot":"","sources":["../../../src/vault/resources/vault.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* UnlockedVault — crypto-enabled wrapper for secret CRUD after unlock.
|
|
6
6
|
*/
|
|
7
7
|
import { generateTotp, parseTotpUri } from "../totp.js";
|
|
8
|
-
import { computeAuthHash, decryptPayload, deriveMasterKey, deriveSalt, encryptPayload, unwrapOrgKey, } from "../crypto.js";
|
|
8
|
+
import { computeAuthHash, decryptPayload, deriveMasterKey, deriveSalt, encryptPayload, generateOrgEncryptionKey, generateRecoveryCode, generateVaultKeyMaterial, unwrapOrgKey, vaultKeyMaterialToWire, } from "../crypto.js";
|
|
9
9
|
import { VaultSecretType, inferSecretType, parseAccessRule, parsePayload, parseVaultInfo, parseVaultKey, parseVaultSecret, parseVaultSecretDetail, serializePayload, } from "../types.js";
|
|
10
10
|
/**
|
|
11
11
|
* Org-level vault operations.
|
|
@@ -31,6 +31,120 @@ export class VaultResource {
|
|
|
31
31
|
const data = await this.http.get("/info");
|
|
32
32
|
return parseVaultInfo(data);
|
|
33
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* Initialize a new vault for the organisation.
|
|
36
|
+
*
|
|
37
|
+
* Generates a random org encryption key, wraps it with the provided
|
|
38
|
+
* vault key, and creates four recovery codes. All cryptographic
|
|
39
|
+
* material is generated client-side; the server only receives
|
|
40
|
+
* ciphertexts and identifiers.
|
|
41
|
+
*
|
|
42
|
+
* @param vaultKey - The vault key (password) to protect the vault.
|
|
43
|
+
* Must be at least 16 characters with uppercase, lowercase, digit,
|
|
44
|
+
* and special character.
|
|
45
|
+
* @param organizationId - The organisation ID (needed for key
|
|
46
|
+
* derivation; the vault does not exist yet so it cannot be fetched).
|
|
47
|
+
* @returns {@link VaultInitializeResult} containing the vault ID,
|
|
48
|
+
* primary key ID, and recovery codes. The recovery codes must be
|
|
49
|
+
* stored securely — they cannot be retrieved again.
|
|
50
|
+
* @throws If the organisation already has an active vault (409).
|
|
51
|
+
*/
|
|
52
|
+
async initialize(vaultKey, organizationId) {
|
|
53
|
+
const orgEncryptionKey = generateOrgEncryptionKey();
|
|
54
|
+
const primaryMaterial = await generateVaultKeyMaterial(vaultKey, organizationId, orgEncryptionKey);
|
|
55
|
+
const recoveryCodes = [];
|
|
56
|
+
const recoveryWires = [];
|
|
57
|
+
for (let i = 0; i < 4; i++) {
|
|
58
|
+
const [code, material] = await generateRecoveryCode(organizationId, orgEncryptionKey);
|
|
59
|
+
recoveryCodes.push(code);
|
|
60
|
+
recoveryWires.push(vaultKeyMaterialToWire(material));
|
|
61
|
+
}
|
|
62
|
+
const data = await this.http.post("/initialize", {
|
|
63
|
+
vault_key: vaultKeyMaterialToWire(primaryMaterial),
|
|
64
|
+
recovery_keys: recoveryWires,
|
|
65
|
+
});
|
|
66
|
+
return {
|
|
67
|
+
vaultId: data.vault_id,
|
|
68
|
+
vaultKeyId: data.vault_key_id,
|
|
69
|
+
recoveryKeyCount: data.recovery_key_count,
|
|
70
|
+
recoveryCodes,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Replace the primary vault key (change the vault password).
|
|
75
|
+
*
|
|
76
|
+
* Exactly one of `currentVaultKey` or `recoveryCode` must be
|
|
77
|
+
* provided to authenticate the change:
|
|
78
|
+
*
|
|
79
|
+
* - **Normal update** (`currentVaultKey`): proves knowledge of the
|
|
80
|
+
* current primary key. The old key is deleted.
|
|
81
|
+
* - **Recovery update** (`recoveryCode`): proves knowledge of a
|
|
82
|
+
* recovery code which is consumed (one-time use). The current
|
|
83
|
+
* primary key is also deleted.
|
|
84
|
+
*
|
|
85
|
+
* In both cases a new primary key is created from `newVaultKey`.
|
|
86
|
+
*
|
|
87
|
+
* @param options.newVaultKey - The new vault key (password).
|
|
88
|
+
* @param options.currentVaultKey - Current primary vault key (normal update).
|
|
89
|
+
* @param options.recoveryCode - A recovery code (recovery update).
|
|
90
|
+
* @returns {@link VaultKey} metadata for the newly created primary key.
|
|
91
|
+
*/
|
|
92
|
+
async updateKey(options) {
|
|
93
|
+
const hasCurrentKey = options.currentVaultKey !== undefined;
|
|
94
|
+
const hasRecoveryCode = options.recoveryCode !== undefined;
|
|
95
|
+
if (hasCurrentKey === hasRecoveryCode) {
|
|
96
|
+
throw new Error("Exactly one of currentVaultKey or recoveryCode must be provided");
|
|
97
|
+
}
|
|
98
|
+
const authKey = options.currentVaultKey ?? options.recoveryCode;
|
|
99
|
+
// Fetch org_id (vault must already exist)
|
|
100
|
+
const vaultInfo = await this.info();
|
|
101
|
+
const salt = deriveSalt(vaultInfo.organizationId);
|
|
102
|
+
// Derive master key and auth hash from the authenticating key
|
|
103
|
+
const authMasterKey = await deriveMasterKey(authKey, salt);
|
|
104
|
+
const authAuthHash = computeAuthHash(authMasterKey);
|
|
105
|
+
// Fetch wrapped org encryption key
|
|
106
|
+
const unlockData = await this.http.get("/unlock", { auth_hash: authAuthHash });
|
|
107
|
+
const wrapped = unlockData.wrapped_org_encryption_key;
|
|
108
|
+
if (!wrapped) {
|
|
109
|
+
throw new Error("No vault key matched. " +
|
|
110
|
+
"Check that the vault key or recovery code is correct.");
|
|
111
|
+
}
|
|
112
|
+
// Unwrap org encryption key (try each active key ID as AAD)
|
|
113
|
+
const keysData = await this.http.get("/keys");
|
|
114
|
+
const activeKeyIds = keysData
|
|
115
|
+
.filter((k) => k.status === "active")
|
|
116
|
+
.map((k) => k.id);
|
|
117
|
+
let orgKey = null;
|
|
118
|
+
for (const keyId of activeKeyIds) {
|
|
119
|
+
try {
|
|
120
|
+
orgKey = unwrapOrgKey(authMasterKey, wrapped, keyId);
|
|
121
|
+
break;
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
if (!orgKey) {
|
|
128
|
+
throw new Error("Failed to unwrap org encryption key. " +
|
|
129
|
+
"Check that the vault key is correct.");
|
|
130
|
+
}
|
|
131
|
+
// Generate new primary key material
|
|
132
|
+
const newMaterial = await generateVaultKeyMaterial(options.newVaultKey, vaultInfo.organizationId, orgKey);
|
|
133
|
+
// PUT /keys/primary
|
|
134
|
+
const body = {
|
|
135
|
+
id: newMaterial.id,
|
|
136
|
+
wrapped_org_encryption_key: newMaterial.wrappedOrgEncryptionKey,
|
|
137
|
+
auth_hash: newMaterial.authHash,
|
|
138
|
+
};
|
|
139
|
+
if (hasCurrentKey) {
|
|
140
|
+
body.current_auth_hash = authAuthHash;
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
body.recovery_auth_hash = authAuthHash;
|
|
144
|
+
}
|
|
145
|
+
const data = await this.http.put("/keys/primary", body);
|
|
146
|
+
return parseVaultKey(data);
|
|
147
|
+
}
|
|
34
148
|
// ------------------------------------------------------------------
|
|
35
149
|
// Keys (read-only via API key)
|
|
36
150
|
// ------------------------------------------------------------------
|
|
@@ -46,6 +160,14 @@ export class VaultResource {
|
|
|
46
160
|
const data = await this.http.get("/keys", params);
|
|
47
161
|
return data.map(parseVaultKey);
|
|
48
162
|
}
|
|
163
|
+
/**
|
|
164
|
+
* Delete a vault key by auth hash.
|
|
165
|
+
*
|
|
166
|
+
* @param authHash - Auth hash of the key to revoke.
|
|
167
|
+
*/
|
|
168
|
+
async deleteKey(authHash) {
|
|
169
|
+
await this.http.delete(`/keys/${authHash}`);
|
|
170
|
+
}
|
|
49
171
|
// ------------------------------------------------------------------
|
|
50
172
|
// Secrets (metadata-only operations)
|
|
51
173
|
// ------------------------------------------------------------------
|