@drawbridge/drawbridge-utils 0.0.127 → 0.0.128

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/twilio.cjs CHANGED
@@ -103,6 +103,68 @@ var twilio = {
103
103
  To: to
104
104
  }
105
105
  });
106
+ },
107
+ // NUMBER LIFECYCLE, same transport discipline as sms above. Endpoints and
108
+ // parameter names are Twilio's own, from the AvailablePhoneNumbers and
109
+ // IncomingPhoneNumbers resource docs:
110
+ // GET /2010-04-01/Accounts/{AccountSid}/AvailablePhoneNumbers/{CountryCode}/Local.json
111
+ // query: SmsEnabled, AreaCode (US/CA only), PageSize (1-1000)
112
+ // POST /2010-04-01/Accounts/{AccountSid}/IncomingPhoneNumbers.json
113
+ // body: PhoneNumber (E.164), SmsUrl, SmsMethod
114
+ // DELETE /2010-04-01/Accounts/{AccountSid}/IncomingPhoneNumbers/{Sid}.json
115
+ // Basic auth throughout, like Messages.
116
+ searchNumbers: async ({ accountSid, areaCode, authToken, country = "US", limit = 10, request: request2 = request }) => {
117
+ if (!accountSid || !authToken) throw new Error("Twilio credentials missing \u2014 accountSid, authToken");
118
+ const result = await request2({
119
+ method: "GET",
120
+ url: "https://api.twilio.com/2010-04-01/Accounts/" + accountSid + "/AvailablePhoneNumbers/" + country + "/Local.json",
121
+ headers: {
122
+ "Authorization": "Basic " + Buffer.from(accountSid + ":" + authToken).toString("base64")
123
+ },
124
+ query: {
125
+ SmsEnabled: true,
126
+ PageSize: limit,
127
+ ...areaCode && { AreaCode: areaCode }
128
+ }
129
+ });
130
+ return ((result == null ? void 0 : result.available_phone_numbers) || []).map((entry) => ({
131
+ friendly: entry.friendly_name,
132
+ locality: entry.locality || entry.region || null,
133
+ number: entry.phone_number
134
+ }));
135
+ },
136
+ purchaseNumber: async ({ accountSid, authToken, number, request: request2 = request, smsUrl }) => {
137
+ if (!accountSid || !authToken) throw new Error("Twilio credentials missing \u2014 accountSid, authToken");
138
+ if (!number) throw new Error("Twilio purchase needs the E.164 number to buy");
139
+ const result = await request2({
140
+ method: "POST",
141
+ type: "form",
142
+ url: "https://api.twilio.com/2010-04-01/Accounts/" + accountSid + "/IncomingPhoneNumbers.json",
143
+ headers: {
144
+ "Authorization": "Basic " + Buffer.from(accountSid + ":" + authToken).toString("base64")
145
+ },
146
+ body: {
147
+ PhoneNumber: number,
148
+ // Inbound STOP/HELP must land on the same generic route every
149
+ // platform number uses — the drawbridge manifest owns inbound.
150
+ ...smsUrl && { SmsUrl: smsUrl, SmsMethod: "POST" }
151
+ }
152
+ });
153
+ return {
154
+ number: result == null ? void 0 : result.phone_number,
155
+ sid: result == null ? void 0 : result.sid
156
+ };
157
+ },
158
+ releaseNumber: async ({ accountSid, authToken, request: request2 = request, sid }) => {
159
+ if (!accountSid || !authToken) throw new Error("Twilio credentials missing \u2014 accountSid, authToken");
160
+ if (!sid) throw new Error("Twilio release needs the IncomingPhoneNumber sid");
161
+ return await request2({
162
+ method: "DELETE",
163
+ url: "https://api.twilio.com/2010-04-01/Accounts/" + accountSid + "/IncomingPhoneNumbers/" + sid + ".json",
164
+ headers: {
165
+ "Authorization": "Basic " + Buffer.from(accountSid + ":" + authToken).toString("base64")
166
+ }
167
+ });
106
168
  }
107
169
  };
108
170
  // Annotate the CommonJS export names for ESM import in node:
package/dist/twilio.d.cts CHANGED
@@ -65,6 +65,84 @@ const twilio = {
65
65
  }
66
66
  });
