@atlasauth/backend 0.24.0 → 0.26.0

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 (201) hide show
  1. package/CHANGELOG.md +39 -1
  2. package/dist/client/abac.d.ts +521 -0
  3. package/dist/client/abac.js +146 -0
  4. package/dist/client/abac.js.map +1 -0
  5. package/dist/client/access-policies.d.ts +100 -0
  6. package/dist/client/access-policies.js +29 -0
  7. package/dist/client/access-policies.js.map +1 -0
  8. package/dist/client/action-gallery.d.ts +1 -1
  9. package/dist/client/action-gallery.js.map +1 -1
  10. package/dist/client/actions.d.ts +129 -6
  11. package/dist/client/actions.js +4 -0
  12. package/dist/client/actions.js.map +1 -1
  13. package/dist/client/analytics-reports.d.ts +215 -0
  14. package/dist/client/analytics-reports.js +56 -0
  15. package/dist/client/analytics-reports.js.map +1 -0
  16. package/dist/client/app-catalog.d.ts +74 -0
  17. package/dist/client/app-catalog.js +30 -0
  18. package/dist/client/app-catalog.js.map +1 -0
  19. package/dist/client/attack-protection.d.ts +10 -0
  20. package/dist/client/attack-protection.js +8 -0
  21. package/dist/client/attack-protection.js.map +1 -1
  22. package/dist/client/audit-events.d.ts +71 -0
  23. package/dist/client/audit-events.js +28 -0
  24. package/dist/client/audit-events.js.map +1 -1
  25. package/dist/client/authz-decisions.d.ts +108 -0
  26. package/dist/client/authz-decisions.js +40 -0
  27. package/dist/client/authz-decisions.js.map +1 -0
  28. package/dist/client/connections.d.ts +507 -0
  29. package/dist/client/connections.js +164 -0
  30. package/dist/client/connections.js.map +1 -0
  31. package/dist/client/credentials.d.ts +8 -0
  32. package/dist/client/credentials.js.map +1 -1
  33. package/dist/client/custom-oauth-providers.d.ts +15 -0
  34. package/dist/client/custom-oauth-providers.js.map +1 -1
  35. package/dist/client/delegated-ui-proxy.d.ts +25 -0
  36. package/dist/client/delegated-ui-proxy.js +46 -0
  37. package/dist/client/delegated-ui-proxy.js.map +1 -0
  38. package/dist/client/desktop-mfa.d.ts +104 -0
  39. package/dist/client/desktop-mfa.js +44 -0
  40. package/dist/client/desktop-mfa.js.map +1 -0
  41. package/dist/client/devices.d.ts +44 -0
  42. package/dist/client/devices.js +26 -0
  43. package/dist/client/devices.js.map +1 -0
  44. package/dist/client/email-templates.d.ts +1 -1
  45. package/dist/client/email-templates.js.map +1 -1
  46. package/dist/client/fga.d.ts +125 -4
  47. package/dist/client/fga.js +40 -0
  48. package/dist/client/fga.js.map +1 -1
  49. package/dist/client/flags.d.ts +101 -0
  50. package/dist/client/flags.js +104 -0
  51. package/dist/client/flags.js.map +1 -0
  52. package/dist/client/groups.d.ts +146 -0
  53. package/dist/client/groups.js +67 -0
  54. package/dist/client/groups.js.map +1 -0
  55. package/dist/client/identity-verification.d.ts +62 -0
  56. package/dist/client/identity-verification.js +39 -0
  57. package/dist/client/identity-verification.js.map +1 -0
  58. package/dist/client/iga.d.ts +436 -0
  59. package/dist/client/iga.js +82 -0
  60. package/dist/client/iga.js.map +1 -0
  61. package/dist/client/index.d.ts +1433 -4
  62. package/dist/client/index.js +96 -0
  63. package/dist/client/index.js.map +1 -1
  64. package/dist/client/journeys.d.ts +108 -0
  65. package/dist/client/journeys.js +35 -0
  66. package/dist/client/journeys.js.map +1 -0
  67. package/dist/client/least-privilege.d.ts +95 -0
  68. package/dist/client/least-privilege.js +28 -0
  69. package/dist/client/least-privilege.js.map +1 -0
  70. package/dist/client/log-streams.d.ts +1 -1
  71. package/dist/client/managed-grants.d.ts +52 -0
  72. package/dist/client/managed-grants.js +28 -0
  73. package/dist/client/managed-grants.js.map +1 -0
  74. package/dist/client/marketing.d.ts +67 -0
  75. package/dist/client/marketing.js +26 -0
  76. package/dist/client/marketing.js.map +1 -0
  77. package/dist/client/mcp-gateways.d.ts +126 -0
  78. package/dist/client/mcp-gateways.js +47 -0
  79. package/dist/client/mcp-gateways.js.map +1 -0
  80. package/dist/client/messaging.d.ts +14 -3
  81. package/dist/client/messaging.js.map +1 -1
  82. package/dist/client/mfa-factors.d.ts +120 -0
  83. package/dist/client/mfa-factors.js +73 -0
  84. package/dist/client/mfa-factors.js.map +1 -0
  85. package/dist/client/migrations.d.ts +1 -1
  86. package/dist/client/migrations.js.map +1 -1
  87. package/dist/client/network-acls.d.ts +6 -1
  88. package/dist/client/network-acls.js.map +1 -1
  89. package/dist/client/network-zones.d.ts +56 -0
  90. package/dist/client/network-zones.js +29 -0
  91. package/dist/client/network-zones.js.map +1 -0
  92. package/dist/client/notifications.d.ts +1 -1
  93. package/dist/client/notifications.js.map +1 -1
  94. package/dist/client/oauth-clients.d.ts +187 -3
  95. package/dist/client/oauth-clients.js +64 -0
  96. package/dist/client/oauth-clients.js.map +1 -1
  97. package/dist/client/openfga.d.ts +90 -3
  98. package/dist/client/openfga.js +27 -1
  99. package/dist/client/openfga.js.map +1 -1
  100. package/dist/client/org-role-grants.d.ts +57 -0
  101. package/dist/client/org-role-grants.js +40 -0
  102. package/dist/client/org-role-grants.js.map +1 -0
  103. package/dist/client/organizations.d.ts +52 -0
  104. package/dist/client/organizations.js +44 -0
  105. package/dist/client/organizations.js.map +1 -1
  106. package/dist/client/page-templates.d.ts +78 -0
  107. package/dist/client/page-templates.js +31 -0
  108. package/dist/client/page-templates.js.map +1 -0
  109. package/dist/client/passkey-api.d.ts +73 -0
  110. package/dist/client/passkey-api.js +34 -0
  111. package/dist/client/passkey-api.js.map +1 -0
  112. package/dist/client/policy-bundles.d.ts +105 -0
  113. package/dist/client/policy-bundles.js +38 -0
  114. package/dist/client/policy-bundles.js.map +1 -0
  115. package/dist/client/resources.d.ts +150 -0
  116. package/dist/client/resources.js +73 -0
  117. package/dist/client/resources.js.map +1 -0
  118. package/dist/client/risk-based-mfa.d.ts +147 -0
  119. package/dist/client/risk-based-mfa.js +30 -0
  120. package/dist/client/risk-based-mfa.js.map +1 -1
  121. package/dist/client/roles.d.ts +4 -0
  122. package/dist/client/roles.js.map +1 -1
  123. package/dist/client/service-connectors.d.ts +83 -0
  124. package/dist/client/service-connectors.js +33 -0
  125. package/dist/client/service-connectors.js.map +1 -0
  126. package/dist/client/ssf.d.ts +112 -0
  127. package/dist/client/ssf.js +49 -0
  128. package/dist/client/ssf.js.map +1 -0
  129. package/dist/client/sso-onboarding.d.ts +6 -0
  130. package/dist/client/sso-onboarding.js.map +1 -1
  131. package/dist/client/users.d.ts +302 -0
  132. package/dist/client/users.js +125 -0
  133. package/dist/client/users.js.map +1 -1
  134. package/dist/client/vault.d.ts +85 -0
  135. package/dist/client/vault.js +50 -0
  136. package/dist/client/vault.js.map +1 -0
  137. package/dist/client/vc.d.ts +136 -0
  138. package/dist/client/vc.js +43 -0
  139. package/dist/client/vc.js.map +1 -0
  140. package/dist/client/webhooks.d.ts +31 -2
  141. package/dist/client/webhooks.js.map +1 -1
  142. package/dist/client/workflows.d.ts +131 -0
  143. package/dist/client/workflows.js +36 -0
  144. package/dist/client/workflows.js.map +1 -0
  145. package/dist/index.d.ts +5 -0
  146. package/dist/index.js +11 -2
  147. package/dist/index.js.map +1 -1
  148. package/dist/magic-did.d.ts +5 -0
  149. package/dist/magic-did.js +49 -0
  150. package/dist/magic-did.js.map +1 -0
  151. package/dist/migration-bridge.d.ts +9 -0
  152. package/dist/migration-bridge.js +28 -2
  153. package/dist/migration-bridge.js.map +1 -1
  154. package/dist/migration-presets-g3.d.ts +2 -0
  155. package/dist/migration-presets-g3.js +254 -0
  156. package/dist/migration-presets-g3.js.map +1 -0
  157. package/dist/migration-presets-g4/authentik.d.ts +14 -0
  158. package/dist/migration-presets-g4/authentik.js +37 -0
  159. package/dist/migration-presets-g4/authentik.js.map +1 -0
  160. package/dist/migration-presets-g4/fusionauth.d.ts +2 -0
  161. package/dist/migration-presets-g4/fusionauth.js +52 -0
  162. package/dist/migration-presets-g4/fusionauth.js.map +1 -0
  163. package/dist/migration-presets-g4/hanko.d.ts +12 -0
  164. package/dist/migration-presets-g4/hanko.js +46 -0
  165. package/dist/migration-presets-g4/hanko.js.map +1 -0
  166. package/dist/migration-presets-g4/keycloak.d.ts +16 -0
  167. package/dist/migration-presets-g4/keycloak.js +37 -0
  168. package/dist/migration-presets-g4/keycloak.js.map +1 -0
  169. package/dist/migration-presets-g4/logto.d.ts +12 -0
  170. package/dist/migration-presets-g4/logto.js +35 -0
  171. package/dist/migration-presets-g4/logto.js.map +1 -0
  172. package/dist/migration-presets-g4/ory.d.ts +2 -0
  173. package/dist/migration-presets-g4/ory.js +67 -0
  174. package/dist/migration-presets-g4/ory.js.map +1 -0
  175. package/dist/migration-presets-g4/supertokens.d.ts +13 -0
  176. package/dist/migration-presets-g4/supertokens.js +35 -0
  177. package/dist/migration-presets-g4/supertokens.js.map +1 -0
  178. package/dist/migration-presets-g4/zitadel.d.ts +2 -0
  179. package/dist/migration-presets-g4/zitadel.js +36 -0
  180. package/dist/migration-presets-g4/zitadel.js.map +1 -0
  181. package/dist/migration-presets-g4.d.ts +10 -0
  182. package/dist/migration-presets-g4.js +30 -0
  183. package/dist/migration-presets-g4.js.map +1 -0
  184. package/dist/migration-presets.d.ts +6 -0
  185. package/dist/migration-presets.js +102 -6
  186. package/dist/migration-presets.js.map +1 -1
  187. package/dist/policy-bundle.d.ts +110 -0
  188. package/dist/policy-bundle.js +289 -0
  189. package/dist/policy-bundle.js.map +1 -0
  190. package/dist/request-auth.d.ts +32 -0
  191. package/dist/request-auth.js +72 -0
  192. package/dist/request-auth.js.map +1 -0
  193. package/dist/uma.d.ts +77 -0
  194. package/dist/uma.js +95 -0
  195. package/dist/uma.js.map +1 -0
  196. package/dist/verify.d.ts +2 -0
  197. package/dist/verify.js.map +1 -1
  198. package/dist/workos-session.d.ts +30 -0
  199. package/dist/workos-session.js +123 -0
  200. package/dist/workos-session.js.map +1 -0
  201. package/package.json +2 -2
