tripwire-server 0.3.1 → 0.3.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.
Files changed (27) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +27 -7
  3. data/lib/tripwire/server/client.rb +75 -23
  4. data/lib/tripwire/server/gate_delivery.rb +27 -2
  5. data/lib/tripwire/server/version.rb +1 -1
  6. data/spec/README.md +4 -4
  7. data/spec/fixtures/api/gate/service-create.json +2 -2
  8. data/spec/fixtures/api/gate/service-detail.json +2 -2
  9. data/spec/fixtures/api/gate/service-disable.json +2 -2
  10. data/spec/fixtures/api/gate/service-update.json +2 -2
  11. data/spec/fixtures/api/gate/services-list.json +2 -2
  12. data/spec/fixtures/api/organizations/api-key-create.json +27 -0
  13. data/spec/fixtures/api/{teams → organizations}/api-key-list.json +10 -5
  14. data/spec/fixtures/api/{teams → organizations}/api-key-revoke.json +10 -5
  15. data/spec/fixtures/api/organizations/api-key-rotate.json +27 -0
  16. data/spec/fixtures/api/organizations/api-key-update.json +29 -0
  17. data/spec/fixtures/api/{teams/team-create.json → organizations/organization-create.json} +4 -4
  18. data/spec/fixtures/api/{teams/team-update.json → organizations/organization-update.json} +4 -4
  19. data/spec/fixtures/api/{teams/team.json → organizations/organization.json} +4 -4
  20. data/spec/fixtures/api/sessions/detail.json +45 -35
  21. data/spec/fixtures/gate-delivery/approved-webhook-payload.valid.json +0 -1
  22. data/spec/fixtures/gate-delivery/webhook-signature.json +3 -3
  23. data/spec/fixtures/manifest.json +20 -14
  24. data/spec/openapi.json +12099 -5351
  25. metadata +11 -10
  26. data/spec/fixtures/api/teams/api-key-create.json +0 -21
  27. data/spec/fixtures/api/teams/api-key-rotate.json +0 -21
@@ -79,46 +79,47 @@
79
79
  ]
80
80
  }
81
81
  ],