67
67
 
68
+ },
69
+
70
+ // NUMBER LIFECYCLE, same transport discipline as sms above. Endpoints and
71
+ // parameter names are Twilio's own, from the AvailablePhoneNumbers and
72
+ // IncomingPhoneNumbers resource docs:
73
+ // GET /2010-04-01/Accounts/{AccountSid}/AvailablePhoneNumbers/{CountryCode}/Local.json
74
+ // query: SmsEnabled, AreaCode (US/CA only), PageSize (1-1000)
75
+ // POST /2010-04-01/Accounts/{AccountSid}/IncomingPhoneNumbers.json
76
+ // body: PhoneNumber (E.164), SmsUrl, SmsMethod
77
+ // DELETE /2010-04-01/Accounts/{AccountSid}/IncomingPhoneNumbers/{Sid}.json
78
+ // Basic auth throughout, like Messages.
79
+
80
+ searchNumbers : async ({ accountSid, areaCode, authToken, country = 'US', limit = 10, request: request$1 = request }) => {
81
+
82
+ if( ! accountSid || ! authToken ) throw new Error( 'Twilio credentials missing — accountSid, authToken' );
83
+
84
+ const result = await request$1({
85
+ method : 'GET',
86
+ url : 'https://api.twilio.com/2010-04-01/Accounts/' + accountSid + '/AvailablePhoneNumbers/' + country + '/Local.json',
87
+ headers : {
88
+ 'Authorization' : 'Basic ' + Buffer.from( accountSid + ':' + authToken ).toString( 'base64' )
89
+ },
90
+ query : {
91
+ SmsEnabled : true,
92
+ PageSize : limit,
93
+ ...( areaCode && { AreaCode : areaCode } )
94
+ }
95
+ });
96
+
97
+ // The caller-facing shape is ours; the vendor's field names stay here.
98
+ return ( result?.available_phone_numbers || [] ).map( ( entry ) => ({
99
+ friendly : entry.friendly_name,
100
+ locality : entry.locality || entry.region || null,
101
+ number : entry.phone_number
102
+ }) );
103
+
104
+ },
105
+
106
+ purchaseNumber : async ({ accountSid, authToken, number, request: request$1 = request, smsUrl }) => {
107
+
108
+ if( ! accountSid || ! authToken ) throw new Error( 'Twilio credentials missing — accountSid, authToken' );
109
+ if( ! number ) throw new Error( 'Twilio purchase needs the E.164 number to buy' );
110
+
111
+ const result = await request$1({
112
+ method : 'POST',
113
+ type : 'form',
114
+ url : 'https://api.twilio.com/2010-04-01/Accounts/' + accountSid + '/IncomingPhoneNumbers.json',
115
+ headers : {
116
+ 'Authorization' : 'Basic ' + Buffer.from( accountSid + ':' + authToken ).toString( 'base64' )
117
+ },
118
+ body : {
119
+ PhoneNumber : number,
120
+ // Inbound STOP/HELP must land on the same generic route every
121
+ // platform number uses — the drawbridge manifest owns inbound.
122
+ ...( smsUrl && { SmsUrl : smsUrl, SmsMethod : 'POST' } )
123
+ }
124
+ });
125
+
126
+ return {
127
+ number : result?.phone_number,
128
+ sid : result?.sid
129
+ };
130
+
131
+ },
132
+
133
+ releaseNumber : async ({ accountSid, authToken, request: request$1 = request, sid }) => {
134
+
135
+ if( ! accountSid || ! authToken ) throw new Error( 'Twilio credentials missing — accountSid, authToken' );
136
+ if( ! sid ) throw new Error( 'Twilio release needs the IncomingPhoneNumber sid' );
137
+
138
+ return await request$1({
139
+ method : 'DELETE',
140
+ url : 'https://api.twilio.com/2010-04-01/Accounts/' + accountSid + '/IncomingPhoneNumbers/' + sid + '.json',
141
+ headers : {
142
+ 'Authorization' : 'Basic ' + Buffer.from( accountSid + ':' + authToken ).toString( 'base64' )
143
+ }
144
+ });
145
+
68
146
  }
69
147
 
70
148
  };
package/dist/twilio.d.ts CHANGED
@@ -65,6 +65,84 @@ const twilio = {
65
65
  }