@@ -0,0 +1,150 @@
1
+ import { type RequestFn } from './request';
2
+ import type { ListPage } from './types';
3
+ export interface ResourceRoleDef {
4
+ key: string;
5
+ name?: string;
6
+ /** `*` grants every permission. */
7
+ permissions: string[];
8
+ /** Other roles of the same type this role also grants. */
9
+ includes?: string[];
10
+ }
11
+ export interface ResourceType {
12
+ object: 'resource_type';
13
+ key: string;
14
+ name: string;
15
+ description: string | null;
16
+ parent_type: string | null;
17
+ inherit: boolean;
18
+ roles: ResourceRoleDef[];
19
+ created_at: number;
20
+ updated_at: number;
21
+ }
22
+ export interface CreateResourceTypeBody {
23
+ key: string;
24
+ name?: string;
25
+ description?: string | null;
26
+ /** The type a resource of this type nests under. */
27
+ parent_type?: string | null;
28
+ /** Whether assignments on a parent flow down (default true). */
29
+ inherit?: boolean;
30
+ roles: ResourceRoleDef[];
31
+ }
32
+ export interface Resource {
33
+ object: 'resource';
34
+ id: string;
35
+ type: string;
36
+ external_id: string;
37
+ name: string | null;
38
+ parent_id: string | null;
39
+ metadata: Record<string, unknown>;
40
+ created_at: number;
41
+ updated_at: number;
42
+ }
43
+ /** A reference to a resource: Atlas `id`, or your own `type` + `external_id`. */
44
+ export type ResourceRef = {
45
+ id: string;
46
+ } | {
47
+ type: string;
48
+ external_id: string;
49
+ };
50
+ export interface UpsertResourceBody {
51
+ type: string;
52
+ external_id: string;
53
+ name?: string | null;
54
+ /** The parent resource, or null for a root. */
55
+ parent?: ResourceRef | null;
56
+ metadata?: Record<string, unknown>;
57
+ }
58
+ export type ResourceSubject = {
59
+ type: 'user' | 'group' | 'org';
60
+ id: string;
61
+ };
62
+ export interface ResourceRoleAssignment {
63
+ object: 'resource_role_assignment';
64
+ id: string;
65
+ resource_id: string;
66
+ subject: ResourceSubject;
67
+ role: string;
68
+ inherit: boolean;
69
+ created_at: number;
70
+ }
71
+ export interface ResourceCheckBody {
72
+ subject: ResourceSubject;
73
+ permission: string;
74
+ resource: ResourceRef;
75
+ /** Extra group ids the subject belongs to (a user's organizations are added automatically). */
76
+ groups?: string[];
77
+ }
78
+ export interface ResourceCheck {
79
+ object: 'resource_check';
80
+ allowed: boolean;
81
+ resource_id: string;
82
+ grants?: Array<{
83
+ resource_id: string;
84
+ role: string;
85
+ subject: string;
86
+ inherited: boolean;
87
+ }>;
88
+ }
89
+ /** Resource-scoped RBAC: resource types, the resource tree, role assignments on resources, and permission checks. */
90
+ export declare function resourcesResource(request: RequestFn): {
91
+ types: {
92
+ list(): Promise<ListPage<ResourceType>>;
93
+ get(key: string): Promise<ResourceType>;
94
+ create(body: CreateResourceTypeBody, idempotencyKey?: string): Promise<ResourceType>;
95
+ update(key: string, body: Partial<Omit<CreateResourceTypeBody, "key">>): Promise<ResourceType>;
96
+ delete(key: string): Promise<{
97
+ object: "resource_type";
98
+ key: string;
99
+ deleted: true;
100
+ }>;
101
+ };
102
+ list(query?: {
103
+ type?: string;
104
+ parent_id?: string;
105
+ limit?: number;
106
+ }): Promise<ListPage<Resource>>;
107
+ get(id: string): Promise<Resource>;
108
+ /** Create or update one resource by (type, external_id). */
109
+ upsert(body: UpsertResourceBody): Promise<Resource>;
110
+ /** Discovery sync: upsert up to 500 resources in order (parents before children). */
111
+ sync(resources: UpsertResourceBody[]): Promise<ListPage<Resource>>;
112
+ delete(id: string): Promise<{
113
+ object: "resource";
114
+ id: string;
115
+ deleted: true;
116
+ }>;
117
+ assignments: {
118
+ list(query?: {
119
+ resource_id?: string;
120
+ subject_type?: string;
121
+ subject_id?: string;
122
+ }): Promise<ListPage<ResourceRoleAssignment>>;
123
+ /** Assign `role` on `resource` to a user, group or org. */
124
+ assign(body: {
125
+ resource: ResourceRef;
126
+ subject: ResourceSubject;
127
+ role: string;
128
+ inherit?: boolean;
129
+ }): Promise<ResourceRoleAssignment>;
130
+ revoke(id: string): Promise<{
131
+ object: "resource_role_assignment";
132
+ id: string;
133
+ deleted: true;
134
+ }>;
135
+ };
136
+ /** May `subject` hold `permission` on `resource`? */
137
+ check(body: ResourceCheckBody): Promise<ResourceCheck>;
138
+ /** Convenience: the boolean answer to {@link check}. */
139
+ can(body: ResourceCheckBody): Promise<boolean>;
140
+ checkBatch(checks: ResourceCheckBody[]): Promise<ListPage<ResourceCheck>>;
141
+ /** The resources (of an optional `type`) on which `subject` holds `permission`. */
142
+ accessible(body: {
143
+ subject: ResourceSubject;
144
+ permission: string;
145
+ type?: string;
146
+ groups?: string[];
147
+ limit?: number;
148
+ starting_after?: string;
149
+ }): Promise<ListPage<Resource>>;
150
+ };
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resourcesResource = resourcesResource;
4
+ const request_1 = require("./request");
5
+ /** Resource-scoped RBAC: resource types, the resource tree, role assignments on resources, and permission checks. */
6
+ function resourcesResource(request) {
7
+ return {
8
+ types: {
9
+ list() {
10
+ return request({ method: 'GET', path: '/v1/resource_types' });
11
+ },
12
+ get(key) {
13
+ return request({ method: 'GET', path: `/v1/resource_types/${(0, request_1.enc)(key)}` });
14
+ },
15
+ create(body, idempotencyKey) {
16
+ return request({ method: 'POST', path: '/v1/resource_types', body, idempotencyKey });
17
+ },
18
+ update(key, body) {
19
+ return request({ method: 'PATCH', path: `/v1/resource_types/${(0, request_1.enc)(key)}`, body });
20
+ },
21
+ delete(key) {
22
+ return request({ method: 'DELETE', path: `/v1/resource_types/${(0, request_1.enc)(key)}` });
23
+ },
24
+ },
25
+ list(query = {}) {
26
+ const q = new URLSearchParams(Object.entries(query).filter(([, v]) => v !== undefined).map(([k, v]) => [k, String(v)]));
27
+ return request({ method: 'GET', path: `/v1/resources${q.size ? `?${q}` : ''}` });
28
+ },
29
+ get(id) {
30
+ return request({ method: 'GET', path: `/v1/resources/${(0, request_1.enc)(id)}` });
31
+ },
32
+ /** Create or update one resource by (type, external_id). */
33
+ upsert(body) {
34
+ return request({ method: 'PUT', path: '/v1/resources', body });
35
+ },
36
+ /** Discovery sync: upsert up to 500 resources in order (parents before children). */
37
+ sync(resources) {
38
+ return request({ method: 'POST', path: '/v1/resources/sync', body: { resources } });
39
+ },
40
+ delete(id) {
41
+ return request({ method: 'DELETE', path: `/v1/resources/${(0, request_1.enc)(id)}` });
42
+ },
43
+ assignments: {
44
+ list(query = {}) {
45
+ const q = new URLSearchParams(Object.entries(query).filter(([, v]) => v !== undefined));
46
+ return request({ method: 'GET', path: `/v1/resource_role_assignments${q.size ? `?${q}` : ''}` });
47
+ },
48
+ /** Assign `role` on `resource` to a user, group or org. */
49
+ assign(body) {
50
+ return request({ method: 'POST', path: '/v1/resource_role_assignments', body });
51
+ },
52
+ revoke(id) {
53
+ return request({ method: 'DELETE', path: `/v1/resource_role_assignments/${(0, request_1.enc)(id)}` });
54
+ },
55
+ },
56
+ /** May `subject` hold `permission` on `resource`? */
57
+ check(body) {
58
+ return request({ method: 'POST', path: '/v1/resource_checks', body });
59
+ },
60
+ /** Convenience: the boolean answer to {@link check}. */
61
+ async can(body) {
62
+ return (await request({ method: 'POST', path: '/v1/resource_checks', body })).allowed;
63
+ },
64
+ checkBatch(checks) {
65
+ return request({ method: 'POST', path: '/v1/resource_checks/batch', body: { checks } });
66
+ },
67
+ /** The resources (of an optional `type`) on which `subject` holds `permission`. */
68
+ accessible(body) {
69
+ return request({ method: 'POST', path: '/v1/resource_checks/list', body });
70
+ },
71
+ };
72
+ }
73
+ //# sourceMappingURL=resources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resources.js","sourceRoot":"","sources":["../../src/client/resources.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,14 @@ import { type RequestFn } from './request';
3
3
  export type RiskLevel = 'low' | 'medium' | 'high';
