@drawbridge/drawbridge-utils 0.0.129 → 0.0.130
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/pricing.cjs +1 -1
- package/dist/pricing.d.cts +6 -4
- package/dist/pricing.d.ts +6 -4
- package/dist/pricing.js +1 -1
- package/dist/twilio.cjs +14 -7
- package/dist/twilio.d.cts +23 -7
- package/dist/twilio.d.ts +23 -7
- package/dist/twilio.js +14 -7
- package/package.json +1 -1
package/dist/pricing.cjs
CHANGED
package/dist/pricing.d.cts
CHANGED
|
@@ -194,12 +194,14 @@ const channels = {
|
|
|
194
194
|
// joins the organization's subscription as its own line and leaves when the
|
|
195
195
|
// number is released. CENTS per month, like every stored money value.
|
|
196
196
|
//
|
|
197
|
-
//
|
|
198
|
-
//
|
|
199
|
-
//
|
|
197
|
+
// $15 was DECIDED in the platform-sender pricing session (2026-08-30): it
|
|
198
|
+
// covers the worst case of number rental (~$1-2) + carrier campaign fees
|
|
199
|
+
// (~$2-15) + amortized A2P registration, in line with what SMS platforms
|
|
200
|
+
// charge for a dedicated number. Changing it is this one line plus the
|
|
201
|
+
// matching Stripe Price.
|
|
200
202
|
const numbers = {
|
|
201
203
|
sms : {
|
|
202
|
-
monthlyCents :
|
|
204
|
+
monthlyCents : 1500
|
|
203
205
|
}
|
|
204
206
|
};
|
|
205
207
|
|
package/dist/pricing.d.ts
CHANGED
|
@@ -194,12 +194,14 @@ const channels = {
|
|
|
194
194
|
// joins the organization's subscription as its own line and leaves when the
|
|
195
195
|
// number is released. CENTS per month, like every stored money value.
|
|
196
196
|
//
|
|
197
|
-
//
|
|
198
|
-
//
|
|
199
|
-
//
|
|
197
|
+
// $15 was DECIDED in the platform-sender pricing session (2026-08-30): it
|
|
198
|
+
// covers the worst case of number rental (~$1-2) + carrier campaign fees
|
|
199
|
+
// (~$2-15) + amortized A2P registration, in line with what SMS platforms
|
|
200
|
+
// charge for a dedicated number. Changing it is this one line plus the
|
|
201
|
+
// matching Stripe Price.
|
|
200
202
|
const numbers = {
|
|
201
203
|
sms : {
|
|
202
|
-
monthlyCents :
|
|
204
|
+
monthlyCents : 1500
|
|
203
205
|
}
|
|
204
206
|
};
|
|
205
207
|
|
package/dist/pricing.js
CHANGED
package/dist/twilio.cjs
CHANGED
|
@@ -113,8 +113,9 @@ var twilio = {
|
|
|
113
113
|
// body: PhoneNumber (E.164), SmsUrl, SmsMethod
|
|
114
114
|
// DELETE /2010-04-01/Accounts/{AccountSid}/IncomingPhoneNumbers/{Sid}.json
|
|
115
115
|
// Basic auth throughout, like Messages.
|
|
116
|
-
searchNumbers: async ({ accountSid, areaCode, authToken, contains, country = "US", limit = 10, request: request2 = request }) => {
|
|
116
|
+
searchNumbers: async ({ accountSid, areaCode, authToken, contains, country = "US", cursor, limit = 10, request: request2 = request }) => {
|
|
117
117
|
if (!accountSid || !authToken) throw new Error("Twilio credentials missing \u2014 accountSid, authToken");
|
|
118
|
+
const [page, token] = String(cursor || "").split("~");
|
|
118
119
|
const result = await request2({
|
|
119
120
|
method: "GET",
|
|
120
121
|
url: "https://api.twilio.com/2010-04-01/Accounts/" + accountSid + "/AvailablePhoneNumbers/" + country + "/Local.json",
|
|
@@ -128,14 +129,20 @@ var twilio = {
|
|
|
128
129
|
// `Contains` is the vendor's matching-pattern filter — digits
|
|
129
130
|
// match anywhere in the number, so one search box serves "my
|
|
130
131
|
// area code" and "ends in 7777" alike.
|
|
131
|
-
...contains && { Contains: contains }
|
|
132
|
+
...contains && { Contains: contains },
|
|
133
|
+
...token && { Page: page, PageToken: token }
|
|
132
134
|
}
|
|
133
135
|
});
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
136
|
+
const nextQuery = (result == null ? void 0 : result.next_page_uri) ? new URLSearchParams(String(result.next_page_uri).split("?")[1] || "") : null;
|
|
137
|
+
const nextToken = nextQuery == null ? void 0 : nextQuery.get("PageToken");
|
|
138
|
+
return {
|
|
139
|
+
cursor: nextToken ? (nextQuery.get("Page") || "") + "~" + nextToken : null,
|
|
140
|
+
items: ((result == null ? void 0 : result.available_phone_numbers) || []).map((entry) => ({
|
|
141
|
+
friendly: entry.friendly_name,
|
|
142
|
+
locality: entry.locality || entry.region || null,
|
|
143
|
+
number: entry.phone_number
|
|
144
|
+
}))
|
|
145
|
+
};
|
|
139
146
|
},
|
|
140
147
|
purchaseNumber: async ({ accountSid, authToken, number, request: request2 = request, smsUrl }) => {
|
|
141
148
|
if (!accountSid || !authToken) throw new Error("Twilio credentials missing \u2014 accountSid, authToken");
|
package/dist/twilio.d.cts
CHANGED
|
@@ -77,10 +77,16 @@ const twilio = {
|
|
|
77
77
|
// DELETE /2010-04-01/Accounts/{AccountSid}/IncomingPhoneNumbers/{Sid}.json
|
|
78
78
|
// Basic auth throughout, like Messages.
|
|
79
79
|
|
|
80
|
-
searchNumbers : async ({ accountSid, areaCode, authToken, contains, country = 'US', limit = 10, request: request$1 = request }) => {
|
|
80
|
+
searchNumbers : async ({ accountSid, areaCode, authToken, contains, country = 'US', cursor, limit = 10, request: request$1 = request }) => {
|
|
81
81
|
|
|
82
82
|
if( ! accountSid || ! authToken ) throw new Error( 'Twilio credentials missing — accountSid, authToken' );
|
|
83
83
|
|
|
84
|
+
// The vendor pages with Page + PageToken and answers next_page_uri
|
|
85
|
+
// (AvailablePhoneNumbers resource docs). Ours is one opaque cursor —
|
|
86
|
+
// `<Page>~<PageToken>` — so the caller never learns the vendor's two
|
|
87
|
+
// halves and cannot recombine them wrong.
|
|
88
|
+
const [ page, token ] = String( cursor || '' ).split( '~' );
|
|
89
|
+
|
|
84
90
|
const result = await request$1({
|
|
85
91
|
method : 'GET',
|
|
86
92
|
url : 'https://api.twilio.com/2010-04-01/Accounts/' + accountSid + '/AvailablePhoneNumbers/' + country + '/Local.json',
|
|
@@ -94,16 +100,26 @@ const twilio = {
|
|
|
94
100
|
// `Contains` is the vendor's matching-pattern filter — digits
|
|
95
101
|
// match anywhere in the number, so one search box serves "my
|
|
96
102
|
// area code" and "ends in 7777" alike.
|
|
97
|
-
...( contains && { Contains : contains } )
|
|
103
|
+
...( contains && { Contains : contains } ),
|
|
104
|
+
...( token && { Page : page, PageToken : token } )
|
|
98
105
|
}
|
|
99
106
|
});
|
|
100
107
|
|
|
108
|
+
const nextQuery = result?.next_page_uri
|
|
109
|
+
? new URLSearchParams( String( result.next_page_uri ).split( '?' )[ 1 ] || '' )
|
|
110
|
+
: null;
|
|
111
|
+
|
|
112
|
+
const nextToken = nextQuery?.get( 'PageToken' );
|
|
113
|
+
|
|
101
114
|
// The caller-facing shape is ours; the vendor's field names stay here.
|
|
102
|
-
return
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
115
|
+
return {
|
|
116
|
+
cursor : nextToken ? ( nextQuery.get( 'Page' ) || '' ) + '~' + nextToken : null,
|
|
117
|
+
items : ( result?.available_phone_numbers || [] ).map( ( entry ) => ({
|
|
118
|
+
friendly : entry.friendly_name,
|
|
119
|
+
locality : entry.locality || entry.region || null,
|
|
120
|
+
number : entry.phone_number
|
|
121
|
+
}) )
|
|
122
|
+
};
|
|
107
123
|
|
|
108
124
|
},
|
|
109
125
|
|
package/dist/twilio.d.ts
CHANGED
|
@@ -77,10 +77,16 @@ const twilio = {
|
|
|
77
77
|
// DELETE /2010-04-01/Accounts/{AccountSid}/IncomingPhoneNumbers/{Sid}.json
|
|
78
78
|
// Basic auth throughout, like Messages.
|
|
79
79
|
|
|
80
|
-
searchNumbers : async ({ accountSid, areaCode, authToken, contains, country = 'US', limit = 10, request: request$1 = request }) => {
|
|
80
|
+
searchNumbers : async ({ accountSid, areaCode, authToken, contains, country = 'US', cursor, limit = 10, request: request$1 = request }) => {
|
|
81
81
|
|
|
82
82
|
if( ! accountSid || ! authToken ) throw new Error( 'Twilio credentials missing — accountSid, authToken' );
|
|
83
83
|
|
|
84
|
+
// The vendor pages with Page + PageToken and answers next_page_uri
|
|
85
|
+
// (AvailablePhoneNumbers resource docs). Ours is one opaque cursor —
|
|
86
|
+
// `<Page>~<PageToken>` — so the caller never learns the vendor's two
|
|
87
|
+
// halves and cannot recombine them wrong.
|
|
88
|
+
const [ page, token ] = String( cursor || '' ).split( '~' );
|
|
89
|
+
|
|
84
90
|
const result = await request$1({
|
|
85
91
|
method : 'GET',
|
|
86
92
|
url : 'https://api.twilio.com/2010-04-01/Accounts/' + accountSid + '/AvailablePhoneNumbers/' + country + '/Local.json',
|
|
@@ -94,16 +100,26 @@ const twilio = {
|
|
|
94
100
|
// `Contains` is the vendor's matching-pattern filter — digits
|
|
95
101
|
// match anywhere in the number, so one search box serves "my
|
|
96
102
|
// area code" and "ends in 7777" alike.
|
|
97
|
-
...( contains && { Contains : contains } )
|
|
103
|
+
...( contains && { Contains : contains } ),
|
|
104
|
+
...( token && { Page : page, PageToken : token } )
|
|
98
105
|
}
|
|
99
106
|
});
|
|
100
107
|
|
|
108
|
+
const nextQuery = result?.next_page_uri
|
|
109
|
+
? new URLSearchParams( String( result.next_page_uri ).split( '?' )[ 1 ] || '' )
|
|
110
|
+
: null;
|
|
111
|
+
|
|
112
|
+
const nextToken = nextQuery?.get( 'PageToken' );
|
|
113
|
+
|
|
101
114
|
// The caller-facing shape is ours; the vendor's field names stay here.
|
|
102
|
-
return
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
115
|
+
return {
|
|
116
|
+
cursor : nextToken ? ( nextQuery.get( 'Page' ) || '' ) + '~' + nextToken : null,
|
|
117
|
+
items : ( result?.available_phone_numbers || [] ).map( ( entry ) => ({
|
|
118
|
+
friendly : entry.friendly_name,
|
|
119
|
+
locality : entry.locality || entry.region || null,
|
|
120
|
+
number : entry.phone_number
|
|
121
|
+
}) )
|
|
122
|
+
};
|
|
107
123
|
|
|
108
124
|
},
|
|
109
125
|
|
package/dist/twilio.js
CHANGED
|
@@ -88,8 +88,9 @@ var twilio = {
|
|
|
88
88
|
// body: PhoneNumber (E.164), SmsUrl, SmsMethod
|
|
89
89
|
// DELETE /2010-04-01/Accounts/{AccountSid}/IncomingPhoneNumbers/{Sid}.json
|
|
90
90
|
// Basic auth throughout, like Messages.
|
|
91
|
-
searchNumbers: async ({ accountSid, areaCode, authToken, contains, country = "US", limit = 10, request: request2 = request }) => {
|
|
91
|
+
searchNumbers: async ({ accountSid, areaCode, authToken, contains, country = "US", cursor, limit = 10, request: request2 = request }) => {
|
|
92
92
|
if (!accountSid || !authToken) throw new Error("Twilio credentials missing \u2014 accountSid, authToken");
|
|
93
|
+
const [page, token] = String(cursor || "").split("~");
|
|
93
94
|
const result = await request2({
|
|
94
95
|
method: "GET",
|
|
95
96
|
url: "https://api.twilio.com/2010-04-01/Accounts/" + accountSid + "/AvailablePhoneNumbers/" + country + "/Local.json",
|
|
@@ -103,14 +104,20 @@ var twilio = {
|
|
|
103
104
|
// `Contains` is the vendor's matching-pattern filter — digits
|
|
104
105
|
// match anywhere in the number, so one search box serves "my
|
|
105
106
|
// area code" and "ends in 7777" alike.
|
|
106
|
-
...contains && { Contains: contains }
|
|
107
|
+
...contains && { Contains: contains },
|
|
108
|
+
...token && { Page: page, PageToken: token }
|
|
107
109
|
}
|
|
108
110
|
});
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
111
|
+
const nextQuery = (result == null ? void 0 : result.next_page_uri) ? new URLSearchParams(String(result.next_page_uri).split("?")[1] || "") : null;
|
|
112
|
+
const nextToken = nextQuery == null ? void 0 : nextQuery.get("PageToken");
|
|
113
|
+
return {
|
|
114
|
+
cursor: nextToken ? (nextQuery.get("Page") || "") + "~" + nextToken : null,
|
|
115
|
+
items: ((result == null ? void 0 : result.available_phone_numbers) || []).map((entry) => ({
|
|
116
|
+
friendly: entry.friendly_name,
|
|
117
|
+
locality: entry.locality || entry.region || null,
|
|
118
|
+
number: entry.phone_number
|
|
119
|
+
}))
|
|
120
|
+
};
|
|
114
121
|
},
|
|
115
122
|
purchaseNumber: async ({ accountSid, authToken, number, request: request2 = request, smsUrl }) => {
|
|
116
123
|
if (!accountSid || !authToken) throw new Error("Twilio credentials missing \u2014 accountSid, authToken");
|
package/package.json
CHANGED