@agentsim/sdk 0.22.0 → 0.22.1
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 +27 -26
- package/dist/client.test.js +44 -1
- package/dist/client.test.js.map +1 -1
- package/dist/index.d.ts +15 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -4
- package/dist/index.js.map +1 -1
- package/dist/session.d.ts +9 -2
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +12 -3
- package/dist/session.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,65 +1,66 @@
|
|
|
1
1
|
# @agentsim/sdk
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
We run the auth challenge so your agent doesn't die there. This TypeScript SDK is the primary published SDK: `openChallenge` opens an SMS challenge, `waitForVerdict` waits for the verdict. `provision` and `waitForOtp` are aliases that still work. Timeouts are seconds. Zero runtime dependencies. Works in Node.js 18+, Bun, Deno, and Edge runtimes.
|
|
4
4
|
|
|
5
5
|
## Install
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
|
-
|
|
9
|
-
# or:
|
|
8
|
+
bun add @agentsim/sdk
|
|
9
|
+
# or: npm install @agentsim/sdk
|
|
10
10
|
```
|
|
11
11
|
|
|
12
12
|
## Quickstart
|
|
13
13
|
|
|
14
14
|
```typescript
|
|
15
|
-
import {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
await
|
|
19
|
-
await
|
|
20
|
-
|
|
21
|
-
await enterOtp(otp.otpCode); // "847291"
|
|
22
|
-
// number auto-released via [Symbol.asyncDispose]
|
|
15
|
+
import { openChallenge } from "@agentsim/sdk";
|
|
16
|
+
|
|
17
|
+
await using num = await openChallenge({ agentId: "checkout-bot", country: "US" });
|
|
18
|
+
await enterPhoneNumber(num.number);
|
|
19
|
+
const otp = await num.waitForVerdict({ timeout: 60 });
|
|
20
|
+
await enterOtp(otp.otpCode);
|
|
23
21
|
```
|
|
24
22
|
|
|
25
23
|
```typescript
|
|
26
|
-
|
|
27
|
-
const num = await provision({ agentId: "checkout-bot" });
|
|
24
|
+
const num = await openChallenge({ agentId: "checkout-bot" });
|
|
28
25
|
try {
|
|
29
|
-
const otp = await num.
|
|
26
|
+
const otp = await num.waitForVerdict();
|
|
30
27
|
} finally {
|
|
31
28
|
await num.release();
|
|
32
29
|
}
|
|
33
30
|
```
|
|
34
31
|
|
|
32
|
+
`provision` / `waitForOtp` remain aliases of `openChallenge` / `waitForVerdict`.
|
|
33
|
+
|
|
35
34
|
## Auth
|
|
36
35
|
|
|
37
|
-
Set `AGENTSIM_API_KEY` in your environment, or pass
|
|
36
|
+
Set `AGENTSIM_API_KEY` in your environment, or pass the key as the first constructor argument:
|
|
38
37
|
|
|
39
38
|
```typescript
|
|
40
39
|
import { AgentSimClient } from "@agentsim/sdk";
|
|
41
|
-
const client = new AgentSimClient(
|
|
40
|
+
const client = new AgentSimClient("asm_live_xxx");
|
|
42
41
|
```
|
|
43
42
|
|
|
44
43
|
Get your API key at [console.agentsim.dev](https://console.agentsim.dev).
|
|
45
44
|
|
|
46
45
|
## API
|
|
47
46
|
|
|
48
|
-
### `
|
|
47
|
+
### `openChallenge(options, clientOrApiKey?)`
|
|
49
48
|
|
|
50
|
-
|
|
49
|
+
Opens an SMS challenge and returns a `NumberSession`. `provision` is an alias.
|
|
51
50
|
|
|
52
51
|
| Option | Type | Default | Description |
|
|
53
52
|
|--------|------|---------|-------------|
|
|
54
53
|
| `agentId` | `string` | required | Identifier for your agent |
|
|
55
54
|
| `country` | `string` | `"US"` | ISO country code |
|
|
55
|
+
| `serviceUrl` | `string` | — | Target URL for policy evaluation |
|
|
56
56
|
| `ttlSeconds` | `number` | `3600` | Auto-release after N seconds |
|
|
57
|
-
| `webhookUrl` | `string` | — | POST
|
|
58
|
-
|
|
57
|
+
| `webhookUrl` | `string` | — | POST verdicts here as they arrive |
|
|
58
|
+
|
|
59
|
+
Pass an API key as the second argument, not as a field on `options`.
|
|
59
60
|
|
|
60
|
-
### `num.
|
|
61
|
+
### `num.waitForVerdict(options?)`
|
|
61
62
|
|
|
62
|
-
Waits for
|
|
63
|
+
Waits for the SMS verdict. Timeout is seconds. `waitForOtp` is an alias.
|
|
63
64
|
|
|
64
65
|
| Option | Type | Default |
|
|
65
66
|
|--------|------|---------|
|
|
@@ -67,11 +68,11 @@ Waits for an OTP to arrive on the provisioned number.
|
|
|
67
68
|
|
|
68
69
|
Returns `{ otpCode: string, fromNumber: string | null, receivedAt: string }`.
|
|
69
70
|
|
|
70
|
-
Throws `OtpTimeoutError` if no
|
|
71
|
+
Throws `OtpTimeoutError` if no verdict arrives within `timeout` seconds.
|
|
71
72
|
|
|
72
73
|
### `num.release()`
|
|
73
74
|
|
|
74
|
-
|
|
75
|
+
Closes the challenge session. Called automatically by `[Symbol.asyncDispose]`.
|
|
75
76
|
|
|
76
77
|
## Error Reference
|
|
77
78
|
|
|
@@ -79,9 +80,9 @@ Releases the number back to the pool early. Called automatically by `[Symbol.asy
|
|
|
79
80
|
|-------|------|
|
|
80
81
|
| `AuthenticationError` | Missing or invalid API key |
|
|
81
82
|
| `PoolExhaustedError` | No numbers available in requested country |
|
|
82
|
-
| `OtpTimeoutError` | No
|
|
83
|
+
| `OtpTimeoutError` | No verdict arrived within timeout |
|
|
83
84
|
| `RateLimitError` | Too many requests |
|
|
84
85
|
|
|
85
86
|
## Supported Countries
|
|
86
87
|
|
|
87
|
-
US
|
|
88
|
+
US
|
package/dist/client.test.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
|
|
2
|
-
import { provision, PoolExhaustedError, OtpTimeoutError } from "./index.js";
|
|
2
|
+
import { provision, openChallenge, PoolExhaustedError, OtpTimeoutError } from "./index.js";
|
|
3
3
|
import { AgentSimClient } from "./client.js";
|
|
4
4
|
const PROVISION_RESPONSE = {
|
|
5
5
|
session_id: "sess-abc123",
|
|
@@ -33,6 +33,20 @@ describe("AgentSIM TypeScript SDK", () => {
|
|
|
33
33
|
expect(session.number).toBe("+15551234567");
|
|
34
34
|
expect(session.sessionId).toBe("sess-abc123");
|
|
35
35
|
});
|
|
36
|
+
it("openChallenge wraps provision with the same session object", async () => {
|
|
37
|
+
const fetchMock = makeFetch(201, PROVISION_RESPONSE);
|
|
38
|
+
vi.stubGlobal("fetch", fetchMock);
|
|
39
|
+
const session = await openChallenge({ agentId: "test-bot", ttlSeconds: 300 }, client);
|
|
40
|
+
expect(session.number).toBe("+15551234567");
|
|
41
|
+
expect(session.sessionId).toBe("sess-abc123");
|
|
42
|
+
expect(fetchMock).toHaveBeenCalledWith("https://api.agentsim.io/v1/sessions", expect.objectContaining({
|
|
43
|
+
method: "POST",
|
|
44
|
+
body: JSON.stringify({
|
|
45
|
+
agent_id: "test-bot",
|
|
46
|
+
ttl_seconds: 300,
|
|
47
|
+
}),
|
|
48
|
+
}));
|
|
49
|
+
});
|
|
36
50
|
it("throws PoolExhaustedError on 503", async () => {
|
|
37
51
|
vi.stubGlobal("fetch", makeFetch(503, { error: "pool_exhausted", message: "No US numbers available" }));
|
|
38
52
|
await expect(provision({ agentId: "test-bot" }, client)).rejects.toBeInstanceOf(PoolExhaustedError);
|
|
@@ -61,6 +75,35 @@ describe("AgentSIM TypeScript SDK", () => {
|
|
|
61
75
|
const result = await session.waitForOtp({ timeout: 30 });
|
|
62
76
|
expect(result.otpCode).toBe("123456");
|
|
63
77
|
});
|
|
78
|
+
it("waitForVerdict wraps waitForOtp with timeout in seconds", async () => {
|
|
79
|
+
const fetchMock = vi
|
|
80
|
+
.fn()
|
|
81
|
+
.mockResolvedValueOnce({
|
|
82
|
+
ok: true,
|
|
83
|
+
status: 201,
|
|
84
|
+
statusText: "201",
|
|
85
|
+
json: async () => PROVISION_RESPONSE,
|
|
86
|
+
})
|
|
87
|
+
.mockResolvedValueOnce({
|
|
88
|
+
ok: true,
|
|
89
|
+
status: 200,
|
|
90
|
+
statusText: "200",
|
|
91
|
+
json: async () => ({
|
|
92
|
+
otp_code: "123456",
|
|
93
|
+
from_number: "+15550000000",
|
|
94
|
+
received_at: "2026-03-16T18:00:00Z",
|
|
95
|
+
message_id: "msg-xyz",
|
|
96
|
+
}),
|
|
97
|
+
});
|
|
98
|
+
vi.stubGlobal("fetch", fetchMock);
|
|
99
|
+
const session = await openChallenge({ agentId: "test-bot" }, client);
|
|
100
|
+
const result = await session.waitForVerdict({ timeout: 30 });
|
|
101
|
+
expect(result.otpCode).toBe("123456");
|
|
102
|
+
expect(fetchMock).toHaveBeenNthCalledWith(2, "https://api.agentsim.io/v1/sessions/sess-abc123/wait", expect.objectContaining({
|
|
103
|
+
method: "POST",
|
|
104
|
+
body: JSON.stringify({ timeout_seconds: 30 }),
|
|
105
|
+
}));
|
|
106
|
+
});
|
|
64
107
|
it("throws OtpTimeoutError on 408", async () => {
|
|
65
108
|
vi.stubGlobal("fetch", vi
|
|
66
109
|
.fn()
|
package/dist/client.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.test.js","sourceRoot":"","sources":["../src/client.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"client.test.js","sourceRoot":"","sources":["../src/client.test.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -4,11 +4,12 @@ import type { ProvisionOptions } from "./client.js";
|
|
|
4
4
|
export { AgentSimClient } from "./client.js";
|
|
5
5
|
export { NumberSession } from "./session.js";
|
|
6
6
|
export type { ProvisionOptions, OtpResult, SmsMessage, WaitForOtpOptions, ReregistrationInfo } from "./client.js";
|
|
7
|
+
export type { ProvisionOptions as OpenChallengeOptions, WaitForOtpOptions as WaitForVerdictOptions } from "./client.js";
|
|
7
8
|
export { classifyStall } from "./playwright.js";
|
|
8
9
|
export type { ChallengeChannel, LocatorLike, PageLike, StallOutcome, StallSessionEvidence } from "./playwright.js";
|
|
9
10
|
export { AgentSimError, AuthenticationError, ForbiddenError, PoolExhaustedError, SessionNotFoundError, OtpTimeoutError, RateLimitError, ValidationError, ApiError, } from "./errors.js";
|
|
10
11
|
/**
|
|
11
|
-
*
|
|
12
|
+
* Open an SMS challenge for the given agent. Starts a billable SMS challenge session.
|
|
12
13
|
*
|
|
13
14
|
* **Billing:** $0.99 per session on the Builder plan. Free on Hobby (10 sessions/month limit).
|
|
14
15
|
* Sessions that end with an `OtpTimeoutError` are NOT billed.
|
|
@@ -16,6 +17,19 @@ export { AgentSimError, AuthenticationError, ForbiddenError, PoolExhaustedError,
|
|
|
16
17
|
* Returns a `NumberSession` implementing `AsyncDisposable` — use `await using`
|
|
17
18
|
* in TypeScript 5.2+ for automatic release, or call `num.release()` manually.
|
|
18
19
|
*
|
|
20
|
+
* `provision` is kept as an alias of `openChallenge`. Same options object,
|
|
21
|
+
* same `NumberSession`.
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```ts
|
|
25
|
+
* await using num = await openChallenge({ agentId: "checkout-bot" });
|
|
26
|
+
* const otp = await num.waitForVerdict({ timeout: 60 });
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export declare function openChallenge(options: ProvisionOptions, clientOrApiKey?: AgentSimClient | string): Promise<NumberSession>;
|
|
30
|
+
/**
|
|
31
|
+
* Alias of {@link openChallenge}. Same options, same session object.
|
|
32
|
+
*
|
|
19
33
|
* @example
|
|
20
34
|
* ```ts
|
|
21
35
|
* await using num = await provision({ agentId: "checkout-bot" });
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,KAAK,EAAE,gBAAgB,EAAyB,MAAM,aAAa,CAAC;AAE3E,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,YAAY,EAAE,gBAAgB,EAAE,SAAS,EAAE,UAAU,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAClH,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACnH,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,cAAc,EACd,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,cAAc,EACd,eAAe,EACf,QAAQ,GACT,MAAM,aAAa,CAAC;AAErB
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,KAAK,EAAE,gBAAgB,EAAyB,MAAM,aAAa,CAAC;AAE3E,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,YAAY,EAAE,gBAAgB,EAAE,SAAS,EAAE,UAAU,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAClH,YAAY,EAAE,gBAAgB,IAAI,oBAAoB,EAAE,iBAAiB,IAAI,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACxH,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACnH,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,cAAc,EACd,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,cAAc,EACd,eAAe,EACf,QAAQ,GACT,MAAM,aAAa,CAAC;AAErB;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,gBAAgB,EACzB,cAAc,CAAC,EAAE,cAAc,GAAG,MAAM,GACvC,OAAO,CAAC,aAAa,CAAC,CAkBxB;AAED;;;;;;;;GAQG;AACH,wBAAsB,SAAS,CAC7B,OAAO,EAAE,gBAAgB,EACzB,cAAc,CAAC,EAAE,cAAc,GAAG,MAAM,GACvC,OAAO,CAAC,aAAa,CAAC,CAExB"}
|
package/dist/index.js
CHANGED
|
@@ -5,7 +5,7 @@ export { NumberSession } from "./session.js";
|
|
|
5
5
|
export { classifyStall } from "./playwright.js";
|
|
6
6
|
export { AgentSimError, AuthenticationError, ForbiddenError, PoolExhaustedError, SessionNotFoundError, OtpTimeoutError, RateLimitError, ValidationError, ApiError, } from "./errors.js";
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
8
|
+
* Open an SMS challenge for the given agent. Starts a billable SMS challenge session.
|
|
9
9
|
*
|
|
10
10
|
* **Billing:** $0.99 per session on the Builder plan. Free on Hobby (10 sessions/month limit).
|
|
11
11
|
* Sessions that end with an `OtpTimeoutError` are NOT billed.
|
|
@@ -13,13 +13,16 @@ export { AgentSimError, AuthenticationError, ForbiddenError, PoolExhaustedError,
|
|
|
13
13
|
* Returns a `NumberSession` implementing `AsyncDisposable` — use `await using`
|
|
14
14
|
* in TypeScript 5.2+ for automatic release, or call `num.release()` manually.
|
|
15
15
|
*
|
|
16
|
+
* `provision` is kept as an alias of `openChallenge`. Same options object,
|
|
17
|
+
* same `NumberSession`.
|
|
18
|
+
*
|
|
16
19
|
* @example
|
|
17
20
|
* ```ts
|
|
18
|
-
* await using num = await
|
|
19
|
-
* const otp = await num.
|
|
21
|
+
* await using num = await openChallenge({ agentId: "checkout-bot" });
|
|
22
|
+
* const otp = await num.waitForVerdict({ timeout: 60 });
|
|
20
23
|
* ```
|
|
21
24
|
*/
|
|
22
|
-
export async function
|
|
25
|
+
export async function openChallenge(options, clientOrApiKey) {
|
|
23
26
|
let client;
|
|
24
27
|
if (clientOrApiKey instanceof AgentSimClient) {
|
|
25
28
|
client = clientOrApiKey;
|
|
@@ -36,4 +39,16 @@ export async function provision(options, clientOrApiKey) {
|
|
|
36
39
|
});
|
|
37
40
|
return new NumberSession(client, data);
|
|
38
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* Alias of {@link openChallenge}. Same options, same session object.
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* ```ts
|
|
47
|
+
* await using num = await provision({ agentId: "checkout-bot" });
|
|
48
|
+
* const otp = await num.waitForOtp({ timeout: 60 });
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
export async function provision(options, clientOrApiKey) {
|
|
52
|
+
return openChallenge(options, clientOrApiKey);
|
|
53
|
+
}
|
|
39
54
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG7C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG7C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG7C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,cAAc,EACd,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,cAAc,EACd,eAAe,EACf,QAAQ,GACT,MAAM,aAAa,CAAC;AAErB;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAAyB,EACzB,cAAwC;IAExC,IAAI,MAAsB,CAAC;IAE3B,IAAI,cAAc,YAAY,cAAc,EAAE,CAAC;QAC7C,MAAM,GAAG,cAAc,CAAC;IAC1B,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,IAAI,cAAc,CAAC,cAAc,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAAwB,MAAM,EAAE,WAAW,EAAE;QAC5E,QAAQ,EAAE,OAAO,CAAC,OAAO;QACzB,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtE,GAAG,CAAC,OAAO,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChF,WAAW,EAAE,OAAO,CAAC,UAAU,IAAI,IAAI;QACvC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACnE,CAAC,CAAC;IAEH,OAAO,IAAI,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AACzC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,OAAyB,EACzB,cAAwC;IAExC,OAAO,aAAa,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;AAChD,CAAC"}
|
package/dist/session.d.ts
CHANGED
|
@@ -13,11 +13,18 @@ export declare class NumberSession implements AsyncDisposable {
|
|
|
13
13
|
constructor(client: AgentSimClient, data: ProvisionedNumberData);
|
|
14
14
|
private _pollOtp;
|
|
15
15
|
/**
|
|
16
|
-
* Wait for
|
|
16
|
+
* Wait for the SMS challenge verdict.
|
|
17
17
|
*
|
|
18
18
|
* Throws `OtpTimeoutError` if no OTP is received within the timeout period.
|
|
19
19
|
* Sessions that time out are NOT billed — the $0.99 charge applies only to
|
|
20
|
-
* successfully
|
|
20
|
+
* successfully opened sessions that do not time out.
|
|
21
|
+
*
|
|
22
|
+
* Timeout is seconds. `waitForOtp` is kept as an alias of `waitForVerdict`.
|
|
23
|
+
*/
|
|
24
|
+
waitForVerdict(options?: WaitForOtpOptions): Promise<OtpResult>;
|
|
25
|
+
/**
|
|
26
|
+
* Alias of {@link NumberSession.waitForVerdict}. Same options object.
|
|
27
|
+
* Timeout is seconds.
|
|
21
28
|
*/
|
|
22
29
|
waitForOtp(options?: WaitForOtpOptions): Promise<OtpResult>;
|
|
23
30
|
getMessages(): Promise<SmsMessage[]>;
|
package/dist/session.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,qBAAqB,EAAsB,UAAU,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAIvI,qBAAa,aAAc,YAAW,eAAe;IAcjD,OAAO,CAAC,QAAQ,CAAC,MAAM;IAbzB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAS;IAEzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB,IAAI,MAAM,IAAI,MAAM,CAAyB;IAC7C,IAAI,OAAO,IAAI,MAAM,CAA0B;gBAG5B,MAAM,EAAE,cAAc,EACvC,IAAI,EAAE,qBAAqB;YAUf,QAAQ;IAoBtB
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,qBAAqB,EAAsB,UAAU,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAIvI,qBAAa,aAAc,YAAW,eAAe;IAcjD,OAAO,CAAC,QAAQ,CAAC,MAAM;IAbzB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAS;IAEzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB,IAAI,MAAM,IAAI,MAAM,CAAyB;IAC7C,IAAI,OAAO,IAAI,MAAM,CAA0B;gBAG5B,MAAM,EAAE,cAAc,EACvC,IAAI,EAAE,qBAAqB;YAUf,QAAQ;IAoBtB;;;;;;;;OAQG;IACG,cAAc,CAAC,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,SAAS,CAAC;IAqDzE;;;OAGG;IACG,UAAU,CAAC,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,SAAS,CAAC;IAI/D,WAAW,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IA8BpC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAOxB,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7C"}
|
package/dist/session.js
CHANGED
|
@@ -30,13 +30,15 @@ export class NumberSession {
|
|
|
30
30
|
};
|
|
31
31
|
}
|
|
32
32
|
/**
|
|
33
|
-
* Wait for
|
|
33
|
+
* Wait for the SMS challenge verdict.
|
|
34
34
|
*
|
|
35
35
|
* Throws `OtpTimeoutError` if no OTP is received within the timeout period.
|
|
36
36
|
* Sessions that time out are NOT billed — the $0.99 charge applies only to
|
|
37
|
-
* successfully
|
|
37
|
+
* successfully opened sessions that do not time out.
|
|
38
|
+
*
|
|
39
|
+
* Timeout is seconds. `waitForOtp` is kept as an alias of `waitForVerdict`.
|
|
38
40
|
*/
|
|
39
|
-
async
|
|
41
|
+
async waitForVerdict(options = {}) {
|
|
40
42
|
const timeout = options.timeout ?? 60;
|
|
41
43
|
const autoReroute = options.autoReroute ?? false;
|
|
42
44
|
const maxReroutes = options.maxReroutes ?? 2;
|
|
@@ -72,6 +74,13 @@ export class NumberSession {
|
|
|
72
74
|
}
|
|
73
75
|
}
|
|
74
76
|
}
|
|
77
|
+
/**
|
|
78
|
+
* Alias of {@link NumberSession.waitForVerdict}. Same options object.
|
|
79
|
+
* Timeout is seconds.
|
|
80
|
+
*/
|
|
81
|
+
async waitForOtp(options = {}) {
|
|
82
|
+
return this.waitForVerdict(options);
|
|
83
|
+
}
|
|
75
84
|
async getMessages() {
|
|
76
85
|
const data = await this.client.request("GET", `/sessions/${this.sessionId}/messages`);
|
|
77
86
|
return data.messages.map((m) => ({
|
package/dist/session.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG9C,MAAM,sBAAsB,GAAG,CAAC,IAAI,CAAU,CAAC;AAE/C,MAAM,OAAO,aAAa;IAcL;IAbX,QAAQ,GAAG,KAAK,CAAC;IACjB,OAAO,CAAS;IAChB,QAAQ,CAAS;IAEhB,SAAS,CAAS;IAClB,OAAO,CAAS;IAChB,SAAS,CAAS;IAClB,MAAM,CAAS;IAExB,IAAI,MAAM,KAAa,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAC7C,IAAI,OAAO,KAAa,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAE/C,YACmB,MAAsB,EACvC,IAA2B;QADV,WAAM,GAAN,MAAM,CAAgB;QAGvC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;QACjC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAC5B,CAAC;IAEO,KAAK,CAAC,QAAQ,CAAC,OAAe;QACpC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAMpC,MAAM,EACN,aAAa,IAAI,CAAC,SAAS,OAAO,EAClC,EAAE,eAAe,EAAE,OAAO,EAAE,CAC7B,CAAC;QAEF,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,QAAQ;YACtB,UAAU,EAAE,IAAI,CAAC,WAAW;YAC5B,UAAU,EAAE,IAAI,CAAC,WAAW;YAC5B,SAAS,EAAE,IAAI,CAAC,UAAU;SAC3B,CAAC;IACJ,CAAC;IAED
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
|