4
4
  /** What to do at high risk when the user has NO enrolled factor. */
5
5
  export type OnHighRiskNoFactor = 'allow' | 'block' | 'require_enroll';
6
+ /** `audit` scores and records every sign-in but never changes the outcome. */
7
+ export type RiskMode = 'enforce' | 'audit';
8
+ /** What a risk level does; `default` keeps the step-up threshold behaviour. */
9
+ export type RiskLevelAction = 'default' | 'allow' | 'notify' | 'mfa' | 'block';
10
+ export interface RiskLevelActions {
11
+ medium: RiskLevelAction;
12
+ high: RiskLevelAction;
13
+ }
6
14
  /** Per-signal score weights that feed the risk total. */
7
15
  export interface RiskWeights {
8
16
  newDevice: number;
@@ -34,6 +42,78 @@ export interface RiskBasedMfa {
34
42
  on_high_risk_no_factor: OnHighRiskNoFactor;
35
43
  weights: RiskWeights;
36
44
  signals: RiskSignalToggles;
45
+ mode: RiskMode;
46
+ level_actions: RiskLevelActions;
47
+ reputation: RiskReputation;
48
+ fraud: FraudConfig;
49
+ /** Per-user baseline: unusual sign-in hour or never-seen country adds `weight` points each. */
50
+ baseline: {
51
+ enabled: boolean;
52
+ weight: number;
53
+ };
54
+ /** Re-evaluate a session when it refreshes from a different network. */
55
+ mid_session: {
56
+ enabled: boolean;
57
+ action: 'revoke' | 'notify' | 'audit';
58
+ };
59
+ }
60
+ export type FraudAction = 'allow' | 'challenge' | 'block';
61
+ export interface FraudRule {
62
+ id: string;
63
+ name: string;
64
+ enabled: boolean;
65
+ action: FraudAction;
66
+ /** Reason code returned when the rule matches. */
67
+ reason: string;
68
+ /** All conditions must hold. */
69
+ conditions: Array<{
70
+ field: 'country' | 'asn' | 'datacenter' | 'anonymizer' | 'headless' | 'automation' | 'client_class' | 'bot_score' | 'email_disposable' | 'ip_velocity' | 'device_velocity' | 'email_velocity';
71
+ op: 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte' | 'in' | 'nin';
72
+ value: string | number | boolean | Array<string | number>;
73
+ }>;
74
+ }
75
+ export interface FraudConfig {
76
+ /** Two-letter country codes that are always blocked. */
77
+ sanctioned_countries: string[];
78
+ rules: FraudRule[];
79
+ /** Cap on lookups per device per hour; adaptive halves it for bot-like, datacenter or anonymized clients. */
80
+ device_rate_limit?: {
81
+ enabled: boolean;
82
+ per_hour: number;
83
+ adaptive: boolean;
84
+ };
85
+ }
86
+ export interface FraudLookupBody {
87
+ ip: string;
88
+ user_agent?: string;
89
+ /** The stable id from the JS SDK. */
90
+ device_id?: string;
91
+ email?: string;
92
+ /** A user of this instance, for user_age_days / user_mfa_enabled / user_banned rules. */
93
+ user_id?: string;
94
+ /** The organization the action is for, for org_id rules. */
95
+ org_id?: string;
96
+ /** Device features reported by the SDK (see the telemetry beacon). */
97
+ device?: Record<string, unknown>;
98
+ }
99
+ export interface FraudLookup {
100
+ object: 'fraud_lookup';
101
+ verdict: FraudAction;
102
+ reasons: string[];
103
+ matched_rules: string[];
104
+ device_id: string | null;
105
+ signals: Record<string, string | number | boolean | null>;
106
+ }
107
+ /** External IP-reputation / email-risk feeds (bring your own provider key). */
108
+ export interface RiskReputation {
109
+ provider: 'none' | 'ipqs' | 'spur' | 'minfraud';
110
+ /** Score points added when the IP is flagged. */
111
+ ip_weight: number;
112
+ /** Provider fraud score (1-100) at or above which the IP is flagged. */
113
+ min_score: number;
114
+ flag_anonymizers: boolean;
115
+ email_checks: boolean;
116
+ email_weight: number;
37
117
  }
38
118
  export interface UpdateRiskBasedMfaBody {
39
119
  enabled?: boolean;
@@ -41,6 +121,40 @@ export interface UpdateRiskBasedMfaBody {
41
121
  on_high_risk_no_factor?: OnHighRiskNoFactor;
42
122
  weights?: Partial<RiskWeights>;
43
123
  signals?: Partial<RiskSignalToggles>;
124
+ mode?: RiskMode;
125
+ level_actions?: Partial<RiskLevelActions>;
126
+ reputation?: Partial<RiskReputation>;
127
+ fraud?: Partial<FraudConfig>;
128
+ baseline?: Partial<RiskBasedMfa['baseline']>;
129
+ mid_session?: Partial<RiskBasedMfa['mid_session']>;
130
+ }
131
+ /** One risk-scored sign-in on the audit / shadow-mode timeline. */
132
+ export interface RiskEvent {
133
+ object: 'risk_event';
134
+ id: string;
135
+ user_id: string;
136
+ level: RiskLevel;
137
+ score: number;
138
+ /** Names of the signals that fired. */
139
+ signals: string[];
140
+ /** The action decided; in audit mode, what WOULD have happened. */
141
+ action: string;
142
+ mode: RiskMode;
143
+ ip: string | null;
144
+ feedback: 'legit' | 'fraud' | null;
145
+ feedback_at: string | null;
146
+ created_at: string;
147
+ }
148
+ export interface RiskEventMetrics {
149
+ object: 'risk_event_metrics';
150
+ days: number;
151
+ total: number;
152
+ buckets: Array<{
153
+ level: string;
154
+ action: string;
155
+ mode: string;
156
+ count: number;
157
+ }>;
44
158
  }
45
159
  /**
46
160
  * Read and tune the instance's adaptive-MFA engine — when a second factor is
@@ -51,4 +165,37 @@ export declare function riskBasedMfaResource(request: RequestFn): {
51
165
  get(): Promise<RiskBasedMfa>;
52
166
  /** Change any subset of the config; omitted fields are left unchanged. */
53
167
  update(body: UpdateRiskBasedMfaBody): Promise<RiskBasedMfa>;
168
+ /** Fraud decision (allow / challenge / block with reason codes) for a sign-up, sign-in or checkout. */
169
+ fraudLookup(body: FraudLookupBody): Promise<FraudLookup>;
170
+ /** Store the reputation provider's API key (write-only; minfraud: "<account id>:<license key>"). */
171
+ setReputationSecret(secret: string, provider?: "ipqs" | "spur" | "minfraud"): Promise<{
172
+ object: "risk_reputation_secret";
173
+ provider: string;
174
+ set: true;
175
+ }>;
176
+ /** Remove a stored reputation provider key (default: the configured provider). */
177
+ removeReputationSecret(provider?: "ipqs" | "spur" | "minfraud"): Promise<{
178
+ object: "risk_reputation_secret";
179
+ provider: string;
180
+ deleted: true;
181
+ }>;
182
+ };
183
+ /** The risk-event timeline, metrics and feedback. */
184
+ export declare function riskEventsResource(request: RequestFn): {
185
+ /** Newest first. Page with `before` (the created_at of the last row). */
186
+ list(query?: {
187
+ user_id?: string;
188
+ level?: RiskLevel;
189
+ limit?: number;
190
+ before?: string;
191
+ }): Promise<{
192
+ object: "list";
193
+ data: RiskEvent[];
194
+ }>;
195
+ /** Counts per level / action / mode over the last `days`. */
196
+ metrics(query?: {
197
+ days?: number;
198
+ }): Promise<RiskEventMetrics>;
199
+ /** Mark a scored sign-in `legit` or `fraud`; the fired signals' weights move accordingly. */
200
+ feedback(id: string, verdict: "legit" | "fraud"): Promise<RiskEvent>;
54
201
  };
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.riskBasedMfaResource = riskBasedMfaResource;
4
+ exports.riskEventsResource = riskEventsResource;
4
5
  /**
5
6
  * Read and tune the instance's adaptive-MFA engine — when a second factor is
6
7
  * demanded, and how each risk signal is weighted.
@@ -15,6 +16,35 @@ function riskBasedMfaResource(request) {
15
16
  update(body) {
16
17
  return request({ method: 'PATCH', path: '/v1/risk_based_mfa', body });
17
18
  },
19
+ /** Fraud decision (allow / challenge / block with reason codes) for a sign-up, sign-in or checkout. */
20
+ fraudLookup(body) {
21
+ return request({ method: 'POST', path: '/v1/fraud/lookup', body });
22
+ },
23
+ /** Store the reputation provider's API key (write-only; minfraud: "<account id>:<license key>"). */
24
+ setReputationSecret(secret, provider) {
25
+ return request({ method: 'PUT', path: '/v1/risk_based_mfa/reputation_secret', body: { secret, provider } });
26
+ },
27
+ /** Remove a stored reputation provider key (default: the configured provider). */
28
+ removeReputationSecret(provider) {
29
+ return request({ method: 'DELETE', path: '/v1/risk_based_mfa/reputation_secret', query: { provider } });
30
+ },
31
+ };
32
+ }
33
+ /** The risk-event timeline, metrics and feedback. */
34
+ function riskEventsResource(request) {
35
+ return {
36
+ /** Newest first. Page with `before` (the created_at of the last row). */
37
+ list(query = {}) {
38
+ return request({ method: 'GET', path: '/v1/risk_events', query });
39
+ },
40
+ /** Counts per level / action / mode over the last `days`. */
41
+ metrics(query = {}) {
42
+ return request({ method: 'GET', path: '/v1/risk_events/metrics', query });
43
+ },
44
+ /** Mark a scored sign-in `legit` or `fraud`; the fired signals' weights move accordingly. */
45
+ feedback(id, verdict) {
46
+ return request({ method: 'POST', path: `/v1/risk_events/${encodeURIComponent(id)}/feedback`, body: { verdict } });
47
+ },
18
48
  };
19
49
  }
