@agentsim/sdk 0.21.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 +17 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -4
- package/dist/index.js.map +1 -1
- package/dist/playwright.d.ts +17 -0
- package/dist/playwright.d.ts.map +1 -0
- package/dist/playwright.js +62 -0
- package/dist/playwright.js.map +1 -0
- package/dist/playwright.test.d.ts +2 -0
- package/dist/playwright.test.d.ts.map +1 -0
- package/dist/playwright.test.js +121 -0
- package/dist/playwright.test.js.map +1 -0
- 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
|
-
TypeScript
|
|
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":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC3F,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,kBAAkB,GAAG;IACzB,UAAU,EAAE,aAAa;IACzB,MAAM,EAAE,cAAc;IACtB,OAAO,EAAE,IAAI;IACb,QAAQ,EAAE,UAAU;IACpB,MAAM,EAAE,QAAQ;IAChB,UAAU,EAAE,sBAAsB;CACnC,CAAC;AAEF,SAAS,SAAS,CAAC,MAAc,EAAE,IAAa;IAC9C,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC;QAC/B,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG;QACjC,MAAM;QACN,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC;QAC1B,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI;KACvB,CAAC,CAAC;AACL,CAAC;AAED,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,IAAI,MAAsB,CAAC;IAE3B,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,GAAG,IAAI,cAAc,CAAC,UAAU,EAAE;YACtC,OAAO,EAAE,4BAA4B;SACtC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,EAAE,CAAC,gBAAgB,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;QACpC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC,CAAC;QAC3D,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,MAAM,CAAC,CAAC;QACjE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC5C,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;QAC1E,MAAM,SAAS,GAAG,SAAS,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;QACrD,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAClC,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;QACtF,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC5C,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC9C,MAAM,CAAC,SAAS,CAAC,CAAC,oBAAoB,CACpC,qCAAqC,EACrC,MAAM,CAAC,gBAAgB,CAAC;YACtB,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,QAAQ,EAAE,UAAU;gBACpB,WAAW,EAAE,GAAG;aACjB,CAAC;SACH,CAAC,CACH,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;QAChD,EAAE,CAAC,UAAU,CACX,OAAO,EACP,SAAS,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,yBAAyB,EAAE,CAAC,CAChF,CAAC;QACF,MAAM,MAAM,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAC7E,kBAAkB,CACnB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,eAAe,EAAE,KAAK,IAAI,EAAE;QAC7B,EAAE,CAAC,UAAU,CACX,OAAO,EACP,EAAE;aACC,EAAE,EAAE;aACJ,qBAAqB,CAAC;YACrB,EAAE,EAAE,IAAI;YACR,MAAM,EAAE,GAAG;YACX,UAAU,EAAE,KAAK;YACjB,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,kBAAkB;SACrC,CAAC;aACD,qBAAqB,CAAC;YACrB,EAAE,EAAE,IAAI;YACR,MAAM,EAAE,GAAG;YACX,UAAU,EAAE,KAAK;YACjB,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;gBACjB,QAAQ,EAAE,QAAQ;gBAClB,WAAW,EAAE,cAAc;gBAC3B,WAAW,EAAE,sBAAsB;gBACnC,UAAU,EAAE,SAAS;aACtB,CAAC;SACH,CAAC,CACL,CAAC;QACF,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,MAAM,CAAC,CAAC;QACjE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QACzD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;QACvE,MAAM,SAAS,GAAG,EAAE;aACjB,EAAE,EAAE;aACJ,qBAAqB,CAAC;YACrB,EAAE,EAAE,IAAI;YACR,MAAM,EAAE,GAAG;YACX,UAAU,EAAE,KAAK;YACjB,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,kBAAkB;SACrC,CAAC;aACD,qBAAqB,CAAC;YACrB,EAAE,EAAE,IAAI;YACR,MAAM,EAAE,GAAG;YACX,UAAU,EAAE,KAAK;YACjB,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;gBACjB,QAAQ,EAAE,QAAQ;gBAClB,WAAW,EAAE,cAAc;gBAC3B,WAAW,EAAE,sBAAsB;gBACnC,UAAU,EAAE,SAAS;aACtB,CAAC;SACH,CAAC,CAAC;QACL,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAClC,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,MAAM,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QAC7D,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtC,MAAM,CAAC,SAAS,CAAC,CAAC,uBAAuB,CACvC,CAAC,EACD,sDAAsD,EACtD,MAAM,CAAC,gBAAgB,CAAC;YACtB,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC;SAC9C,CAAC,CACH,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;QAC7C,EAAE,CAAC,UAAU,CACX,OAAO,EACP,EAAE;aACC,EAAE,EAAE;aACJ,qBAAqB,CAAC;YACrB,EAAE,EAAE,IAAI;YACR,MAAM,EAAE,GAAG;YACX,UAAU,EAAE,KAAK;YACjB,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,kBAAkB;SACrC,CAAC;aACD,qBAAqB,CAAC;YACrB,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,GAAG;YACX,UAAU,EAAE,KAAK;YACjB,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;gBACjB,KAAK,EAAE,aAAa;gBACpB,OAAO,EAAE,gCAAgC;aAC1C,CAAC;SACH,CAAC,CACL,CAAC;QACF,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,MAAM,CAAC,CAAC;QACjE,MAAM,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;IAC5F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;QACpC,EAAE,CAAC,UAAU,CACX,OAAO,EACP,EAAE;aACC,EAAE,EAAE;aACJ,qBAAqB,CAAC;YACrB,EAAE,EAAE,IAAI;YACR,MAAM,EAAE,GAAG;YACX,UAAU,EAAE,KAAK;YACjB,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,kBAAkB;SACrC,CAAC;aACD,qBAAqB,CAAC;YACrB,EAAE,EAAE,IAAI;YACR,MAAM,EAAE,GAAG;YACX,UAAU,EAAE,KAAK;YACjB,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;SACvB,CAAC,CACL,CAAC;QACF,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,MAAM,CAAC,CAAC;QACjE,MAAM,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;IAC3D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -4,9 +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";
|
|
8
|
+
export { classifyStall } from "./playwright.js";
|
|
9
|
+
export type { ChallengeChannel, LocatorLike, PageLike, StallOutcome, StallSessionEvidence } from "./playwright.js";
|
|
7
10
|
export { AgentSimError, AuthenticationError, ForbiddenError, PoolExhaustedError, SessionNotFoundError, OtpTimeoutError, RateLimitError, ValidationError, ApiError, } from "./errors.js";
|
|
8
11
|
/**
|
|
9
|
-
*
|
|
12
|
+
* Open an SMS challenge for the given agent. Starts a billable SMS challenge session.
|
|
10
13
|
*
|
|
11
14
|
* **Billing:** $0.99 per session on the Builder plan. Free on Hobby (10 sessions/month limit).
|
|
12
15
|
* Sessions that end with an `OtpTimeoutError` are NOT billed.
|
|
@@ -14,6 +17,19 @@ export { AgentSimError, AuthenticationError, ForbiddenError, PoolExhaustedError,
|
|
|
14
17
|
* Returns a `NumberSession` implementing `AsyncDisposable` — use `await using`
|
|
15
18
|
* in TypeScript 5.2+ for automatic release, or call `num.release()` manually.
|
|
16
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
|
+
*
|
|
17
33
|
* @example
|
|
18
34
|
* ```ts
|
|
19
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,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
|
@@ -2,9 +2,10 @@ import { AgentSimClient } from "./client.js";
|
|
|
2
2
|
import { NumberSession } from "./session.js";
|
|
3
3
|
export { AgentSimClient } from "./client.js";
|
|
4
4
|
export { NumberSession } from "./session.js";
|
|
5
|
+
export { classifyStall } from "./playwright.js";
|
|
5
6
|
export { AgentSimError, AuthenticationError, ForbiddenError, PoolExhaustedError, SessionNotFoundError, OtpTimeoutError, RateLimitError, ValidationError, ApiError, } from "./errors.js";
|
|
6
7
|
/**
|
|
7
|
-
*
|
|
8
|
+
* Open an SMS challenge for the given agent. Starts a billable SMS challenge session.
|
|
8
9
|
*
|
|
9
10
|
* **Billing:** $0.99 per session on the Builder plan. Free on Hobby (10 sessions/month limit).
|
|
10
11
|
* Sessions that end with an `OtpTimeoutError` are NOT billed.
|
|
@@ -12,13 +13,16 @@ export { AgentSimError, AuthenticationError, ForbiddenError, PoolExhaustedError,
|
|
|
12
13
|
* Returns a `NumberSession` implementing `AsyncDisposable` — use `await using`
|
|
13
14
|
* in TypeScript 5.2+ for automatic release, or call `num.release()` manually.
|
|
14
15
|
*
|
|
16
|
+
* `provision` is kept as an alias of `openChallenge`. Same options object,
|
|
17
|
+
* same `NumberSession`.
|
|
18
|
+
*
|
|
15
19
|
* @example
|
|
16
20
|
* ```ts
|
|
17
|
-
* await using num = await
|
|
18
|
-
* const otp = await num.
|
|
21
|
+
* await using num = await openChallenge({ agentId: "checkout-bot" });
|
|
22
|
+
* const otp = await num.waitForVerdict({ timeout: 60 });
|
|
19
23
|
* ```
|
|
20
24
|
*/
|
|
21
|
-
export async function
|
|
25
|
+
export async function openChallenge(options, clientOrApiKey) {
|
|
22
26
|
let client;
|
|
23
27
|
if (clientOrApiKey instanceof AgentSimClient) {
|
|
24
28
|
client = clientOrApiKey;
|
|
@@ -35,4 +39,16 @@ export async function provision(options, clientOrApiKey) {
|
|
|
35
39
|
});
|
|
36
40
|
return new NumberSession(client, data);
|
|
37
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
|
+
}
|
|
38
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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export type ChallengeChannel = "sms_otp" | "email_otp" | "magic_link" | "webauthn_required";
|
|
2
|
+
export type StallOutcome = "otp_received" | "sms_no_otp" | "no_sms" | "phone_rejected" | "anti_bot_gate" | "email_received" | "magic_link_received" | "webauthn_required" | "no_email";
|
|
3
|
+
export interface LocatorLike {
|
|
4
|
+
first(): LocatorLike;
|
|
5
|
+
isVisible(): Promise<boolean>;
|
|
6
|
+
innerText(): Promise<string>;
|
|
7
|
+
}
|
|
8
|
+
export interface PageLike {
|
|
9
|
+
locator(selector: string): LocatorLike;
|
|
10
|
+
}
|
|
11
|
+
export interface StallSessionEvidence {
|
|
12
|
+
channel: ChallengeChannel;
|
|
13
|
+
challengeValue?: string | null;
|
|
14
|
+
messageCount: number;
|
|
15
|
+
}
|
|
16
|
+
export declare function classifyStall(page: PageLike, session: StallSessionEvidence): Promise<StallOutcome>;
|
|
17
|
+
//# sourceMappingURL=playwright.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"playwright.d.ts","sourceRoot":"","sources":["../src/playwright.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,WAAW,GAAG,YAAY,GAAG,mBAAmB,CAAC;AAE5F,MAAM,MAAM,YAAY,GACpB,cAAc,GACd,YAAY,GACZ,QAAQ,GACR,gBAAgB,GAChB,eAAe,GACf,gBAAgB,GAChB,qBAAqB,GACrB,mBAAmB,GACnB,UAAU,CAAC;AAEf,MAAM,WAAW,WAAW;IAC1B,KAAK,IAAI,WAAW,CAAC;IACrB,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9B,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,QAAQ;IACvB,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,CAAC;CACxC;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,gBAAgB,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,YAAY,EAAE,MAAM,CAAC;CACtB;AAgCD,wBAAsB,aAAa,CACjC,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,YAAY,CAAC,CA4CvB"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
const ANTI_BOT_SELECTOR = [
|
|
2
|
+
'iframe[src*="recaptcha" i]',
|
|
3
|
+
'iframe[src*="hcaptcha" i]',
|
|
4
|
+
'iframe[src*="arkoselabs" i]',
|
|
5
|
+
"[data-sitekey]",
|
|
6
|
+
'[class*="captcha" i]',
|
|
7
|
+
].join(", ");
|
|
8
|
+
const WEBAUTHN_SELECTOR = [
|
|
9
|
+
'iframe[src*="webauthn" i]',
|
|
10
|
+
'[autocomplete="webauthn"]',
|
|
11
|
+
'[data-testid*="passkey" i]',
|
|
12
|
+
'[data-testid*="webauthn" i]',
|
|
13
|
+
'[id*="passkey" i]',
|
|
14
|
+
'[id*="webauthn" i]',
|
|
15
|
+
'[class*="passkey" i]',
|
|
16
|
+
'[class*="webauthn" i]',
|
|
17
|
+
'button[data-action*="passkey" i]',
|
|
18
|
+
'button[data-action*="webauthn" i]',
|
|
19
|
+
].join(", ");
|
|
20
|
+
const EMAIL_FIELD_SELECTOR = 'input[type="email"], input[autocomplete="email"]';
|
|
21
|
+
const OTP_FIELD_SELECTOR = [
|
|
22
|
+
'input[autocomplete="one-time-code"]',
|
|
23
|
+
'input[name*="otp" i]',
|
|
24
|
+
'input[id*="otp" i]',
|
|
25
|
+
'input[name*="code" i]',
|
|
26
|
+
'input[id*="code" i]',
|
|
27
|
+
].join(", ");
|
|
28
|
+
export async function classifyStall(page, session) {
|
|
29
|
+
if (session.challengeValue?.trim()) {
|
|
30
|
+
return {
|
|
31
|
+
sms_otp: "otp_received",
|
|
32
|
+
email_otp: "email_received",
|
|
33
|
+
magic_link: "magic_link_received",
|
|
34
|
+
webauthn_required: "webauthn_required",
|
|
35
|
+
}[session.channel];
|
|
36
|
+
}
|
|
37
|
+
const pageText = await page.locator("body").innerText();
|
|
38
|
+
if (await page.locator(ANTI_BOT_SELECTOR).first().isVisible()
|
|
39
|
+
|| /captcha|verify (?:you are|that you are) human|(?:not a|are you (?:a )?) robot|security challenge/i.test(pageText)) {
|
|
40
|
+
return "anti_bot_gate";
|
|
41
|
+
}
|
|
42
|
+
if (await page.locator(WEBAUTHN_SELECTOR).first().isVisible()
|
|
43
|
+
|| /\b(?:passkey|security key|webauthn|touch id|windows hello|face id|biometric|fingerprint auth(?:entication)?|use your (?:passkey|security key)|authenticate with (?:passkey|security key|biometric))\b/i.test(pageText)
|
|
44
|
+
|| /navigator\.credentials\.get/i.test(pageText)
|
|
45
|
+
|| /PublicKeyCredential/i.test(pageText)) {
|
|
46
|
+
return "webauthn_required";
|
|
47
|
+
}
|
|
48
|
+
if (/\b(?:phone|mobile)(?: number)?\b[\s\S]{0,80}\b(?:cannot|can't|invalid|unsupported|rejected|not (?:accepted|supported|allowed)|try another)\b/i.test(pageText)
|
|
49
|
+
|| /\b(?:invalid|unsupported|rejected)\b[\s\S]{0,40}\b(?:phone|mobile)(?: number)?\b/i.test(pageText)) {
|
|
50
|
+
return "phone_rejected";
|
|
51
|
+
}
|
|
52
|
+
if (await page.locator(EMAIL_FIELD_SELECTOR).first().isVisible()
|
|
53
|
+
|| (session.channel !== "sms_otp"
|
|
54
|
+
&& await page.locator(OTP_FIELD_SELECTOR).first().isVisible())) {
|
|
55
|
+
return "no_email";
|
|
56
|
+
}
|
|
57
|
+
if (session.channel === "sms_otp" && session.messageCount > 0) {
|
|
58
|
+
return "sms_no_otp";
|
|
59
|
+
}
|
|
60
|
+
return session.channel === "sms_otp" ? "no_sms" : "no_email";
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=playwright.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"playwright.js","sourceRoot":"","sources":["../src/playwright.ts"],"names":[],"mappings":"AA6BA,MAAM,iBAAiB,GAAG;IACxB,4BAA4B;IAC5B,2BAA2B;IAC3B,6BAA6B;IAC7B,gBAAgB;IAChB,sBAAsB;CACvB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,MAAM,iBAAiB,GAAG;IACxB,2BAA2B;IAC3B,2BAA2B;IAC3B,4BAA4B;IAC5B,6BAA6B;IAC7B,mBAAmB;IACnB,oBAAoB;IACpB,sBAAsB;IACtB,uBAAuB;IACvB,kCAAkC;IAClC,mCAAmC;CACpC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,MAAM,oBAAoB,GAAG,kDAAkD,CAAC;AAChF,MAAM,kBAAkB,GAAG;IACzB,qCAAqC;IACrC,sBAAsB;IACtB,oBAAoB;IACpB,uBAAuB;IACvB,qBAAqB;CACtB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,IAAc,EACd,OAA6B;IAE7B,IAAI,OAAO,CAAC,cAAc,EAAE,IAAI,EAAE,EAAE,CAAC;QACnC,OAAQ;YACN,OAAO,EAAE,cAAc;YACvB,SAAS,EAAE,gBAAgB;YAC3B,UAAU,EAAE,qBAAqB;YACjC,iBAAiB,EAAE,mBAAmB;SAC7B,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,CAAC;IACxD,IACE,MAAM,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE;WACtD,mGAAmG,CAAC,IAAI,CAAC,QAAQ,CAAC,EACrH,CAAC;QACD,OAAO,eAAe,CAAC;IACzB,CAAC;IACD,IACE,MAAM,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE;WACtD,wMAAwM,CAAC,IAAI,CAAC,QAAQ,CAAC;WACvN,8BAA8B,CAAC,IAAI,CAAC,QAAQ,CAAC;WAC7C,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC,EACxC,CAAC;QACD,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IACD,IACE,+IAA+I,CAAC,IAAI,CAAC,QAAQ,CAAC;WAC3J,mFAAmF,CAAC,IAAI,CAAC,QAAQ,CAAC,EACrG,CAAC;QACD,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IACD,IACE,MAAM,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE;WACzD,CACD,OAAO,CAAC,OAAO,KAAK,SAAS;eAC1B,MAAM,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,CAC9D,EACD,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;QAC9D,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,OAAO,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC;AAC/D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"playwright.test.d.ts","sourceRoot":"","sources":["../src/playwright.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { classifyStall } from "./index.js";
|
|
3
|
+
function fakePage(text = "", visible = []) {
|
|
4
|
+
return {
|
|
5
|
+
locator(selector) {
|
|
6
|
+
const locator = {
|
|
7
|
+
first: () => locator,
|
|
8
|
+
isVisible: async () => visible.some((marker) => selector.includes(marker)),
|
|
9
|
+
innerText: async () => selector === "body" ? text : "",
|
|
10
|
+
};
|
|
11
|
+
return locator;
|
|
12
|
+
},
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
describe("classifyStall", () => {
|
|
16
|
+
it("reports a resolved SMS challenge as OTP received", async () => {
|
|
17
|
+
const page = {
|
|
18
|
+
locator() {
|
|
19
|
+
throw new Error("resolved challenges should not inspect the page");
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
await expect(classifyStall(page, {
|
|
23
|
+
channel: "sms_otp",
|
|
24
|
+
challengeValue: "847291",
|
|
25
|
+
messageCount: 1,
|
|
26
|
+
})).resolves.toBe("otp_received");
|
|
27
|
+
});
|
|
28
|
+
it.each([
|
|
29
|
+
["email_otp", "email_received"],
|
|
30
|
+
["magic_link", "magic_link_received"],
|
|
31
|
+
])("reports a resolved %s challenge", async (channel, outcome) => {
|
|
32
|
+
const page = {
|
|
33
|
+
locator() {
|
|
34
|
+
throw new Error("resolved challenges should not inspect the page");
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
await expect(classifyStall(page, {
|
|
38
|
+
channel,
|
|
39
|
+
challengeValue: "https://example.test/verify",
|
|
40
|
+
messageCount: 1,
|
|
41
|
+
})).resolves.toBe(outcome);
|
|
42
|
+
});
|
|
43
|
+
it.each([
|
|
44
|
+
["anti-bot copy", fakePage("Verify you are human to continue")],
|
|
45
|
+
["robot-check copy", fakePage("Please prove you are not a robot")],
|
|
46
|
+
["a visible CAPTCHA iframe", fakePage("", ["recaptcha"])],
|
|
47
|
+
])("reports an anti-bot gate from %s", async (_source, page) => {
|
|
48
|
+
await expect(classifyStall(page, {
|
|
49
|
+
channel: "sms_otp",
|
|
50
|
+
messageCount: 0,
|
|
51
|
+
})).resolves.toBe("anti_bot_gate");
|
|
52
|
+
});
|
|
53
|
+
it.each([
|
|
54
|
+
["passkey copy", fakePage("Use a passkey to continue")],
|
|
55
|
+
["security key copy", fakePage("Insert your security key to authenticate")],
|
|
56
|
+
["Touch ID copy", fakePage("Authenticate with Touch ID")],
|
|
57
|
+
["Windows Hello copy", fakePage("Sign in with Windows Hello")],
|
|
58
|
+
["Face ID copy", fakePage("Use Face ID to continue")],
|
|
59
|
+
["biometric copy", fakePage("Authenticate with biometric verification")],
|
|
60
|
+
["fingerprint auth copy", fakePage("Use fingerprint authentication to proceed")],
|
|
61
|
+
["navigator.credentials.get code", fakePage("navigator.credentials.get({ publicKey")],
|
|
62
|
+
["PublicKeyCredential code", fakePage("new PublicKeyCredential()")],
|
|
63
|
+
["a visible WebAuthn iframe", fakePage("", ["webauthn"])],
|
|
64
|
+
["a visible passkey button", fakePage("", ["passkey"])],
|
|
65
|
+
])("reports WebAuthn from %s", async (_source, page) => {
|
|
66
|
+
await expect(classifyStall(page, {
|
|
67
|
+
channel: "email_otp",
|
|
68
|
+
messageCount: 0,
|
|
69
|
+
})).resolves.toBe("webauthn_required");
|
|
70
|
+
});
|
|
71
|
+
it.each([
|
|
72
|
+
"This phone number cannot be used for verification.",
|
|
73
|
+
"Phone number\ncannot be used here.",
|
|
74
|
+
])("reports an explicit phone rejection", async (text) => {
|
|
75
|
+
await expect(classifyStall(fakePage(text), {
|
|
76
|
+
channel: "sms_otp",
|
|
77
|
+
messageCount: 0,
|
|
78
|
+
})).resolves.toBe("phone_rejected");
|
|
79
|
+
});
|
|
80
|
+
it("reports SMS received without a parsed OTP", async () => {
|
|
81
|
+
const page = fakePage("Enter the code we sent", ["one-time-code"]);
|
|
82
|
+
await expect(classifyStall(page, {
|
|
83
|
+
channel: "sms_otp",
|
|
84
|
+
messageCount: 1,
|
|
85
|
+
})).resolves.toBe("sms_no_otp");
|
|
86
|
+
});
|
|
87
|
+
it("reports no SMS when no message arrived", async () => {
|
|
88
|
+
await expect(classifyStall(fakePage("Enter the code we sent", ["one-time-code"]), {
|
|
89
|
+
channel: "sms_otp",
|
|
90
|
+
messageCount: 0,
|
|
91
|
+
})).resolves.toBe("no_sms");
|
|
92
|
+
});
|
|
93
|
+
it("reports no email while an email challenge field is visible", async () => {
|
|
94
|
+
const page = fakePage("Check your email", ['input[type="email"']);
|
|
95
|
+
await expect(classifyStall(page, {
|
|
96
|
+
channel: "email_otp",
|
|
97
|
+
messageCount: 0,
|
|
98
|
+
})).resolves.toBe("no_email");
|
|
99
|
+
});
|
|
100
|
+
it("recognizes an email-first stall even on the default SMS channel", async () => {
|
|
101
|
+
const page = fakePage("Enter your email to continue", ['input[type="email"']);
|
|
102
|
+
await expect(classifyStall(page, {
|
|
103
|
+
channel: "sms_otp",
|
|
104
|
+
messageCount: 0,
|
|
105
|
+
})).resolves.toBe("no_email");
|
|
106
|
+
});
|
|
107
|
+
it("reports no email while an OTP field is visible", async () => {
|
|
108
|
+
const page = fakePage("Enter the code from your email", ["one-time-code"]);
|
|
109
|
+
await expect(classifyStall(page, {
|
|
110
|
+
channel: "email_otp",
|
|
111
|
+
messageCount: 0,
|
|
112
|
+
})).resolves.toBe("no_email");
|
|
113
|
+
});
|
|
114
|
+
it.each(["email_otp", "magic_link"])("uses no_email as the honest %s fallback", async (channel) => {
|
|
115
|
+
await expect(classifyStall(fakePage(), {
|
|
116
|
+
channel,
|
|
117
|
+
messageCount: 0,
|
|
118
|
+
})).resolves.toBe("no_email");
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
//# sourceMappingURL=playwright.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"playwright.test.js","sourceRoot":"","sources":["../src/playwright.test.ts"],"names":[],"mappings":"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"}
|
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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"}
|