82
- "automation": {
83
- "category": "automation",
84
- "confidence": 0.97,
85
- "provider": "browserless",
86
- "product": "playwright",
87
- "framework": "playwright",
88
- "concealment_style": "stealth",
89
- "organization": "Browserless",
90
- "facets": {
91
- "category": {
82
+ "attribution": {
83
+ "labels": [
84
+ {
85
+ "kind": "actor",
92
86
  "value": "automation",
93
- "confidence": 0.97,
94
- "relation": "is"
87
+ "label": "Automation",
88
+ "confidence": 97
95
89
  },
96
- "provider_family": {
90
+ {
91
+ "kind": "provider",
97
92
  "value": "browserless",
98
- "confidence": 0.92,
99
- "relation": "resembles"
93
+ "label": "Browserless",
94
+ "confidence": 92
100
95
  },
101
- "product_identity": {
96
+ {
97
+ "kind": "tool",
102
98
  "value": "playwright",
103
- "confidence": 0.89,
104
- "relation": "is"
99
+ "label": "Playwright",
100
+ "confidence": 89
105
101
  },
106
- "execution_framework": {
107
- "value": "playwright",
108
- "confidence": 0.89,
109
- "relation": "is"
110
- },
111
- "concealment_style": {
102
+ {
103
+ "kind": "evasion",
112
104
  "value": "stealth",
113
- "confidence": 0.73,
114
- "relation": "is"
105
+ "label": "Stealth",
106
+ "confidence": 73
115
107
  },
116
- "organization": {
108
+ {
109
+ "kind": "organization",
117
110
  "value": "Browserless",
118
- "confidence": 0.68,
119
- "relation": "is"
111
+ "label": "Browserless",
112
+ "confidence": 68
120
113
  }
121
- }
114
+ ],
115
+ "behaviors": [
116
+ {
117
+ "channel": "typing",
118
+ "value": "synthetic-typing",
119
+ "label": "Synthetic Typing",
120
+ "confidence": 86
121
+ }
122
+ ]
122
123
  },
123
124
  "web_bot_auth": {
124
125
  "status": "verified",
@@ -176,12 +177,21 @@
176
177
  "evaluated_at": "2026-03-24T20:00:05.000Z"
177
178
  },
178
179
  "runtime_integrity": {
179
- "tampering_detected": true,
180
- "developer_tools_detected": true,
181
- "emulation_suspected": false,
182
- "virtualization_suspected": true,
183
- "privacy_hardening_suspected": true
180
+ "tampering": "high_risk",
181
+ "developer_tools": "high_risk",
182
+ "emulation": "clean",
183
+ "virtualization": "high_risk",
184
+ "privacy_hardening": "notice",
185
+ "identity_spoofing": "clean",
186
+ "replay": "clean",
187
+ "outdated_environment": "clean"
184
188
  },
189
+ "native_runtime_integrity": null,
190
+ "native_app": null,
191
+ "native_carrier": null,
192
+ "native_motion_print": null,
193
+ "device_identity": null,
194
+ "install_id": null,
185
195
  "visitor_fingerprint": {
186
196
  "object": "visitor_fingerprint",
187
197
  "id": "vid_456789abcdefghjkmnpqrstvwx",
@@ -1,5 +1,4 @@
1
1
  {
2
- "event": "gate.session.approved",
3
2
  "service_id": "tripwire",
4
3
  "gate_session_id": "gate_0123456789abcdefghjkmnpqrs",
5
4
  "gate_account_id": "gacct_0123456789abcdefghjkmnpqrs",
@@ -3,7 +3,7 @@
3
3
  "timestamp": "1735776000",
4
4
  "expired_timestamp": "1735775400",
5
5
  "now_seconds": 1735776000,
6
- "raw_body": "{\"event\":\"gate.session.approved\",\"service_id\":\"tripwire\"}",
7
- "signature": "e31cfe4ad62aa4a5ed4eaa8c31c05af7f6482d276ff43eb466c562d101835b26",
8
- "invalid_signature": "031cfe4ad62aa4a5ed4eaa8c31c05af7f6482d276ff43eb466c562d101835b26"
6
+ "raw_body": "{\"id\":\"wevt_0123456789abcdef0123456789abcdef\",\"object\":\"webhook_event\",\"type\":\"gate.session.approved\",\"created\":\"2026-01-02T00:00:00.000Z\",\"data\":{\"service_id\":\"tripwire\",\"gate_session_id\":\"gate_0123456789abcdefghjkmnpqrs\",\"gate_account_id\":\"gacct_0123456789abcdefghjkmnpqrs\",\"account_name\":\"Acme\",\"metadata\":{\"plan\":\"pro\"},\"tripwire\":{\"verdict\":\"human\",\"score\":0.12},\"delivery\":{\"version\":1,\"algorithm\":\"x25519-hkdf-sha256/aes-256-gcm\",\"key_id\":\"LyGqfpvB0SCaX4P0inVpMJTAjCNJVWq_3OE87it2ZYo\",\"public_key\":\"bn6szfMIS-7pLl01PqvssrrGRoW1SVTkUuqeg0hfrW0\"}}}",
7
+ "signature": "0057858d4e9c78cce5c72525a21fa3963c8f76cef2d864a31a2245fce4697ea1",
8
+ "invalid_signature": "1057858d4e9c78cce5c72525a21fa3963c8f76cef2d864a31a2245fce4697ea1"
9
9
  }
@@ -49,47 +49,53 @@
49
49
  "status": "200"
50
50
  },
51
51
  {
52
- "file": "api/teams/team.json",
53
- "path": "/v1/teams/{teamId}",
52
+ "file": "api/organizations/organization.json",
53
+ "path": "/v1/organizations/{organizationId}",
54
54
  "method": "get",
55
55
  "status": "200"
56
56
  },
57
57
  {
58
- "file": "api/teams/team-create.json",
59
- "path": "/v1/teams",
58
+ "file": "api/organizations/organization-create.json",
59
+ "path": "/v1/organizations",
60
60
  "method": "post",
61
61
  "status": "201"
62
62
  },
63
63
  {
64
- "file": "api/teams/team-update.json",
65
- "path": "/v1/teams/{teamId}",
64
+ "file": "api/organizations/organization-update.json",
65
+ "path": "/v1/organizations/{organizationId}",
66
66
  "method": "patch",
67
67
  "status": "200"
68
68
  },
69
69
  {
70
- "file": "api/teams/api-key-create.json",
71
- "path": "/v1/teams/{teamId}/api-keys",
70
+ "file": "api/organizations/api-key-create.json",
71
+ "path": "/v1/organizations/{organizationId}/api-keys",
72
72
  "method": "post",
73
73
  "status": "201"
74
74
  },
75
75
  {
76
- "file": "api/teams/api-key-list.json",
77
- "path": "/v1/teams/{teamId}/api-keys",
76
+ "file": "api/organizations/api-key-list.json",
77
+ "path": "/v1/organizations/{organizationId}/api-keys",
78
78
  "method": "get",
79
79
  "status": "200"
80
80
  },
81
81
  {
82
- "file": "api/teams/api-key-rotate.json",
83
- "path": "/v1/teams/{teamId}/api-keys/{keyId}/rotations",
82
+ "file": "api/organizations/api-key-rotate.json",
83
+ "path": "/v1/organizations/{organizationId}/api-keys/{keyId}/rotations",
84
84
  "method": "post",
85
85
  "status": "201"
86
86
  },
87
87
  {
88
- "file": "api/teams/api-key-revoke.json",
89
- "path": "/v1/teams/{teamId}/api-keys/{keyId}",
88
+ "file": "api/organizations/api-key-revoke.json",
89
+ "path": "/v1/organizations/{organizationId}/api-keys/{keyId}",
90
90
  "method": "delete",
91
91
  "status": "200"
92
92
  },
93
+ {
94
+ "file": "api/organizations/api-key-update.json",
95
+ "path": "/v1/organizations/{organizationId}/api-keys/{keyId}",
96
+ "method": "patch",
97
+ "status": "200"
98
+ },
93
99
  {
94
100
  "file": "api/gate/registry-list.json",
95
101
  "path": "/v1/gate/registry",