20
50
  //# sourceMappingURL=risk-based-mfa.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"risk-based-mfa.js","sourceRoot":"","sources":["../../src/client/risk-based-mfa.ts"],"names":[],"mappings":";;AAuDA,oDAWC;AAfD;;;GAGG;AACH,SAAgB,oBAAoB,CAAC,OAAkB;IACrD,OAAO;QACL,4CAA4C;QAC5C,GAAG;YACD,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC,CAAC;QAChE,CAAC;QACD,0EAA0E;QAC1E,MAAM,CAAC,IAA4B;YACjC,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,CAAC;QACxE,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"risk-based-mfa.js","sourceRoot":"","sources":["../../src/client/risk-based-mfa.ts"],"names":[],"mappings":";;AAqKA,oDAuBC;AAGD,gDAeC;AA7CD;;;GAGG;AACH,SAAgB,oBAAoB,CAAC,OAAkB;IACrD,OAAO;QACL,4CAA4C;QAC5C,GAAG;YACD,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC,CAAC;QAChE,CAAC;QACD,0EAA0E;QAC1E,MAAM,CAAC,IAA4B;YACjC,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,CAAC;QACxE,CAAC;QACD,uGAAuG;QACvG,WAAW,CAAC,IAAqB;YAC/B,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAC;QACrE,CAAC;QACD,oGAAoG;QACpG,mBAAmB,CAAC,MAAc,EAAE,QAAuC;YACzE,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,sCAAsC,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC9G,CAAC;QACD,kFAAkF;QAClF,sBAAsB,CAAC,QAAuC;YAC5D,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,sCAAsC,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC1G,CAAC;KACF,CAAC;AACJ,CAAC;AAED,qDAAqD;AACrD,SAAgB,kBAAkB,CAAC,OAAkB;IACnD,OAAO;QACL,yEAAyE;QACzE,IAAI,CAAC,QAAkF,EAAE;YACvF,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC,CAAC;QACpE,CAAC;QACD,6DAA6D;QAC7D,OAAO,CAAC,QAA2B,EAAE;YACnC,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,yBAAyB,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5E,CAAC;QACD,6FAA6F;QAC7F,QAAQ,CAAC,EAAU,EAAE,OAA0B;YAC7C,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,kBAAkB,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;QACpH,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -7,6 +7,7 @@ export interface Role {