66
66
  });
67
67
 
68
+ },
69
+
70
+ // NUMBER LIFECYCLE, same transport discipline as sms above. Endpoints and
71
+ // parameter names are Twilio's own, from the AvailablePhoneNumbers and
72
+ // IncomingPhoneNumbers resource docs:
73
+ // GET /2010-04-01/Accounts/{AccountSid}/AvailablePhoneNumbers/{CountryCode}/Local.json
74
+ // query: SmsEnabled, AreaCode (US/CA only), PageSize (1-1000)
75
+ // POST /2010-04-01/Accounts/{AccountSid}/IncomingPhoneNumbers.json
76
+ // body: PhoneNumber (E.164), SmsUrl, SmsMethod
77
+ // DELETE /2010-04-01/Accounts/{AccountSid}/IncomingPhoneNumbers/{Sid}.json
78
+ // Basic auth throughout, like Messages.
79
+
80
+ searchNumbers : async ({ accountSid, areaCode, authToken, country = 'US', limit = 10, request: request$1 = request }) => {
81
+
82
+ if( ! accountSid || ! authToken ) throw new Error( 'Twilio credentials missing — accountSid, authToken' );
83
+
84
+ const result = await request$1({
85
+ method : 'GET',
86
+ url : 'https://api.twilio.com/2010-04-01/Accounts/' + accountSid + '/AvailablePhoneNumbers/' + country + '/Local.json',
87
+ headers : {
88
+ 'Authorization' : 'Basic ' + Buffer.from( accountSid + ':' + authToken ).toString( 'base64' )
89
+ },
90
+ query : {
91
+ SmsEnabled : true,
92
+ PageSize : limit,
93
+ ...( areaCode && { AreaCode : areaCode } )
94
+ }
95
+ });
96
+
97
+ // The caller-facing shape is ours; the vendor's field names stay here.
98
+ return ( result?.available_phone_numbers || [] ).map( ( entry ) => ({
99
+ friendly : entry.friendly_name,
100
+ locality : entry.locality || entry.region || null,
101
+ number : entry.phone_number
102
+ }) );
103
+
104
+ },
105
+
106
+ purchaseNumber : async ({ accountSid, authToken, number, request: request$1 = request, smsUrl }) => {
107
+
108
+ if( ! accountSid || ! authToken ) throw new Error( 'Twilio credentials missing — accountSid, authToken' );
109
+ if( ! number ) throw new Error( 'Twilio purchase needs the E.164 number to buy' );
110
+
111
+ const result = await request$1({
112
+ method : 'POST',
113
+ type : 'form',
114
+ url : 'https://api.twilio.com/2010-04-01/Accounts/' + accountSid + '/IncomingPhoneNumbers.json',
115
+ headers : {
116
+ 'Authorization' : 'Basic ' + Buffer.from( accountSid + ':' + authToken ).toString( 'base64' )
117
+ },
118
+ body : {
119
+ PhoneNumber : number,
120
+ // Inbound STOP/HELP must land on the same generic route every
121
+ // platform number uses — the drawbridge manifest owns inbound.
122
+ ...( smsUrl && { SmsUrl : smsUrl, SmsMethod : 'POST' } )
123
+ }
124
+ });
125
+
126
+ return {
127
+ number : result?.phone_number,
128
+ sid : result?.sid
129
+ };
130
+
131
+ },
132
+
133
+ releaseNumber : async ({ accountSid, authToken, request: request$1 = request, sid }) => {
134
+
135
+ if( ! accountSid || ! authToken ) throw new Error( 'Twilio credentials missing — accountSid, authToken' );
136
+ if( ! sid ) throw new Error( 'Twilio release needs the IncomingPhoneNumber sid' );
137
+
138
+ return await request$1({
139
+ method : 'DELETE',
140
+ url : 'https://api.twilio.com/2010-04-01/Accounts/' + accountSid + '/IncomingPhoneNumbers/' + sid + '.json',
141
+ headers : {
142
+ 'Authorization' : 'Basic ' + Buffer.from( accountSid + ':' + authToken ).toString( 'base64' )
143
+ }
144
+ });
145
+
68
146
  }
69
147
 
70
148
  };
