smspva-sdk 0.1.0-alpha.1 → 0.1.0-alpha.2
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 +33 -22
- package/dist/cjs/polling.cjs.map +1 -1
- package/dist/cjs/transport.cjs.map +1 -1
- package/dist/esm/polling.js.map +1 -1
- package/dist/esm/transport.js.map +1 -1
- package/package.json +5 -3
package/README.md
CHANGED
|
@@ -1,27 +1,36 @@
|
|
|
1
|
-
# SMSPVA JavaScript
|
|
1
|
+
# SMSPVA JavaScript and TypeScript SDK
|
|
2
2
|
|
|
3
|
-
[](https://github.com/SMSPVA/smspva-js/actions/workflows/ci.yml) [](LICENSE) 
|
|
3
|
+
[](https://github.com/SMSPVA/smspva-js/actions/workflows/ci.yml) [](https://github.com/SMSPVA/smspva-js/blob/main/LICENSE) 
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Official JavaScript and TypeScript client for [SMSPVA](https://smspva.com/), a service for receiving verification SMS, renting phone numbers and renting private email addresses. Use the asynchronous client in Node.js applications, with ESM and CommonJS builds and TypeScript declarations included.
|
|
6
|
+
|
|
7
|
+
Requires Node.js 22.16 or later. Uses native fetch and has no runtime dependencies. This package is an alpha release.
|
|
6
8
|
|
|
7
9
|
## Installation
|
|
8
10
|
|
|
9
11
|
```sh
|
|
10
12
|
npm install smspva-sdk@alpha
|
|
11
|
-
# Or pin
|
|
12
|
-
npm install smspva-sdk@0.1.0-alpha.
|
|
13
|
+
# Or pin this release:
|
|
14
|
+
npm install smspva-sdk@0.1.0-alpha.2
|
|
13
15
|
```
|
|
14
16
|
|
|
15
|
-
|
|
17
|
+
## API coverage
|
|
16
18
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
19
|
+
The SDK provides 56 methods across three APIs:
|
|
20
|
+
|
|
21
|
+
| API | Methods | Use it to |
|
|
22
|
+
| --- | --- | --- |
|
|
23
|
+
| Activation V2 | 20 | Request a number, check availability and receive verification SMS. |
|
|
24
|
+
| Rental | 22 | Manage [phone number rentals](https://smspva.com/rent) and retrieve messages for existing orders. |
|
|
25
|
+
| Private Email | 14 | Check providers and services, manage [private email rentals](https://smspva.com/rent-mail.html), and read incoming messages. |
|
|
26
|
+
|
|
27
|
+
Country, service and provider lists come from the live API. Availability and prices can change. Alternative API is not included.
|
|
28
|
+
|
|
29
|
+
## Quickstart
|
|
30
|
+
|
|
31
|
+
[Sign in to your SMSPVA account](https://smspva.com/signin.html) and open **Profile and ApiKey** from the account menu. Set the key as the **SMSPVA_API_KEY** environment variable before running a protected request. Keep it on your server and out of source control.
|
|
32
|
+
|
|
33
|
+
The examples below read your balance and reference data; they do not create an order.
|
|
25
34
|
|
|
26
35
|
```js
|
|
27
36
|
import { SMSPVA } from 'smspva-sdk';
|
|
@@ -105,13 +114,13 @@ The default request timeout is 30 seconds, covering fetch and body reading. Set
|
|
|
105
114
|
|
|
106
115
|
All generated request and response types are exported from the package. The complete method index is in `METHODS.md`. The generated source is committed. `npm run build` compiles it without needing the documentation source.
|
|
107
116
|
|
|
108
|
-
## License
|
|
109
|
-
|
|
110
|
-
MIT. See [LICENSE](LICENSE).
|
|
111
|
-
|
|
112
117
|
## Development
|
|
113
118
|
|
|
119
|
+
To build from source and run the local checks:
|
|
120
|
+
|
|
114
121
|
```sh
|
|
122
|
+
git clone https://github.com/SMSPVA/smspva-js.git
|
|
123
|
+
cd smspva-js
|
|
115
124
|
npm ci
|
|
116
125
|
npm run build
|
|
117
126
|
npm test
|
|
@@ -121,10 +130,12 @@ npm pack
|
|
|
121
130
|
|
|
122
131
|
Tests use synthetic fixtures and local HTTP servers; they do not buy numbers or call the production API.
|
|
123
132
|
|
|
124
|
-
## Documentation
|
|
133
|
+
## Documentation and support
|
|
125
134
|
|
|
126
|
-
[API documentation](https://docs.smspva.com)
|
|
135
|
+
Read the [SMSPVA API documentation](https://docs.smspva.com/) for endpoint parameters, response codes and the activation, rental and email workflows. The [method index](https://github.com/SMSPVA/smspva-js/blob/main/METHODS.md) maps every SDK method to its API operation.
|
|
127
136
|
|
|
128
|
-
|
|
137
|
+
For account, billing or service questions, visit the [SMSPVA help center](https://smspva.com/help.html). Report SDK bugs through this repository's issues, without API keys or private message content.
|
|
138
|
+
|
|
139
|
+
## License
|
|
129
140
|
|
|
130
|
-
|
|
141
|
+
MIT. See [LICENSE](https://github.com/SMSPVA/smspva-js/blob/main/LICENSE).
|
package/dist/cjs/polling.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"polling.cjs","sourceRoot":"","sources":["../../.checks/cjs/polling.cts"],"names":[],"mappings":"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","sourcesContent":["import { PollingTimeoutError, TransportError, ValidationError } from './errors.cjs';\
|
|
1
|
+
{"version":3,"file":"polling.cjs","sourceRoot":"","sources":["../../.checks/cjs/polling.cts"],"names":[],"mappings":"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","sourcesContent":["import { PollingTimeoutError, TransportError, ValidationError } from './errors.cjs';\nimport { Transport, type RequestOptions } from './transport.cjs';\nimport type { ActivationPending, ActivationReceiveSmsResponse, EmailNoStock } from './types.cjs';\n\nexport function isPending(value: unknown): value is ActivationPending {\n const v=value as ActivationPending|null;\n return !!v && v.statusCode===202 && v.error?.type==='SMS_NOT_YET_RECEIVED';\n}\nexport function isNoStock(value: unknown): value is EmailNoStock { return !!value && (value as EmailNoStock).status===2; }\nexport interface WaitForSmsOptions extends RequestOptions { orderid: number; expiresAt: number; intervalMs?: number; partnerkey?: string }\nfunction sleep(ms: number, signal?: AbortSignal): Promise<void> {\n return new Promise((resolve,reject)=>{\n const stop=()=>{clearTimeout(timer);signal?.removeEventListener('abort',stop);reject(new TransportError('activation','activation.receiveSms',true,'aborted'));};\n const timer=setTimeout(()=>{signal?.removeEventListener('abort',stop);resolve();},ms);\n signal?.addEventListener('abort',stop,{once:true});\n if(signal?.aborted)stop();\n });\n}\nexport async function waitForSms(transport: Transport, options: WaitForSmsOptions): Promise<Exclude<ActivationReceiveSmsResponse, ActivationPending>> {\n const interval=options.intervalMs??5000;\n if(!Number.isFinite(interval)||interval<5000)throw new ValidationError('intervalMs must be at least 5000 in this helper');\n if(!Number.isFinite(options.expiresAt))throw new ValidationError('expiresAt must be a finite epoch timestamp in milliseconds');\n const deadline=performance.now()+(options.expiresAt-Date.now());\n while(performance.now()<deadline) {\n const remaining=deadline-performance.now();\n const result=await transport.request('activation.receiveSms',{orderid:options.orderid,partnerkey:options.partnerkey},{...options,timeoutMs:Math.max(1,Math.min(options.timeoutMs??transport.timeoutMs,remaining))});\n if(!isPending(result))return result as Exclude<ActivationReceiveSmsResponse, ActivationPending>;\n const left=deadline-performance.now();\n await sleep(Math.max(0,Math.min(interval,left)),options.signal);\n if(left<=interval)throw new PollingTimeoutError();\n }\n throw new PollingTimeoutError();\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.cjs","sourceRoot":"","sources":["../../.checks/cjs/transport.cts"],"names":[],"mappings":"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","sourcesContent":["import { operations } from './contracts.cjs';\r\nimport { ApiError, ProtocolError, RequestTimeoutError, TransportError, ValidationError, type Family } from './errors.cjs';\r\n\r\nexport interface Schema { type?: string; enum?: unknown[]; minimum?: number; maximum?: number; minLength?: number; maxLength?: number; pattern?: string; [key: string]: unknown }\r\nexport interface Operation {\r\n family: Family; jsName: string; pyName: string; slug: string; path: string; method: string; baseUrl: string;\r\n auth: 'required' | 'optional' | 'none'; action?: string; stateful: boolean; pending: boolean; noStock: boolean;\r\n params: Array<{ name: string; in: string; required: boolean; omitEmpty?: boolean; schema: Schema }>;\r\n}\r\nexport interface ClientOptions {\r\n apiKey?: string; timeoutMs?: number; activationBaseUrl?: string; rentalBaseUrl?: string; emailBaseUrl?: string;\r\n /** Injectable HTTP transport for tests. Account requests belong on your server. */\r\n fetch?: typeof globalThis.fetch;\r\n}\r\nexport interface RequestOptions { timeoutMs?: number; signal?: AbortSignal; useApiKey?: boolean }\r\nexport function positiveTimeout(value: number): number {\r\n if (!Number.isFinite(value) || value <= 0 || value > 2_147_483_647) throw new ValidationError('timeoutMs must be finite, positive and at most 2147483647');\r\n return value;\r\n}\r\nfunction baseUrl(value: string): string {\r\n let url: URL;\r\n try { url = new URL(value); } catch { throw new ValidationError('Invalid SDK base URL'); }\r\n if (!['http:', 'https:'].includes(url.protocol) || url.username || url.password || url.search || url.hash) throw new ValidationError('Base URL must use HTTP(S) without credentials, query or fragment');\r\n return url.href.replace(/\\/$/, '');\r\n}\r\nexport class Transport {\r\n readonly timeoutMs: number;\r\n #apiKey?: string;\r\n #fetch: typeof globalThis.fetch;\r\n #base: Partial<Record<Family, string>>;\r\n constructor(options: ClientOptions) {\r\n if (options.apiKey !== undefined && (typeof options.apiKey !== 'string' || !options.apiKey || /[\\r\\n]/.test(options.apiKey))) throw new ValidationError('apiKey must be a non-empty string without line breaks');\r\n this.#apiKey = options.apiKey;\r\n this.timeoutMs = positiveTimeout(options.timeoutMs ?? 30_000);\r\n this.#fetch = options.fetch ?? globalThis.fetch;\r\n if (!this.#fetch) throw new ValidationError('A fetch implementation is required');\r\n this.#base = {};\r\n for (const family of ['activation','rental','email'] as const) {\r\n const value = options[`${family}BaseUrl`];\r\n if (value !== undefined) this.#base[family] = baseUrl(value);\r\n }\r\n }\r\n async request(key: string, input: object, options: RequestOptions = {}): Promise<Record<string, unknown>> {\r\n const op = operations[key];\r\n if (!op) throw new ValidationError('Unknown SDK operation');\r\n if (!input || typeof input !== 'object' || Array.isArray(input)) throw new ValidationError('Parameters must be an object');\r\n const params = input as Record<string, unknown>;\r\n const allowed = new Set(op.params.map(p => p.name));\r\n if (Object.keys(params).some(name => !allowed.has(name))) throw new ValidationError('Unexpected request parameter');\r\n const query = new URLSearchParams();\r\n const headers: Record<string,string> = { Accept: 'application/json' };\r\n let path = op.path;\r\n if (op.action) query.set('method', op.action);\r\n for (const p of op.params) {\r\n const value = params[p.name];\r\n if (value === undefined || value === null || (p.omitEmpty && value === '')) {\r\n if (p.required) throw new ValidationError(`Missing required parameter: ${p.name}`);\r\n continue;\r\n }\r\n const s=p.schema;\r\n if ((s.type==='integer' && (typeof value!=='number' || !Number.isSafeInteger(value))) ||\r\n (s.type==='number' && (typeof value!=='number' || !Number.isFinite(value))) ||\r\n (s.type==='string' && typeof value!=='string') || (s.type==='boolean' && typeof value!=='boolean')) throw new ValidationError(`Invalid type for parameter: ${p.name}`);\r\n if ((s.enum && !s.enum.includes(value)) || (typeof value==='number' && ((s.minimum!==undefined && value<s.minimum)||(s.maximum!==undefined && value>s.maximum))) ||\r\n (typeof value==='string' && ((s.minLength!==undefined && value.length<s.minLength)||(s.maxLength!==undefined && value.length>s.maxLength)||(s.pattern && !new RegExp(s.pattern).test(value))))) throw new ValidationError(`Invalid value for parameter: ${p.name}`);\r\n const text=String(value);\r\n if (p.in==='path') { if(text==='.'||text==='..')throw new ValidationError(`Invalid path parameter: ${p.name}`); path=path.replace('{'+p.name+'}', encodeURIComponent(text)); }\r\n else if (p.in==='header') { if(/[\\r\\n]/.test(text))throw new ValidationError(`Invalid header: ${p.name}`); headers[p.name]=text; }\r\n else query.set(p.name,text);\r\n }\r\n if (op.auth==='required' && !this.#apiKey) throw new ValidationError('Set apiKey for this operation');\r\n if (this.#apiKey && op.auth!=='none' && (op.auth==='required' || options.useApiKey!==false)) {\r\n if (op.family==='activation') headers.apikey=this.#apiKey; else query.set('apikey',this.#apiKey);\r\n }\r\n const url=(this.#base[op.family]??baseUrl(op.baseUrl))+path+(query.size?'?'+query:'');\r\n const timeout=positiveTimeout(options.timeoutMs??this.timeoutMs);\r\n const controller=new AbortController();\r\n let timedOut=false;\r\n const abort=()=>controller.abort();\r\n options.signal?.addEventListener('abort',abort,{once:true});\r\n if(options.signal?.aborted) controller.abort();\r\n const timer=setTimeout(()=>{timedOut=true;controller.abort();},timeout);\r\n let response: Response, text: string;\r\n try {\r\n if (controller.signal.aborted) throw new Error('Aborted');\r\n response=await this.#fetch(url,{method:op.method,headers,signal:controller.signal,redirect:'manual',credentials:'omit'});\r\n text=await response.text();\r\n } catch {\r\n if(timedOut)throw new RequestTimeoutError(op.family,key,op.stateful,'timeout');\r\n throw new TransportError(op.family,key,op.stateful,options.signal?.aborted?'aborted':'network');\r\n } finally { clearTimeout(timer);options.signal?.removeEventListener('abort',abort); }\r\n let body: unknown;\r\n try { body=JSON.parse(text); } catch { throw new ProtocolError(op.family,key,response.status); }\r\n if(!body || typeof body!=='object' || Array.isArray(body))throw new ProtocolError(op.family,key,response.status);\r\n const result=body as Record<string,unknown>;\r\n const error=result.error && typeof result.error==='object' ? result.error as Record<string,unknown> : {};\r\n const status=op.family==='activation'?result.statusCode:result.status;\r\n const code=typeof error.type==='string'?error.type:typeof result.errorid==='number'?result.errorid:typeof status==='number'?status:response.status;\r\n if (!response.ok) throw new ApiError(op.family,key,response.status,code,result);\r\n if (typeof status!=='number' || !Number.isInteger(status))throw new ProtocolError(op.family,key,response.status);\r\n if (op.pending && response.status===202 && status===202 && error.type==='SMS_NOT_YET_RECEIVED') return result;\r\n if (op.noStock && response.status===200 && status===2) return result;\r\n if (op.family==='activation' ? (status!==200 || !!result.error) : status!==1) throw new ApiError(op.family,key,response.status,code,result);\r\n return result;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"transport.cjs","sourceRoot":"","sources":["../../.checks/cjs/transport.cts"],"names":[],"mappings":"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","sourcesContent":["import { operations } from './contracts.cjs';\nimport { ApiError, ProtocolError, RequestTimeoutError, TransportError, ValidationError, type Family } from './errors.cjs';\n\nexport interface Schema { type?: string; enum?: unknown[]; minimum?: number; maximum?: number; minLength?: number; maxLength?: number; pattern?: string; [key: string]: unknown }\nexport interface Operation {\n family: Family; jsName: string; pyName: string; slug: string; path: string; method: string; baseUrl: string;\n auth: 'required' | 'optional' | 'none'; action?: string; stateful: boolean; pending: boolean; noStock: boolean;\n params: Array<{ name: string; in: string; required: boolean; omitEmpty?: boolean; schema: Schema }>;\n}\nexport interface ClientOptions {\n apiKey?: string; timeoutMs?: number; activationBaseUrl?: string; rentalBaseUrl?: string; emailBaseUrl?: string;\n /** Injectable HTTP transport for tests. Account requests belong on your server. */\n fetch?: typeof globalThis.fetch;\n}\nexport interface RequestOptions { timeoutMs?: number; signal?: AbortSignal; useApiKey?: boolean }\nexport function positiveTimeout(value: number): number {\n if (!Number.isFinite(value) || value <= 0 || value > 2_147_483_647) throw new ValidationError('timeoutMs must be finite, positive and at most 2147483647');\n return value;\n}\nfunction baseUrl(value: string): string {\n let url: URL;\n try { url = new URL(value); } catch { throw new ValidationError('Invalid SDK base URL'); }\n if (!['http:', 'https:'].includes(url.protocol) || url.username || url.password || url.search || url.hash) throw new ValidationError('Base URL must use HTTP(S) without credentials, query or fragment');\n return url.href.replace(/\\/$/, '');\n}\nexport class Transport {\n readonly timeoutMs: number;\n #apiKey?: string;\n #fetch: typeof globalThis.fetch;\n #base: Partial<Record<Family, string>>;\n constructor(options: ClientOptions) {\n if (options.apiKey !== undefined && (typeof options.apiKey !== 'string' || !options.apiKey || /[\\r\\n]/.test(options.apiKey))) throw new ValidationError('apiKey must be a non-empty string without line breaks');\n this.#apiKey = options.apiKey;\n this.timeoutMs = positiveTimeout(options.timeoutMs ?? 30_000);\n this.#fetch = options.fetch ?? globalThis.fetch;\n if (!this.#fetch) throw new ValidationError('A fetch implementation is required');\n this.#base = {};\n for (const family of ['activation','rental','email'] as const) {\n const value = options[`${family}BaseUrl`];\n if (value !== undefined) this.#base[family] = baseUrl(value);\n }\n }\n async request(key: string, input: object, options: RequestOptions = {}): Promise<Record<string, unknown>> {\n const op = operations[key];\n if (!op) throw new ValidationError('Unknown SDK operation');\n if (!input || typeof input !== 'object' || Array.isArray(input)) throw new ValidationError('Parameters must be an object');\n const params = input as Record<string, unknown>;\n const allowed = new Set(op.params.map(p => p.name));\n if (Object.keys(params).some(name => !allowed.has(name))) throw new ValidationError('Unexpected request parameter');\n const query = new URLSearchParams();\n const headers: Record<string,string> = { Accept: 'application/json' };\n let path = op.path;\n if (op.action) query.set('method', op.action);\n for (const p of op.params) {\n const value = params[p.name];\n if (value === undefined || value === null || (p.omitEmpty && value === '')) {\n if (p.required) throw new ValidationError(`Missing required parameter: ${p.name}`);\n continue;\n }\n const s=p.schema;\n if ((s.type==='integer' && (typeof value!=='number' || !Number.isSafeInteger(value))) ||\n (s.type==='number' && (typeof value!=='number' || !Number.isFinite(value))) ||\n (s.type==='string' && typeof value!=='string') || (s.type==='boolean' && typeof value!=='boolean')) throw new ValidationError(`Invalid type for parameter: ${p.name}`);\n if ((s.enum && !s.enum.includes(value)) || (typeof value==='number' && ((s.minimum!==undefined && value<s.minimum)||(s.maximum!==undefined && value>s.maximum))) ||\n (typeof value==='string' && ((s.minLength!==undefined && value.length<s.minLength)||(s.maxLength!==undefined && value.length>s.maxLength)||(s.pattern && !new RegExp(s.pattern).test(value))))) throw new ValidationError(`Invalid value for parameter: ${p.name}`);\n const text=String(value);\n if (p.in==='path') { if(text==='.'||text==='..')throw new ValidationError(`Invalid path parameter: ${p.name}`); path=path.replace('{'+p.name+'}', encodeURIComponent(text)); }\n else if (p.in==='header') { if(/[\\r\\n]/.test(text))throw new ValidationError(`Invalid header: ${p.name}`); headers[p.name]=text; }\n else query.set(p.name,text);\n }\n if (op.auth==='required' && !this.#apiKey) throw new ValidationError('Set apiKey for this operation');\n if (this.#apiKey && op.auth!=='none' && (op.auth==='required' || options.useApiKey!==false)) {\n if (op.family==='activation') headers.apikey=this.#apiKey; else query.set('apikey',this.#apiKey);\n }\n const url=(this.#base[op.family]??baseUrl(op.baseUrl))+path+(query.size?'?'+query:'');\n const timeout=positiveTimeout(options.timeoutMs??this.timeoutMs);\n const controller=new AbortController();\n let timedOut=false;\n const abort=()=>controller.abort();\n options.signal?.addEventListener('abort',abort,{once:true});\n if(options.signal?.aborted) controller.abort();\n const timer=setTimeout(()=>{timedOut=true;controller.abort();},timeout);\n let response: Response, text: string;\n try {\n if (controller.signal.aborted) throw new Error('Aborted');\n response=await this.#fetch(url,{method:op.method,headers,signal:controller.signal,redirect:'manual',credentials:'omit'});\n text=await response.text();\n } catch {\n if(timedOut)throw new RequestTimeoutError(op.family,key,op.stateful,'timeout');\n throw new TransportError(op.family,key,op.stateful,options.signal?.aborted?'aborted':'network');\n } finally { clearTimeout(timer);options.signal?.removeEventListener('abort',abort); }\n let body: unknown;\n try { body=JSON.parse(text); } catch { throw new ProtocolError(op.family,key,response.status); }\n if(!body || typeof body!=='object' || Array.isArray(body))throw new ProtocolError(op.family,key,response.status);\n const result=body as Record<string,unknown>;\n const error=result.error && typeof result.error==='object' ? result.error as Record<string,unknown> : {};\n const status=op.family==='activation'?result.statusCode:result.status;\n const code=typeof error.type==='string'?error.type:typeof result.errorid==='number'?result.errorid:typeof status==='number'?status:response.status;\n if (!response.ok) throw new ApiError(op.family,key,response.status,code,result);\n if (typeof status!=='number' || !Number.isInteger(status))throw new ProtocolError(op.family,key,response.status);\n if (op.pending && response.status===202 && status===202 && error.type==='SMS_NOT_YET_RECEIVED') return result;\n if (op.noStock && response.status===200 && status===2) return result;\n if (op.family==='activation' ? (status!==200 || !!result.error) : status!==1) throw new ApiError(op.family,key,response.status,code,result);\n return result;\n }\n}\n"]}
|
package/dist/esm/polling.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"polling.js","sourceRoot":"","sources":["../../src/polling.ts"],"names":[],"mappings":"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","sourcesContent":["import { PollingTimeoutError, TransportError, ValidationError } from './errors.js';\
|
|
1
|
+
{"version":3,"file":"polling.js","sourceRoot":"","sources":["../../src/polling.ts"],"names":[],"mappings":"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","sourcesContent":["import { PollingTimeoutError, TransportError, ValidationError } from './errors.js';\nimport { Transport, type RequestOptions } from './transport.js';\nimport type { ActivationPending, ActivationReceiveSmsResponse, EmailNoStock } from './types.js';\n\nexport function isPending(value: unknown): value is ActivationPending {\n const v=value as ActivationPending|null;\n return !!v && v.statusCode===202 && v.error?.type==='SMS_NOT_YET_RECEIVED';\n}\nexport function isNoStock(value: unknown): value is EmailNoStock { return !!value && (value as EmailNoStock).status===2; }\nexport interface WaitForSmsOptions extends RequestOptions { orderid: number; expiresAt: number; intervalMs?: number; partnerkey?: string }\nfunction sleep(ms: number, signal?: AbortSignal): Promise<void> {\n return new Promise((resolve,reject)=>{\n const stop=()=>{clearTimeout(timer);signal?.removeEventListener('abort',stop);reject(new TransportError('activation','activation.receiveSms',true,'aborted'));};\n const timer=setTimeout(()=>{signal?.removeEventListener('abort',stop);resolve();},ms);\n signal?.addEventListener('abort',stop,{once:true});\n if(signal?.aborted)stop();\n });\n}\nexport async function waitForSms(transport: Transport, options: WaitForSmsOptions): Promise<Exclude<ActivationReceiveSmsResponse, ActivationPending>> {\n const interval=options.intervalMs??5000;\n if(!Number.isFinite(interval)||interval<5000)throw new ValidationError('intervalMs must be at least 5000 in this helper');\n if(!Number.isFinite(options.expiresAt))throw new ValidationError('expiresAt must be a finite epoch timestamp in milliseconds');\n const deadline=performance.now()+(options.expiresAt-Date.now());\n while(performance.now()<deadline) {\n const remaining=deadline-performance.now();\n const result=await transport.request('activation.receiveSms',{orderid:options.orderid,partnerkey:options.partnerkey},{...options,timeoutMs:Math.max(1,Math.min(options.timeoutMs??transport.timeoutMs,remaining))});\n if(!isPending(result))return result as Exclude<ActivationReceiveSmsResponse, ActivationPending>;\n const left=deadline-performance.now();\n await sleep(Math.max(0,Math.min(interval,left)),options.signal);\n if(left<=interval)throw new PollingTimeoutError();\n }\n throw new PollingTimeoutError();\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../src/transport.ts"],"names":[],"mappings":"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","sourcesContent":["import { operations } from './contracts.js';\r\nimport { ApiError, ProtocolError, RequestTimeoutError, TransportError, ValidationError, type Family } from './errors.js';\r\n\r\nexport interface Schema { type?: string; enum?: unknown[]; minimum?: number; maximum?: number; minLength?: number; maxLength?: number; pattern?: string; [key: string]: unknown }\r\nexport interface Operation {\r\n family: Family; jsName: string; pyName: string; slug: string; path: string; method: string; baseUrl: string;\r\n auth: 'required' | 'optional' | 'none'; action?: string; stateful: boolean; pending: boolean; noStock: boolean;\r\n params: Array<{ name: string; in: string; required: boolean; omitEmpty?: boolean; schema: Schema }>;\r\n}\r\nexport interface ClientOptions {\r\n apiKey?: string; timeoutMs?: number; activationBaseUrl?: string; rentalBaseUrl?: string; emailBaseUrl?: string;\r\n /** Injectable HTTP transport for tests. Account requests belong on your server. */\r\n fetch?: typeof globalThis.fetch;\r\n}\r\nexport interface RequestOptions { timeoutMs?: number; signal?: AbortSignal; useApiKey?: boolean }\r\nexport function positiveTimeout(value: number): number {\r\n if (!Number.isFinite(value) || value <= 0 || value > 2_147_483_647) throw new ValidationError('timeoutMs must be finite, positive and at most 2147483647');\r\n return value;\r\n}\r\nfunction baseUrl(value: string): string {\r\n let url: URL;\r\n try { url = new URL(value); } catch { throw new ValidationError('Invalid SDK base URL'); }\r\n if (!['http:', 'https:'].includes(url.protocol) || url.username || url.password || url.search || url.hash) throw new ValidationError('Base URL must use HTTP(S) without credentials, query or fragment');\r\n return url.href.replace(/\\/$/, '');\r\n}\r\nexport class Transport {\r\n readonly timeoutMs: number;\r\n #apiKey?: string;\r\n #fetch: typeof globalThis.fetch;\r\n #base: Partial<Record<Family, string>>;\r\n constructor(options: ClientOptions) {\r\n if (options.apiKey !== undefined && (typeof options.apiKey !== 'string' || !options.apiKey || /[\\r\\n]/.test(options.apiKey))) throw new ValidationError('apiKey must be a non-empty string without line breaks');\r\n this.#apiKey = options.apiKey;\r\n this.timeoutMs = positiveTimeout(options.timeoutMs ?? 30_000);\r\n this.#fetch = options.fetch ?? globalThis.fetch;\r\n if (!this.#fetch) throw new ValidationError('A fetch implementation is required');\r\n this.#base = {};\r\n for (const family of ['activation','rental','email'] as const) {\r\n const value = options[`${family}BaseUrl`];\r\n if (value !== undefined) this.#base[family] = baseUrl(value);\r\n }\r\n }\r\n async request(key: string, input: object, options: RequestOptions = {}): Promise<Record<string, unknown>> {\r\n const op = operations[key];\r\n if (!op) throw new ValidationError('Unknown SDK operation');\r\n if (!input || typeof input !== 'object' || Array.isArray(input)) throw new ValidationError('Parameters must be an object');\r\n const params = input as Record<string, unknown>;\r\n const allowed = new Set(op.params.map(p => p.name));\r\n if (Object.keys(params).some(name => !allowed.has(name))) throw new ValidationError('Unexpected request parameter');\r\n const query = new URLSearchParams();\r\n const headers: Record<string,string> = { Accept: 'application/json' };\r\n let path = op.path;\r\n if (op.action) query.set('method', op.action);\r\n for (const p of op.params) {\r\n const value = params[p.name];\r\n if (value === undefined || value === null || (p.omitEmpty && value === '')) {\r\n if (p.required) throw new ValidationError(`Missing required parameter: ${p.name}`);\r\n continue;\r\n }\r\n const s=p.schema;\r\n if ((s.type==='integer' && (typeof value!=='number' || !Number.isSafeInteger(value))) ||\r\n (s.type==='number' && (typeof value!=='number' || !Number.isFinite(value))) ||\r\n (s.type==='string' && typeof value!=='string') || (s.type==='boolean' && typeof value!=='boolean')) throw new ValidationError(`Invalid type for parameter: ${p.name}`);\r\n if ((s.enum && !s.enum.includes(value)) || (typeof value==='number' && ((s.minimum!==undefined && value<s.minimum)||(s.maximum!==undefined && value>s.maximum))) ||\r\n (typeof value==='string' && ((s.minLength!==undefined && value.length<s.minLength)||(s.maxLength!==undefined && value.length>s.maxLength)||(s.pattern && !new RegExp(s.pattern).test(value))))) throw new ValidationError(`Invalid value for parameter: ${p.name}`);\r\n const text=String(value);\r\n if (p.in==='path') { if(text==='.'||text==='..')throw new ValidationError(`Invalid path parameter: ${p.name}`); path=path.replace('{'+p.name+'}', encodeURIComponent(text)); }\r\n else if (p.in==='header') { if(/[\\r\\n]/.test(text))throw new ValidationError(`Invalid header: ${p.name}`); headers[p.name]=text; }\r\n else query.set(p.name,text);\r\n }\r\n if (op.auth==='required' && !this.#apiKey) throw new ValidationError('Set apiKey for this operation');\r\n if (this.#apiKey && op.auth!=='none' && (op.auth==='required' || options.useApiKey!==false)) {\r\n if (op.family==='activation') headers.apikey=this.#apiKey; else query.set('apikey',this.#apiKey);\r\n }\r\n const url=(this.#base[op.family]??baseUrl(op.baseUrl))+path+(query.size?'?'+query:'');\r\n const timeout=positiveTimeout(options.timeoutMs??this.timeoutMs);\r\n const controller=new AbortController();\r\n let timedOut=false;\r\n const abort=()=>controller.abort();\r\n options.signal?.addEventListener('abort',abort,{once:true});\r\n if(options.signal?.aborted) controller.abort();\r\n const timer=setTimeout(()=>{timedOut=true;controller.abort();},timeout);\r\n let response: Response, text: string;\r\n try {\r\n if (controller.signal.aborted) throw new Error('Aborted');\r\n response=await this.#fetch(url,{method:op.method,headers,signal:controller.signal,redirect:'manual',credentials:'omit'});\r\n text=await response.text();\r\n } catch {\r\n if(timedOut)throw new RequestTimeoutError(op.family,key,op.stateful,'timeout');\r\n throw new TransportError(op.family,key,op.stateful,options.signal?.aborted?'aborted':'network');\r\n } finally { clearTimeout(timer);options.signal?.removeEventListener('abort',abort); }\r\n let body: unknown;\r\n try { body=JSON.parse(text); } catch { throw new ProtocolError(op.family,key,response.status); }\r\n if(!body || typeof body!=='object' || Array.isArray(body))throw new ProtocolError(op.family,key,response.status);\r\n const result=body as Record<string,unknown>;\r\n const error=result.error && typeof result.error==='object' ? result.error as Record<string,unknown> : {};\r\n const status=op.family==='activation'?result.statusCode:result.status;\r\n const code=typeof error.type==='string'?error.type:typeof result.errorid==='number'?result.errorid:typeof status==='number'?status:response.status;\r\n if (!response.ok) throw new ApiError(op.family,key,response.status,code,result);\r\n if (typeof status!=='number' || !Number.isInteger(status))throw new ProtocolError(op.family,key,response.status);\r\n if (op.pending && response.status===202 && status===202 && error.type==='SMS_NOT_YET_RECEIVED') return result;\r\n if (op.noStock && response.status===200 && status===2) return result;\r\n if (op.family==='activation' ? (status!==200 || !!result.error) : status!==1) throw new ApiError(op.family,key,response.status,code,result);\r\n return result;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../src/transport.ts"],"names":[],"mappings":"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","sourcesContent":["import { operations } from './contracts.js';\nimport { ApiError, ProtocolError, RequestTimeoutError, TransportError, ValidationError, type Family } from './errors.js';\n\nexport interface Schema { type?: string; enum?: unknown[]; minimum?: number; maximum?: number; minLength?: number; maxLength?: number; pattern?: string; [key: string]: unknown }\nexport interface Operation {\n family: Family; jsName: string; pyName: string; slug: string; path: string; method: string; baseUrl: string;\n auth: 'required' | 'optional' | 'none'; action?: string; stateful: boolean; pending: boolean; noStock: boolean;\n params: Array<{ name: string; in: string; required: boolean; omitEmpty?: boolean; schema: Schema }>;\n}\nexport interface ClientOptions {\n apiKey?: string; timeoutMs?: number; activationBaseUrl?: string; rentalBaseUrl?: string; emailBaseUrl?: string;\n /** Injectable HTTP transport for tests. Account requests belong on your server. */\n fetch?: typeof globalThis.fetch;\n}\nexport interface RequestOptions { timeoutMs?: number; signal?: AbortSignal; useApiKey?: boolean }\nexport function positiveTimeout(value: number): number {\n if (!Number.isFinite(value) || value <= 0 || value > 2_147_483_647) throw new ValidationError('timeoutMs must be finite, positive and at most 2147483647');\n return value;\n}\nfunction baseUrl(value: string): string {\n let url: URL;\n try { url = new URL(value); } catch { throw new ValidationError('Invalid SDK base URL'); }\n if (!['http:', 'https:'].includes(url.protocol) || url.username || url.password || url.search || url.hash) throw new ValidationError('Base URL must use HTTP(S) without credentials, query or fragment');\n return url.href.replace(/\\/$/, '');\n}\nexport class Transport {\n readonly timeoutMs: number;\n #apiKey?: string;\n #fetch: typeof globalThis.fetch;\n #base: Partial<Record<Family, string>>;\n constructor(options: ClientOptions) {\n if (options.apiKey !== undefined && (typeof options.apiKey !== 'string' || !options.apiKey || /[\\r\\n]/.test(options.apiKey))) throw new ValidationError('apiKey must be a non-empty string without line breaks');\n this.#apiKey = options.apiKey;\n this.timeoutMs = positiveTimeout(options.timeoutMs ?? 30_000);\n this.#fetch = options.fetch ?? globalThis.fetch;\n if (!this.#fetch) throw new ValidationError('A fetch implementation is required');\n this.#base = {};\n for (const family of ['activation','rental','email'] as const) {\n const value = options[`${family}BaseUrl`];\n if (value !== undefined) this.#base[family] = baseUrl(value);\n }\n }\n async request(key: string, input: object, options: RequestOptions = {}): Promise<Record<string, unknown>> {\n const op = operations[key];\n if (!op) throw new ValidationError('Unknown SDK operation');\n if (!input || typeof input !== 'object' || Array.isArray(input)) throw new ValidationError('Parameters must be an object');\n const params = input as Record<string, unknown>;\n const allowed = new Set(op.params.map(p => p.name));\n if (Object.keys(params).some(name => !allowed.has(name))) throw new ValidationError('Unexpected request parameter');\n const query = new URLSearchParams();\n const headers: Record<string,string> = { Accept: 'application/json' };\n let path = op.path;\n if (op.action) query.set('method', op.action);\n for (const p of op.params) {\n const value = params[p.name];\n if (value === undefined || value === null || (p.omitEmpty && value === '')) {\n if (p.required) throw new ValidationError(`Missing required parameter: ${p.name}`);\n continue;\n }\n const s=p.schema;\n if ((s.type==='integer' && (typeof value!=='number' || !Number.isSafeInteger(value))) ||\n (s.type==='number' && (typeof value!=='number' || !Number.isFinite(value))) ||\n (s.type==='string' && typeof value!=='string') || (s.type==='boolean' && typeof value!=='boolean')) throw new ValidationError(`Invalid type for parameter: ${p.name}`);\n if ((s.enum && !s.enum.includes(value)) || (typeof value==='number' && ((s.minimum!==undefined && value<s.minimum)||(s.maximum!==undefined && value>s.maximum))) ||\n (typeof value==='string' && ((s.minLength!==undefined && value.length<s.minLength)||(s.maxLength!==undefined && value.length>s.maxLength)||(s.pattern && !new RegExp(s.pattern).test(value))))) throw new ValidationError(`Invalid value for parameter: ${p.name}`);\n const text=String(value);\n if (p.in==='path') { if(text==='.'||text==='..')throw new ValidationError(`Invalid path parameter: ${p.name}`); path=path.replace('{'+p.name+'}', encodeURIComponent(text)); }\n else if (p.in==='header') { if(/[\\r\\n]/.test(text))throw new ValidationError(`Invalid header: ${p.name}`); headers[p.name]=text; }\n else query.set(p.name,text);\n }\n if (op.auth==='required' && !this.#apiKey) throw new ValidationError('Set apiKey for this operation');\n if (this.#apiKey && op.auth!=='none' && (op.auth==='required' || options.useApiKey!==false)) {\n if (op.family==='activation') headers.apikey=this.#apiKey; else query.set('apikey',this.#apiKey);\n }\n const url=(this.#base[op.family]??baseUrl(op.baseUrl))+path+(query.size?'?'+query:'');\n const timeout=positiveTimeout(options.timeoutMs??this.timeoutMs);\n const controller=new AbortController();\n let timedOut=false;\n const abort=()=>controller.abort();\n options.signal?.addEventListener('abort',abort,{once:true});\n if(options.signal?.aborted) controller.abort();\n const timer=setTimeout(()=>{timedOut=true;controller.abort();},timeout);\n let response: Response, text: string;\n try {\n if (controller.signal.aborted) throw new Error('Aborted');\n response=await this.#fetch(url,{method:op.method,headers,signal:controller.signal,redirect:'manual',credentials:'omit'});\n text=await response.text();\n } catch {\n if(timedOut)throw new RequestTimeoutError(op.family,key,op.stateful,'timeout');\n throw new TransportError(op.family,key,op.stateful,options.signal?.aborted?'aborted':'network');\n } finally { clearTimeout(timer);options.signal?.removeEventListener('abort',abort); }\n let body: unknown;\n try { body=JSON.parse(text); } catch { throw new ProtocolError(op.family,key,response.status); }\n if(!body || typeof body!=='object' || Array.isArray(body))throw new ProtocolError(op.family,key,response.status);\n const result=body as Record<string,unknown>;\n const error=result.error && typeof result.error==='object' ? result.error as Record<string,unknown> : {};\n const status=op.family==='activation'?result.statusCode:result.status;\n const code=typeof error.type==='string'?error.type:typeof result.errorid==='number'?result.errorid:typeof status==='number'?status:response.status;\n if (!response.ok) throw new ApiError(op.family,key,response.status,code,result);\n if (typeof status!=='number' || !Number.isInteger(status))throw new ProtocolError(op.family,key,response.status);\n if (op.pending && response.status===202 && status===202 && error.type==='SMS_NOT_YET_RECEIVED') return result;\n if (op.noStock && response.status===200 && status===2) return result;\n if (op.family==='activation' ? (status!==200 || !!result.error) : status!==1) throw new ApiError(op.family,key,response.status,code,result);\n return result;\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "smspva-sdk",
|
|
3
|
-
"version": "0.1.0-alpha.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.1.0-alpha.2",
|
|
4
|
+
"description": "Official JavaScript and TypeScript SDK for SMSPVA SMS activation, phone number rental and private email APIs",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"engines": {
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
"bugs": {
|
|
44
44
|
"url": "https://github.com/SMSPVA/smspva-js/issues"
|
|
45
45
|
},
|
|
46
|
-
"homepage": "https://
|
|
46
|
+
"homepage": "https://smspva.com/",
|
|
47
47
|
"publishConfig": {
|
|
48
48
|
"access": "public",
|
|
49
49
|
"tag": "alpha"
|
|
@@ -51,7 +51,9 @@
|
|
|
51
51
|
"keywords": [
|
|
52
52
|
"smspva",
|
|
53
53
|
"sms",
|
|
54
|
+
"verification",
|
|
54
55
|
"activation",
|
|
56
|
+
"phone-number",
|
|
55
57
|
"rental",
|
|
56
58
|
"email",
|
|
57
59
|
"typescript",
|