7
7
  name: string;
8
8
  description: string | null;
9
9
  is_system: boolean;
10
+ visibility: 'public' | 'internal';
10
11
  permissions: string[];
11
12
  member_count: number;
12
13
  created_at: number;
@@ -23,11 +24,14 @@ export interface CreateRoleBody {
23
24
  key: string;
24
25
  name: string;
25
26
  description?: string;
27
+ /** `internal` = assignable by your backend only; hidden from org-admin pickers. */
28
+ visibility?: 'public' | 'internal';
26
29
  permissions?: string[];
27
30
  }
28
31
  export interface UpdateRoleBody {
29
32
  name?: string;
30
33
  description?: string;
34
+ visibility?: 'public' | 'internal';
31
35
  /** May be supplied but must equal the current key — the key is immutable. */
32
36
  key?: string;
33
37
  }
@@ -1 +1 @@
1
- {"version":3,"file":"roles.js","sourceRoot":"","sources":["../../src/client/roles.ts"],"names":[],"mappings":";;AA+CA,sCAmCC;AAeD,kDAiBC;AAlHD,uCAAgD;AA+ChD,SAAgB,aAAa,CAAC,OAAkB;IAC9C,OAAO;QACL,IAAI;YACF,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;QACvD,CAAC;QACD,MAAM,CAAC,IAAoB,EAAE,cAAuB;YAClD,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;QAC9E,CAAC;QACD,MAAM,CAAC,EAAU,EAAE,IAAoB;YACrC,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1E,CAAC;QACD,iDAAiD;QACjD,cAAc,CAAC,EAAU,EAAE,WAAqB;YAC9C,OAAO,OAAO,CAAC;gBACb,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,aAAa,IAAA,aAAG,EAAC,EAAE,CAAC,cAAc;gBACxC,IAAI,EAAE,EAAE,WAAW,EAAE;aACtB,CAAC,CAAC;QACL,CAAC;QACD;;;;WAIG;QACH,MAAM,CACJ,EAAU,EACV,IAA8B;YAE9B,OAAO,OAAO,CAAC;gBACb,MAAM,EAAE,QAAQ;gBAChB,IAAI,EAAE,aAAa,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE;gBAC5B,KAAK,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS;aACvE,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC;AAeD,SAAgB,mBAAmB,CAAC,OAAkB;IACpD,OAAO;QACL,IAAI;YACF,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC;QAC7D,CAAC;QACD,MAAM,CAAC,IAA0B,EAAE,cAAuB;YACxD,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;QACpF,CAAC;QACD,kFAAkF;QAClF,MAAM,CAAC,EAAU,EAAE,IAA0B;YAC3C,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,mBAAmB,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QAChF,CAAC;QACD,sFAAsF;QACtF,MAAM,CAAC,EAAU;YACf,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,mBAAmB,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC3E,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"roles.js","sourceRoot":"","sources":["../../src/client/roles.ts"],"names":[],"mappings":";;AAmDA,sCAmCC;AAeD,kDAiBC;AAtHD,uCAAgD;AAmDhD,SAAgB,aAAa,CAAC,OAAkB;IAC9C,OAAO;QACL,IAAI;YACF,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;QACvD,CAAC;QACD,MAAM,CAAC,IAAoB,EAAE,cAAuB;YAClD,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;QAC9E,CAAC;QACD,MAAM,CAAC,EAAU,EAAE,IAAoB;YACrC,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1E,CAAC;QACD,iDAAiD;QACjD,cAAc,CAAC,EAAU,EAAE,WAAqB;YAC9C,OAAO,OAAO,CAAC;gBACb,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,aAAa,IAAA,aAAG,EAAC,EAAE,CAAC,cAAc;gBACxC,IAAI,EAAE,EAAE,WAAW,EAAE;aACtB,CAAC,CAAC;QACL,CAAC;QACD;;;;WAIG;QACH,MAAM,CACJ,EAAU,EACV,IAA8B;YAE9B,OAAO,OAAO,CAAC;gBACb,MAAM,EAAE,QAAQ;gBAChB,IAAI,EAAE,aAAa,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE;gBAC5B,KAAK,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS;aACvE,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC;AAeD,SAAgB,mBAAmB,CAAC,OAAkB;IACpD,OAAO;QACL,IAAI;YACF,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC;QAC7D,CAAC;QACD,MAAM,CAAC,IAA0B,EAAE,cAAuB;YACxD,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;QACpF,CAAC;QACD,kFAAkF;QAClF,MAAM,CAAC,EAAU,EAAE,IAA0B;YAC3C,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,mBAAmB,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QAChF,CAAC;QACD,sFAAsF;QACtF,MAAM,CAAC,EAAU;YACf,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,mBAAmB,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC3E,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,83 @@
1
+ import { type RequestFn } from './request';
2
+ export type ServiceConnectorCategory = 'messaging' | 'crm' | 'analytics' | 'fraud' | 'idv' | 'http';
3
+ /** A configured service. Credentials are write-only: they live in the vault and are never returned. */
4
+ export interface ServiceConnector {
5
+ object: 'service_connector';
6
+ id: string;
7
+ name: string;
8
+ /** `twilio`, `sendgrid`, `slack`, `hubspot`, `salesforce`, `segment`, `fingerprint`, `arkose`, `forter`, `sardine`, `persona`, `onfido`, `veriff`, `stripe_identity` or `http`. */
9
+ kind: string;
10
+ category: ServiceConnectorCategory | null;
11
+ config: Record<string, string>;
12
+ enabled: boolean;
13
+ last_used_at: number | null;
14
+ last_status: 'ok' | 'error' | null;
15
+ created_at: number;
16
+ updated_at: number;
17
+ }
18
+ export interface ServiceConnectorField {
19
+ key: string;
20
+ label: string;
21
+ required: boolean;
22
+ type?: string;
23
+ enum?: string[];
24
+ default?: string;
25
+ }
26
+ export interface ServiceConnectorKind {
27
+ object: 'service_connector_kind';
28
+ kind: string;
29
+ name: string;
30
+ category: ServiceConnectorCategory;
31
+ summary: string;
32
+ credentials: ServiceConnectorField[];
33
+ config: ServiceConnectorField[];
34
+ operations: Array<{
35
+ operation: string;
36
+ summary: string;
37
+ input: ServiceConnectorField[];
38
+ }>;
39
+ }
40
+ export interface CreateServiceConnectorBody {
41
+ /** Lowercase letters, digits, `-` and `_`; what Actions call it by. */
42
+ name: string;
43
+ kind: string;
44
+ config?: Record<string, string>;
45
+ /** Stored in the vault. See the catalog entry for the fields. */
46
+ credentials: Record<string, string>;
47
+ }
48
+ export interface UpdateServiceConnectorBody {
49
+ name?: string;
50
+ enabled?: boolean;
51
+ /** Merged into the current config. */
52
+ config?: Record<string, string>;
53
+ /** Only the fields you pass are replaced. */
54
+ credentials?: Record<string, string>;
55
+ }
56
+ /** Typed connectors to messaging, CRM, analytics, fraud and identity-verification services. */
57
+ export declare function serviceConnectorsResource(request: RequestFn): {
58
+ /** The services you can connect, with their fields and operations. */
59
+ catalog(): Promise<{
60
+ object: "list";
61
+ data: ServiceConnectorKind[];
62
+ has_more: boolean;
63
+ }>;
64
+ list(): Promise<{
65
+ object: "list";
66
+ data: ServiceConnector[];
67
+ has_more: boolean;
68
+ }>;
69
+ get(id: string): Promise<ServiceConnector>;
70
+ create(body: CreateServiceConnectorBody, idempotencyKey?: string): Promise<ServiceConnector>;
71
+ update(id: string, body: UpdateServiceConnectorBody): Promise<ServiceConnector>;
72
+ delete(id: string): Promise<{
73
+ object: "service_connector.deleted";
74
+ id: string;
75
+ deleted: boolean;
76
+ }>;
77
+ /** Run an operation, e.g. `invoke(id, 'send_sms', { to, body })`. A failure from the service is a 502 `CONNECTOR_UPSTREAM_ERROR`. */
78
+ invoke(id: string, operation: string, input?: Record<string, unknown>): Promise<{
79
+ object: "service_connector_result";
80
+ operation: string;
81
+ result: Record<string, unknown>;
82
+ }>;
83
+ };
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.serviceConnectorsResource = serviceConnectorsResource;
4
+ const request_1 = require("./request");
5
+ /** Typed connectors to messaging, CRM, analytics, fraud and identity-verification services. */
6
+ function serviceConnectorsResource(request) {
7
+ return {
8
+ /** The services you can connect, with their fields and operations. */
9
+ catalog() {
10
+ return request({ method: 'GET', path: '/v1/service_connector_catalog' });
11
+ },
12
+ list() {
13
+ return request({ method: 'GET', path: '/v1/service_connectors' });
14
+ },
15
+ get(id) {
16
+ return request({ method: 'GET', path: `/v1/service_connectors/${(0, request_1.enc)(id)}` });
17
+ },
18
+ create(body, idempotencyKey) {
19
+ return request({ method: 'POST', path: '/v1/service_connectors', body, idempotencyKey });
20
+ },
21
+ update(id, body) {
22
+ return request({ method: 'PATCH', path: `/v1/service_connectors/${(0, request_1.enc)(id)}`, body });
23
+ },
24
+ delete(id) {
25
+ return request({ method: 'DELETE', path: `/v1/service_connectors/${(0, request_1.enc)(id)}` });
26
+ },
27
+ /** Run an operation, e.g. `invoke(id, 'send_sms', { to, body })`. A failure from the service is a 502 `CONNECTOR_UPSTREAM_ERROR`. */
28
+ invoke(id, operation, input = {}) {
29
+ return request({ method: 'POST', path: `/v1/service_connectors/${(0, request_1.enc)(id)}/invoke`, body: { operation, input } });
30
+ },
31
+ };
32
+ }
33
+ //# sourceMappingURL=service-connectors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-connectors.js","sourceRoot":"","sources":["../../src/client/service-connectors.ts"],"names":[],"mappings":";;AA2DA,8DA0BC;AArFD,uCAAgD;AA0DhD,+FAA+F;AAC/F,SAAgB,yBAAyB,CAAC,OAAkB;IAC1D,OAAO;QACL,sEAAsE;QACtE,OAAO;YACL,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,+BAA+B,EAAE,CAAC,CAAC;QAC3E,CAAC;QACD,IAAI;YACF,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,wBAAwB,EAAE,CAAC,CAAC;QACpE,CAAC;QACD,GAAG,CAAC,EAAU;YACZ,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,0BAA0B,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/E,CAAC;QACD,MAAM,CAAC,IAAgC,EAAE,cAAuB;YAC9D,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,wBAAwB,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;QAC3F,CAAC;QACD,MAAM,CAAC,EAAU,EAAE,IAAgC;YACjD,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,0BAA0B,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACvF,CAAC;QACD,MAAM,CAAC,EAAU;YACf,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,0BAA0B,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAClF,CAAC;QACD,qIAAqI;QACrI,MAAM,CAAC,EAAU,EAAE,SAAiB,EAAE,QAAiC,EAAE;YACvE,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,0BAA0B,IAAA,aAAG,EAAC,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QACnH,CAAC;KACF,CAAC;AACJ,CAAC"}