package/dist/twilio.js CHANGED
@@ -78,6 +78,68 @@ var twilio = {
78
78
  To: to
79
79
  }
80
80
  });
81
+ },
82
+ // NUMBER LIFECYCLE, same transport discipline as sms above. Endpoints and
83
+ // parameter names are Twilio's own, from the AvailablePhoneNumbers and
84
+ // IncomingPhoneNumbers resource docs:
85
+ // GET /2010-04-01/Accounts/{AccountSid}/AvailablePhoneNumbers/{CountryCode}/Local.json
86
+ // query: SmsEnabled, AreaCode (US/CA only), PageSize (1-1000)
87
+ // POST /2010-04-01/Accounts/{AccountSid}/IncomingPhoneNumbers.json
88
+ // body: PhoneNumber (E.164), SmsUrl, SmsMethod
89
+ // DELETE /2010-04-01/Accounts/{AccountSid}/IncomingPhoneNumbers/{Sid}.json
90
+ // Basic auth throughout, like Messages.
91
+ searchNumbers: async ({ accountSid, areaCode, authToken, country = "US", limit = 10, request: request2 = request }) => {
92
+ if (!accountSid || !authToken) throw new Error("Twilio credentials missing \u2014 accountSid, authToken");
93
+ const result = await request2({
94
+ method: "GET",
95
+ url: "https://api.twilio.com/2010-04-01/Accounts/" + accountSid + "/AvailablePhoneNumbers/" + country + "/Local.json",
96
+ headers: {
97
+ "Authorization": "Basic " + Buffer.from(accountSid + ":" + authToken).toString("base64")
98
+ },
99
+ query: {
100
+ SmsEnabled: true,
101
+ PageSize: limit,
102
+ ...areaCode && { AreaCode: areaCode }
103
+ }
104
+ });
105
+ return ((result == null ? void 0 : result.available_phone_numbers) || []).map((entry) => ({
106
+ friendly: entry.friendly_name,
107
+ locality: entry.locality || entry.region || null,
108
+ number: entry.phone_number
109
+ }));
110
+ },
111
+ purchaseNumber: async ({ accountSid, authToken, number, request: request2 = request, smsUrl }) => {
112
+ if (!accountSid || !authToken) throw new Error("Twilio credentials missing \u2014 accountSid, authToken");
113
+ if (!number) throw new Error("Twilio purchase needs the E.164 number to buy");
114
+ const result = await request2({
115
+ method: "POST",
116
+ type: "form",
117
+ url: "https://api.twilio.com/2010-04-01/Accounts/" + accountSid + "/IncomingPhoneNumbers.json",
118
+ headers: {
119
+ "Authorization": "Basic " + Buffer.from(accountSid + ":" + authToken).toString("base64")
120
+ },
121
+ body: {
122
+ PhoneNumber: number,
123
+ // Inbound STOP/HELP must land on the same generic route every
124
+ // platform number uses — the drawbridge manifest owns inbound.
125
+ ...smsUrl && { SmsUrl: smsUrl, SmsMethod: "POST" }
126
+ }
127
+ });
128
+ return {
129
+ number: result == null ? void 0 : result.phone_number,
130
+ sid: result == null ? void 0 : result.sid
131
+ };
132
+ },
133
+ releaseNumber: async ({ accountSid, authToken, request: request2 = request, sid }) => {
134
+ if (!accountSid || !authToken) throw new Error("Twilio credentials missing \u2014 accountSid, authToken");
135
+ if (!sid) throw new Error("Twilio release needs the IncomingPhoneNumber sid");
136
+ return await request2({
137
+ method: "DELETE",
138
+ url: "https://api.twilio.com/2010-04-01/Accounts/" + accountSid + "/IncomingPhoneNumbers/" + sid + ".json",
139
+ headers: {
140
+ "Authorization": "Basic " + Buffer.from(accountSid + ":" + authToken).toString("base64")
141
+ }
142
+ });
81
143
  }
82
144
  };
83
145
  export {
package/package.json CHANGED
@@ -215,5 +215,5 @@
215
215
  "test": ". \"$HOME/.nvm/nvm.sh\" && nvm use && node --test"
216
216
  },
217
217
  "types": "dist/index.d.ts",
218
- "version": "0.0.127"
218
+ "version": "0.0.128"
219
219
  }