@nebulr-group/bridge-cli 0.6.6 → 1.0.0-alpha.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 (293) hide show
  1. package/README.md +93 -460
  2. package/dist/api/accounts.d.ts +69 -0
  3. package/dist/api/accounts.d.ts.map +1 -0
  4. package/dist/api/accounts.js +42 -0
  5. package/dist/api/accounts.js.map +1 -0
  6. package/dist/api/apps.d.ts +50 -0
  7. package/dist/api/apps.d.ts.map +1 -0
  8. package/dist/api/apps.js +62 -0
  9. package/dist/api/apps.js.map +1 -0
  10. package/dist/api/billing.d.ts +131 -0
  11. package/dist/api/billing.d.ts.map +1 -0
  12. package/dist/api/billing.js +42 -0
  13. package/dist/api/billing.js.map +1 -0
  14. package/dist/api/flags.d.ts +73 -0
  15. package/dist/api/flags.d.ts.map +1 -0
  16. package/dist/api/flags.js +108 -0
  17. package/dist/api/flags.js.map +1 -0
  18. package/dist/api/keys.d.ts +48 -0
  19. package/dist/api/keys.d.ts.map +1 -0
  20. package/dist/api/keys.js +87 -0
  21. package/dist/api/keys.js.map +1 -0
  22. package/dist/auth/browser-open.d.ts +21 -4
  23. package/dist/auth/browser-open.d.ts.map +1 -1
  24. package/dist/auth/browser-open.js +45 -65
  25. package/dist/auth/browser-open.js.map +1 -1
  26. package/dist/auth/lock.d.ts +8 -0
  27. package/dist/auth/lock.d.ts.map +1 -0
  28. package/dist/auth/lock.js +43 -0
  29. package/dist/auth/lock.js.map +1 -0
  30. package/dist/auth/loopback.d.ts +8 -12
  31. package/dist/auth/loopback.d.ts.map +1 -1
  32. package/dist/auth/loopback.js +40 -45
  33. package/dist/auth/loopback.js.map +1 -1
  34. package/dist/auth/session.d.ts +61 -0
  35. package/dist/auth/session.d.ts.map +1 -0
  36. package/dist/auth/session.js +142 -0
  37. package/dist/auth/session.js.map +1 -0
  38. package/dist/auth/sign-in.d.ts +67 -0
  39. package/dist/auth/sign-in.d.ts.map +1 -0
  40. package/dist/auth/sign-in.js +113 -0
  41. package/dist/auth/sign-in.js.map +1 -0
  42. package/dist/auth/store.d.ts +89 -0
  43. package/dist/auth/store.d.ts.map +1 -0
  44. package/dist/auth/store.js +214 -0
  45. package/dist/auth/store.js.map +1 -0
  46. package/dist/bin.js +0 -2
  47. package/dist/bin.js.map +1 -1
  48. package/dist/cli.d.ts +1 -2
  49. package/dist/cli.d.ts.map +1 -1
  50. package/dist/cli.js +13 -17
  51. package/dist/cli.js.map +1 -1
  52. package/dist/client.d.ts +31 -0
  53. package/dist/client.d.ts.map +1 -0
  54. package/dist/client.js +67 -0
  55. package/dist/client.js.map +1 -0
  56. package/dist/commands/accounts.command.d.ts +4 -0
  57. package/dist/commands/accounts.command.d.ts.map +1 -0
  58. package/dist/commands/accounts.command.js +116 -0
  59. package/dist/commands/accounts.command.js.map +1 -0
  60. package/dist/commands/app.command.d.ts +3 -2
  61. package/dist/commands/app.command.d.ts.map +1 -1
  62. package/dist/commands/app.command.js +132 -233
  63. package/dist/commands/app.command.js.map +1 -1
  64. package/dist/commands/auth.command.d.ts +2 -12
  65. package/dist/commands/auth.command.d.ts.map +1 -1
  66. package/dist/commands/auth.command.js +147 -20
  67. package/dist/commands/auth.command.js.map +1 -1
  68. package/dist/commands/billing.command.d.ts +4 -0
  69. package/dist/commands/billing.command.d.ts.map +1 -0
  70. package/dist/commands/billing.command.js +185 -0
  71. package/dist/commands/billing.command.js.map +1 -0
  72. package/dist/commands/check.command.d.ts +2 -1
  73. package/dist/commands/check.command.d.ts.map +1 -1
  74. package/dist/commands/check.command.js +11 -14
  75. package/dist/commands/check.command.js.map +1 -1
  76. package/dist/commands/context.d.ts +58 -0
  77. package/dist/commands/context.d.ts.map +1 -0
  78. package/dist/commands/context.js +78 -0
  79. package/dist/commands/context.js.map +1 -0
  80. package/dist/commands/flag.command.d.ts +3 -62
  81. package/dist/commands/flag.command.d.ts.map +1 -1
  82. package/dist/commands/flag.command.js +181 -864
  83. package/dist/commands/flag.command.js.map +1 -1
  84. package/dist/commands/key.command.d.ts +4 -0
  85. package/dist/commands/key.command.d.ts.map +1 -0
  86. package/dist/commands/key.command.js +44 -0
  87. package/dist/commands/key.command.js.map +1 -0
  88. package/dist/commands/plan.command.d.ts +3 -203
  89. package/dist/commands/plan.command.d.ts.map +1 -1
  90. package/dist/commands/plan.command.js +200 -759
  91. package/dist/commands/plan.command.js.map +1 -1
  92. package/dist/config.d.ts +19 -101
  93. package/dist/config.d.ts.map +1 -1
  94. package/dist/config.js +51 -364
  95. package/dist/config.js.map +1 -1
  96. package/dist/core/discovery.d.ts +27 -0
  97. package/dist/core/discovery.d.ts.map +1 -0
  98. package/dist/core/discovery.js +97 -0
  99. package/dist/core/discovery.js.map +1 -0
  100. package/dist/core/errors.d.ts +26 -0
  101. package/dist/core/errors.d.ts.map +1 -0
  102. package/dist/core/errors.js +33 -0
  103. package/dist/core/errors.js.map +1 -0
  104. package/dist/core/http.d.ts +23 -0
  105. package/dist/core/http.d.ts.map +1 -0
  106. package/dist/core/http.js +153 -0
  107. package/dist/core/http.js.map +1 -0
  108. package/dist/core/private-files.d.ts +6 -0
  109. package/dist/core/private-files.d.ts.map +1 -0
  110. package/dist/core/private-files.js +96 -0
  111. package/dist/core/private-files.js.map +1 -0
  112. package/dist/core/routes.d.ts +94 -0
  113. package/dist/core/routes.d.ts.map +1 -0
  114. package/dist/core/routes.js +91 -0
  115. package/dist/core/routes.js.map +1 -0
  116. package/dist/core/urls.d.ts +15 -0
  117. package/dist/core/urls.d.ts.map +1 -0
  118. package/dist/core/urls.js +55 -0
  119. package/dist/core/urls.js.map +1 -0
  120. package/dist/gate-rules.d.ts +1 -2
  121. package/dist/gate-rules.d.ts.map +1 -1
  122. package/dist/gate-rules.js +4 -5
  123. package/dist/gate-rules.js.map +1 -1
  124. package/dist/index.d.ts +23 -3
  125. package/dist/index.d.ts.map +1 -1
  126. package/dist/index.js +18 -3
  127. package/dist/index.js.map +1 -1
  128. package/dist/io.d.ts +21 -0
  129. package/dist/io.d.ts.map +1 -0
  130. package/dist/io.js +59 -0
  131. package/dist/io.js.map +1 -0
  132. package/dist/money.d.ts +42 -0
  133. package/dist/money.d.ts.map +1 -0
  134. package/dist/money.js +112 -0
  135. package/dist/money.js.map +1 -0
  136. package/dist/program.d.ts +5 -24
  137. package/dist/program.d.ts.map +1 -1
  138. package/dist/program.js +25 -113
  139. package/dist/program.js.map +1 -1
  140. package/package.json +7 -8
  141. package/dist/auth/api-client.d.ts +0 -50
  142. package/dist/auth/api-client.d.ts.map +0 -1
  143. package/dist/auth/api-client.js +0 -109
  144. package/dist/auth/api-client.js.map +0 -1
  145. package/dist/auth/relative-time.d.ts +0 -2
  146. package/dist/auth/relative-time.d.ts.map +0 -1
  147. package/dist/auth/relative-time.js +0 -27
  148. package/dist/auth/relative-time.js.map +0 -1
  149. package/dist/auth/scopes.d.ts +0 -30
  150. package/dist/auth/scopes.d.ts.map +0 -1
  151. package/dist/auth/scopes.js +0 -39
  152. package/dist/auth/scopes.js.map +0 -1
  153. package/dist/auth/workspace-client.d.ts +0 -70
  154. package/dist/auth/workspace-client.d.ts.map +0 -1
  155. package/dist/auth/workspace-client.js +0 -105
  156. package/dist/auth/workspace-client.js.map +0 -1
  157. package/dist/commands/auth/config.command.d.ts +0 -8
  158. package/dist/commands/auth/config.command.d.ts.map +0 -1
  159. package/dist/commands/auth/config.command.js +0 -60
  160. package/dist/commands/auth/config.command.js.map +0 -1
  161. package/dist/commands/auth/login.command.d.ts +0 -46
  162. package/dist/commands/auth/login.command.d.ts.map +0 -1
  163. package/dist/commands/auth/login.command.js +0 -166
  164. package/dist/commands/auth/login.command.js.map +0 -1
  165. package/dist/commands/auth/logout.command.d.ts +0 -21
  166. package/dist/commands/auth/logout.command.d.ts.map +0 -1
  167. package/dist/commands/auth/logout.command.js +0 -97
  168. package/dist/commands/auth/logout.command.js.map +0 -1
  169. package/dist/commands/auth/methods.command.d.ts +0 -68
  170. package/dist/commands/auth/methods.command.d.ts.map +0 -1
  171. package/dist/commands/auth/methods.command.js +0 -91
  172. package/dist/commands/auth/methods.command.js.map +0 -1
  173. package/dist/commands/auth/status.command.d.ts +0 -18
  174. package/dist/commands/auth/status.command.d.ts.map +0 -1
  175. package/dist/commands/auth/status.command.js +0 -104
  176. package/dist/commands/auth/status.command.js.map +0 -1
  177. package/dist/commands/auth/use.command.d.ts +0 -17
  178. package/dist/commands/auth/use.command.d.ts.map +0 -1
  179. package/dist/commands/auth/use.command.js +0 -47
  180. package/dist/commands/auth/use.command.js.map +0 -1
  181. package/dist/commands/branding.command.d.ts +0 -3
  182. package/dist/commands/branding.command.d.ts.map +0 -1
  183. package/dist/commands/branding.command.js +0 -42
  184. package/dist/commands/branding.command.js.map +0 -1
  185. package/dist/commands/event.command.d.ts +0 -3
  186. package/dist/commands/event.command.d.ts.map +0 -1
  187. package/dist/commands/event.command.js +0 -27
  188. package/dist/commands/event.command.js.map +0 -1
  189. package/dist/commands/flag-init.command.d.ts +0 -13
  190. package/dist/commands/flag-init.command.d.ts.map +0 -1
  191. package/dist/commands/flag-init.command.js +0 -463
  192. package/dist/commands/flag-init.command.js.map +0 -1
  193. package/dist/commands/guide.command.d.ts +0 -61
  194. package/dist/commands/guide.command.d.ts.map +0 -1
  195. package/dist/commands/guide.command.js +0 -655
  196. package/dist/commands/guide.command.js.map +0 -1
  197. package/dist/commands/info.command.d.ts +0 -3
  198. package/dist/commands/info.command.d.ts.map +0 -1
  199. package/dist/commands/info.command.js +0 -70
  200. package/dist/commands/info.command.js.map +0 -1
  201. package/dist/commands/integration.command.d.ts +0 -35
  202. package/dist/commands/integration.command.d.ts.map +0 -1
  203. package/dist/commands/integration.command.js +0 -290
  204. package/dist/commands/integration.command.js.map +0 -1
  205. package/dist/commands/journeys.d.ts +0 -43
  206. package/dist/commands/journeys.d.ts.map +0 -1
  207. package/dist/commands/journeys.js +0 -221
  208. package/dist/commands/journeys.js.map +0 -1
  209. package/dist/commands/ops.command.d.ts +0 -17
  210. package/dist/commands/ops.command.d.ts.map +0 -1
  211. package/dist/commands/ops.command.js +0 -129
  212. package/dist/commands/ops.command.js.map +0 -1
  213. package/dist/commands/privilege.command.d.ts +0 -16
  214. package/dist/commands/privilege.command.d.ts.map +0 -1
  215. package/dist/commands/privilege.command.js +0 -86
  216. package/dist/commands/privilege.command.js.map +0 -1
  217. package/dist/commands/role.command.d.ts +0 -3
  218. package/dist/commands/role.command.d.ts.map +0 -1
  219. package/dist/commands/role.command.js +0 -101
  220. package/dist/commands/role.command.js.map +0 -1
  221. package/dist/commands/runtime-dir.d.ts +0 -16
  222. package/dist/commands/runtime-dir.d.ts.map +0 -1
  223. package/dist/commands/runtime-dir.js +0 -18
  224. package/dist/commands/runtime-dir.js.map +0 -1
  225. package/dist/commands/setup.command.d.ts +0 -63
  226. package/dist/commands/setup.command.d.ts.map +0 -1
  227. package/dist/commands/setup.command.js +0 -148
  228. package/dist/commands/setup.command.js.map +0 -1
  229. package/dist/commands/stripe.command.d.ts +0 -29
  230. package/dist/commands/stripe.command.d.ts.map +0 -1
  231. package/dist/commands/stripe.command.js +0 -99
  232. package/dist/commands/stripe.command.js.map +0 -1
  233. package/dist/commands/tenant.command.d.ts +0 -3
  234. package/dist/commands/tenant.command.d.ts.map +0 -1
  235. package/dist/commands/tenant.command.js +0 -135
  236. package/dist/commands/tenant.command.js.map +0 -1
  237. package/dist/commands/token.command.d.ts +0 -3
  238. package/dist/commands/token.command.d.ts.map +0 -1
  239. package/dist/commands/token.command.js +0 -54
  240. package/dist/commands/token.command.js.map +0 -1
  241. package/dist/commands/user.command.d.ts +0 -3
  242. package/dist/commands/user.command.d.ts.map +0 -1
  243. package/dist/commands/user.command.js +0 -117
  244. package/dist/commands/user.command.js.map +0 -1
  245. package/dist/credentials.d.ts +0 -141
  246. package/dist/credentials.d.ts.map +0 -1
  247. package/dist/credentials.js +0 -348
  248. package/dist/credentials.js.map +0 -1
  249. package/dist/flag-coherence.d.ts +0 -42
  250. package/dist/flag-coherence.d.ts.map +0 -1
  251. package/dist/flag-coherence.js +0 -103
  252. package/dist/flag-coherence.js.map +0 -1
  253. package/dist/output.d.ts +0 -17
  254. package/dist/output.d.ts.map +0 -1
  255. package/dist/output.js +0 -107
  256. package/dist/output.js.map +0 -1
  257. package/dist/preview.d.ts +0 -9
  258. package/dist/preview.d.ts.map +0 -1
  259. package/dist/preview.js +0 -63
  260. package/dist/preview.js.map +0 -1
  261. package/dist/product-decisions.d.ts +0 -40
  262. package/dist/product-decisions.d.ts.map +0 -1
  263. package/dist/product-decisions.js +0 -52
  264. package/dist/product-decisions.js.map +0 -1
  265. package/dist/prompt-urls.d.ts +0 -31
  266. package/dist/prompt-urls.d.ts.map +0 -1
  267. package/dist/prompt-urls.js +0 -35
  268. package/dist/prompt-urls.js.map +0 -1
  269. package/dist/prompts/auth-master-integration-prompt.md +0 -255
  270. package/dist/prompts/billing/master.md +0 -332
  271. package/dist/prompts/decisions/feature-control.md +0 -131
  272. package/dist/prompts/decisions/going-live.md +0 -60
  273. package/dist/prompts/decisions/login.md +0 -71
  274. package/dist/prompts/decisions/look-and-feel.md +0 -68
  275. package/dist/prompts/decisions/payments.md +0 -97
  276. package/dist/prompts/decisions/roles.md +0 -78
  277. package/dist/prompts/decisions/teams.md +0 -61
  278. package/dist/prompts/fit-together.md +0 -97
  279. package/dist/prompts/flags/master.md +0 -220
  280. package/dist/prompts/guide-coverage.json +0 -17
  281. package/dist/prompts/integration-success.md +0 -106
  282. package/dist/prompts/mcp-tools.json +0 -90
  283. package/dist/prompts/mechanisms.md +0 -304
  284. package/dist/prompts/orientation.md +0 -42
  285. package/dist/prompts/product-decisions.json +0 -338
  286. package/dist/resolve.d.ts +0 -110
  287. package/dist/resolve.d.ts.map +0 -1
  288. package/dist/resolve.js +0 -260
  289. package/dist/resolve.js.map +0 -1
  290. package/dist/shape.d.ts +0 -25
  291. package/dist/shape.d.ts.map +0 -1
  292. package/dist/shape.js +0 -74
  293. package/dist/shape.js.map +0 -1
@@ -0,0 +1,69 @@
1
+ import type { BridgeClient } from '../client.js';
2
+ /**
3
+ * Roles, privileges, workspaces and members of an app. Version 2 offers
4
+ * these to the app's own server only, so each call takes an app key
5
+ * (see `withAppKey`).
6
+ */
7
+ export interface Role {
8
+ readonly id: string;
9
+ readonly key: string;
10
+ readonly name: string;
11
+ readonly privileges: string[];
12
+ readonly isDefault?: boolean;
13
+ readonly [field: string]: unknown;
14
+ }
15
+ export interface RoleFields {
16
+ key?: string;
17
+ name?: string;
18
+ description?: string;
19
+ privileges?: string[];
20
+ isDefault?: boolean;
21
+ }
22
+ export interface Privilege {
23
+ readonly id: string;
24
+ readonly key: string;
25
+ readonly description?: string;
26
+ readonly [field: string]: unknown;
27
+ }
28
+ export declare const roles: {
29
+ list: (c: BridgeClient, key: string) => Promise<Role[]>;
30
+ create: (c: BridgeClient, key: string, fields: RoleFields & {
31
+ key: string;
32
+ name: string;
33
+ }) => Promise<Role>;
34
+ update(c: BridgeClient, key: string, role: string, fields: RoleFields): Promise<Role>;
35
+ remove(c: BridgeClient, key: string, role: string): Promise<unknown>;
36
+ };
37
+ export declare const privileges: {
38
+ list: (c: BridgeClient, key: string) => Promise<Privilege[]>;
39
+ create: (c: BridgeClient, key: string, fields: {
40
+ key: string;
41
+ description?: string;
42
+ }) => Promise<Privilege>;
43
+ update(c: BridgeClient, key: string, privilege: string, fields: {
44
+ key?: string;
45
+ description?: string;
46
+ }): Promise<Privilege>;
47
+ remove(c: BridgeClient, key: string, privilege: string): Promise<unknown>;
48
+ };
49
+ export declare const workspaces: {
50
+ list: (c: BridgeClient, key: string, query?: {
51
+ limit?: string;
52
+ after?: string;
53
+ search?: string;
54
+ }) => Promise<unknown>;
55
+ };
56
+ export declare const members: {
57
+ list: (c: BridgeClient, key: string, workspace: string, query?: {
58
+ limit?: string;
59
+ after?: string;
60
+ search?: string;
61
+ }) => Promise<unknown>;
62
+ get: (c: BridgeClient, key: string, workspace: string, memberId: string) => Promise<unknown>;
63
+ update: (c: BridgeClient, key: string, workspace: string, memberId: string, fields: {
64
+ role?: string;
65
+ enabled?: boolean;
66
+ }) => Promise<unknown>;
67
+ remove: (c: BridgeClient, key: string, workspace: string, memberId: string) => Promise<unknown>;
68
+ };
69
+ //# sourceMappingURL=accounts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accounts.d.ts","sourceRoot":"","sources":["../../src/api/accounts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAGjD;;;;GAIG;AACH,MAAM,WAAW,IAAI;IACnB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CACnC;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CACnC;AAUD,eAAO,MAAM,KAAK;cACN,YAAY,OAAO,MAAM;gBACvB,YAAY,OAAO,MAAM,UAAU,UAAU,GAAG;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE;cACzE,YAAY,OAAO,MAAM,QAAQ,MAAM,UAAU,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;cAI3E,YAAY,OAAO,MAAM,QAAQ,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAI3E,CAAC;AAEF,eAAO,MAAM,UAAU;cACX,YAAY,OAAO,MAAM;gBACvB,YAAY,OAAO,MAAM,UAAU;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE;cACpE,YAAY,OAAO,MAAM,aAAa,MAAM,UAAU;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,SAAS,CAAC;cAIjH,YAAY,OAAO,MAAM,aAAa,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAIhF,CAAC;AAEF,eAAO,MAAM,UAAU;cACX,YAAY,OAAO,MAAM,UAAS;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE;CAChG,CAAC;AAEF,eAAO,MAAM,OAAO;cACR,YAAY,OAAO,MAAM,aAAa,MAAM,UAAS;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE;aAEzG,YAAY,OAAO,MAAM,aAAa,MAAM,YAAY,MAAM;gBAC3D,YAAY,OAAO,MAAM,aAAa,MAAM,YAAY,MAAM,UAAU;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE;gBAE5G,YAAY,OAAO,MAAM,aAAa,MAAM,YAAY,MAAM;CAC3E,CAAC"}
@@ -0,0 +1,42 @@
1
+ import { CliError } from '../core/errors.js';
2
+ const body = (answer) => answer.body;
3
+ function byKeyOrId(items, wanted, what) {
4
+ const found = items.find((each) => each.key === wanted) ?? items.find((each) => each.id === wanted);
5
+ if (found === undefined)
6
+ throw new CliError('not-found', `The app has no ${what} ${wanted}.`);
7
+ return found;
8
+ }
9
+ export const roles = {
10
+ list: (c, key) => c.withKey('rolesList', key).then(body),
11
+ create: (c, key, fields) => c.withKey('rolesCreate', key, { body: fields }).then(body),
12
+ async update(c, key, role, fields) {
13
+ const found = byKeyOrId(await roles.list(c, key), role, 'role');
14
+ return c.withKey('rolesUpdate', key, { params: { roleId: found.id }, body: fields }).then(body);
15
+ },
16
+ async remove(c, key, role) {
17
+ const found = byKeyOrId(await roles.list(c, key), role, 'role');
18
+ return c.withKey('rolesDelete', key, { params: { roleId: found.id } }).then(body);
19
+ },
20
+ };
21
+ export const privileges = {
22
+ list: (c, key) => c.withKey('privilegesList', key).then(body),
23
+ create: (c, key, fields) => c.withKey('privilegesCreate', key, { body: fields }).then(body),
24
+ async update(c, key, privilege, fields) {
25
+ const found = byKeyOrId(await privileges.list(c, key), privilege, 'privilege');
26
+ return c.withKey('privilegesUpdate', key, { params: { privilegeId: found.id }, body: fields }).then(body);
27
+ },
28
+ async remove(c, key, privilege) {
29
+ const found = byKeyOrId(await privileges.list(c, key), privilege, 'privilege');
30
+ return c.withKey('privilegesDelete', key, { params: { privilegeId: found.id } }).then(body);
31
+ },
32
+ };
33
+ export const workspaces = {
34
+ list: (c, key, query = {}) => c.withKey('workspacesList', key, { query }).then(body),
35
+ };
36
+ export const members = {
37
+ list: (c, key, workspace, query = {}) => c.withKey('membersList', key, { workspace, query }).then(body),
38
+ get: (c, key, workspace, memberId) => c.withKey('membersGet', key, { workspace, params: { memberId } }).then(body),
39
+ update: (c, key, workspace, memberId, fields) => c.withKey('membersUpdate', key, { workspace, params: { memberId }, body: fields }).then(body),
40
+ remove: (c, key, workspace, memberId) => c.withKey('membersRemove', key, { workspace, params: { memberId } }).then(body),
41
+ };
42
+ //# sourceMappingURL=accounts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accounts.js","sourceRoot":"","sources":["../../src/api/accounts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import type { BridgeClient } from '../client.js';
2
+ /** What an address of an app is used for. */
3
+ export declare const ADDRESS_USES: readonly ["sign-in-return", "browser-origin", "email-links", "sign-out", "checkout-return"];
4
+ export type AddressUse = (typeof ADDRESS_USES)[number];
5
+ export interface Address {
6
+ readonly url: string;
7
+ readonly uses: AddressUse[];
8
+ }
9
+ export interface App {
10
+ readonly id: string;
11
+ readonly name: string;
12
+ readonly state?: string;
13
+ readonly addresses: Address[];
14
+ readonly defaultReturn: string | null;
15
+ readonly profile?: Record<string, string>;
16
+ readonly trust?: {
17
+ readonly issuer: string;
18
+ readonly audience: string;
19
+ } | null;
20
+ readonly [field: string]: unknown;
21
+ }
22
+ /** An app's name and public profile, as it is created or changed. `null` clears a profile field. */
23
+ export interface AppFields {
24
+ readonly name?: string;
25
+ readonly addresses?: Address[];
26
+ readonly defaultReturn?: string | null;
27
+ readonly logo?: string | null;
28
+ readonly website?: string | null;
29
+ readonly privacyPolicy?: string | null;
30
+ readonly termsOfService?: string | null;
31
+ }
32
+ export declare function checkUses(uses: readonly string[]): AddressUse[];
33
+ export declare const apps: {
34
+ list(c: BridgeClient): Promise<App[]>;
35
+ create(c: BridgeClient, fields: AppFields & {
36
+ name: string;
37
+ }): Promise<App>;
38
+ get(c: BridgeClient, appId: string): Promise<App>;
39
+ update(c: BridgeClient, appId: string, fields: AppFields): Promise<App>;
40
+ remove(c: BridgeClient, appId: string): Promise<unknown>;
41
+ /** Adds an address, or adds uses to one the app already lists. The app's whole list is written back. */
42
+ addAddress(c: BridgeClient, appId: string, url: string, uses: AddressUse[]): Promise<App>;
43
+ /**
44
+ * Removes uses from an address, or the whole address when no uses are
45
+ * named or none is left. A default sign-in return that is no longer a
46
+ * sign-in return is cleared with it.
47
+ */
48
+ removeAddress(c: BridgeClient, appId: string, url: string, uses?: AddressUse[]): Promise<App>;
49
+ };
50
+ //# sourceMappingURL=apps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apps.d.ts","sourceRoot":"","sources":["../../src/api/apps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAGjD,6CAA6C;AAC7C,eAAO,MAAM,YAAY,6FAA8F,CAAC;AACxH,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAEvD,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,GAAG;IAClB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,QAAQ,CAAC,KAAK,CAAC,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC/E,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CACnC;AAED,oGAAoG;AACpG,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC;IAC/B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzC;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,UAAU,EAAE,CAQ/D;AAED,eAAO,MAAM,IAAI;YACD,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;cAG3B,YAAY,UAAU,SAAS,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,GAAG,CAAC;WAGpE,YAAY,SAAS,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;cAGvC,YAAY,SAAS,MAAM,UAAU,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC;cAG7D,YAAY,SAAS,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAI9D,wGAAwG;kBACpF,YAAY,SAAS,MAAM,OAAO,MAAM,QAAQ,UAAU,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAY/F;;;;OAIG;qBACoB,YAAY,SAAS,MAAM,OAAO,MAAM,SAAQ,UAAU,EAAE,GAAQ,OAAO,CAAC,GAAG,CAAC;CAUxG,CAAC"}
@@ -0,0 +1,62 @@
1
+ import { CliError } from '../core/errors.js';
2
+ /** What an address of an app is used for. */
3
+ export const ADDRESS_USES = ['sign-in-return', 'browser-origin', 'email-links', 'sign-out', 'checkout-return'];
4
+ export function checkUses(uses) {
5
+ if (uses.length === 0)
6
+ throw new CliError('invalid', `Say what the address is for: --use ${ADDRESS_USES.join(' | ')}.`);
7
+ for (const use of uses) {
8
+ if (!ADDRESS_USES.includes(use)) {
9
+ throw new CliError('invalid', `${use} is not a use. An address is used for: ${ADDRESS_USES.join(', ')}.`);
10
+ }
11
+ }
12
+ return [...new Set(uses)];
13
+ }
14
+ export const apps = {
15
+ async list(c) {
16
+ return (await c.person('appsList')).body;
17
+ },
18
+ async create(c, fields) {
19
+ return (await c.person('appsCreate', { body: fields })).body;
20
+ },
21
+ async get(c, appId) {
22
+ return (await c.person('appsGet', { params: { appId } })).body;
23
+ },
24
+ async update(c, appId, fields) {
25
+ return (await c.person('appsUpdate', { params: { appId }, body: fields })).body;
26
+ },
27
+ async remove(c, appId) {
28
+ return (await c.person('appsDelete', { params: { appId } })).body;
29
+ },
30
+ /** Adds an address, or adds uses to one the app already lists. The app's whole list is written back. */
31
+ async addAddress(c, appId, url, uses) {
32
+ const app = await apps.get(c, appId);
33
+ const addresses = (app.addresses ?? []).map((each) => ({ url: each.url, uses: [...each.uses] }));
34
+ const found = addresses.find((each) => each.url === url);
35
+ if (found) {
36
+ for (const use of uses)
37
+ if (!found.uses.includes(use))
38
+ found.uses.push(use);
39
+ }
40
+ else {
41
+ addresses.push({ url, uses: [...uses] });
42
+ }
43
+ return apps.update(c, appId, { addresses });
44
+ },
45
+ /**
46
+ * Removes uses from an address, or the whole address when no uses are
47
+ * named or none is left. A default sign-in return that is no longer a
48
+ * sign-in return is cleared with it.
49
+ */
50
+ async removeAddress(c, appId, url, uses = []) {
51
+ const app = await apps.get(c, appId);
52
+ const before = app.addresses ?? [];
53
+ if (!before.some((each) => each.url === url))
54
+ throw new CliError('not-found', `The app lists no address ${url}.`);
55
+ const addresses = before
56
+ .map((each) => (each.url !== url ? { url: each.url, uses: [...each.uses] } : { url: each.url, uses: uses.length === 0 ? [] : each.uses.filter((use) => !uses.includes(use)) }))
57
+ .filter((each) => each.uses.length > 0);
58
+ const stillReturn = addresses.some((each) => each.url === app.defaultReturn && each.uses.includes('sign-in-return'));
59
+ return apps.update(c, appId, { addresses, ...(app.defaultReturn !== null && !stillReturn ? { defaultReturn: null } : {}) });
60
+ },
61
+ };
62
+ //# sourceMappingURL=apps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apps.js","sourceRoot":"","sources":["../../src/api/apps.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,6CAA6C;AAC7C,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,aAAa,EAAE,UAAU,EAAE,iBAAiB,CAAU,CAAC;AA8BxH,MAAM,UAAU,SAAS,CAAC,IAAuB;IAC/C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE,sCAAsC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACxH,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,CAAE,YAAkC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACvD,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE,GAAG,GAAG,0CAA0C,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC5G,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAiB,CAAC;AAC5C,CAAC;AAED,MAAM,CAAC,MAAM,IAAI,GAAG;IAClB,KAAK,CAAC,IAAI,CAAC,CAAe;QACxB,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAQ,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;IAClD,CAAC;IACD,KAAK,CAAC,MAAM,CAAC,CAAe,EAAE,MAAoC;QAChE,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAM,YAAY,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACpE,CAAC;IACD,KAAK,CAAC,GAAG,CAAC,CAAe,EAAE,KAAa;QACtC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAM,SAAS,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACtE,CAAC;IACD,KAAK,CAAC,MAAM,CAAC,CAAe,EAAE,KAAa,EAAE,MAAiB;QAC5D,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAM,YAAY,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACvF,CAAC;IACD,KAAK,CAAC,MAAM,CAAC,CAAe,EAAE,KAAa;QACzC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACpE,CAAC;IAED,wGAAwG;IACxG,KAAK,CAAC,UAAU,CAAC,CAAe,EAAE,KAAa,EAAE,GAAW,EAAE,IAAkB;QAC9E,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACrC,MAAM,SAAS,GAAG,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACjG,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;QACzD,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,MAAM,GAAG,IAAI,IAAI;gBAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;oBAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9E,CAAC;aAAM,CAAC;YACN,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3C,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,aAAa,CAAC,CAAe,EAAE,KAAa,EAAE,GAAW,EAAE,OAAqB,EAAE;QACtF,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACrC,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC;QACnC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC;YAAE,MAAM,IAAI,QAAQ,CAAC,WAAW,EAAE,4BAA4B,GAAG,GAAG,CAAC,CAAC;QAClH,MAAM,SAAS,GAAG,MAAM;aACrB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;aAC9K,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC1C,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,aAAa,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC;QACrH,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,GAAG,CAAC,GAAG,CAAC,aAAa,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9H,CAAC;CACF,CAAC"}
@@ -0,0 +1,131 @@
1
+ import type { BridgeClient } from '../client.js';
2
+ /** A price per unit of a metric above what the price includes, in minor units as text ("0.25"). */
3
+ export interface UsagePrice {
4
+ metric: string;
5
+ unitAmount: string;
6
+ included?: number;
7
+ }
8
+ /** A price in minor units (1999 for 19.99 EUR). `interval` is null for a one-time price. */
9
+ export interface Price {
10
+ currency: string;
11
+ interval: 'day' | 'week' | 'month' | 'year' | null;
12
+ amount: number;
13
+ usage?: UsagePrice[];
14
+ }
15
+ export interface Feature {
16
+ key: string;
17
+ name?: string;
18
+ }
19
+ export interface Limit {
20
+ metric: string;
21
+ limit: number | null;
22
+ }
23
+ export interface Trial {
24
+ days: number;
25
+ cardRequired?: boolean;
26
+ }
27
+ /** A plan as one document: what it costs, what it includes and how much. */
28
+ export interface PlanFields {
29
+ key?: string;
30
+ name?: string;
31
+ description?: string;
32
+ prices?: Price[];
33
+ features?: Feature[];
34
+ limits?: Limit[];
35
+ trial?: Trial | null;
36
+ }
37
+ export interface Plan extends PlanFields {
38
+ readonly key: string;
39
+ readonly name: string;
40
+ readonly archived?: boolean;
41
+ readonly [field: string]: unknown;
42
+ }
43
+ export interface ProductFields {
44
+ key?: string;
45
+ kind?: 'addon' | 'one_time';
46
+ name?: string;
47
+ description?: string;
48
+ prices?: Price[];
49
+ features?: Feature[];
50
+ /** How much one unit adds to a limit. */
51
+ limits?: {
52
+ metric: string;
53
+ add: number;
54
+ }[];
55
+ }
56
+ export interface Metric {
57
+ readonly key: string;
58
+ readonly name: string;
59
+ readonly kind: 'counter' | 'gauge';
60
+ }
61
+ export interface Tax {
62
+ readonly country: string;
63
+ readonly name: string;
64
+ readonly basisPoints: number;
65
+ }
66
+ export interface BillingSettings {
67
+ currency?: string | null;
68
+ paymentsAutoRedirect?: boolean;
69
+ returnUrl?: string | null;
70
+ }
71
+ export declare const plans: {
72
+ list: (c: BridgeClient, appId: string, archived?: boolean) => Promise<Plan[]>;
73
+ get: (c: BridgeClient, appId: string, key: string) => Promise<Plan>;
74
+ create: (c: BridgeClient, appId: string, fields: PlanFields & {
75
+ key: string;
76
+ name: string;
77
+ }) => Promise<Plan>;
78
+ /** Creates the plan, or replaces it whole. */
79
+ replace: (c: BridgeClient, appId: string, key: string, fields: PlanFields) => Promise<Plan>;
80
+ /** Changes only the fields named. */
81
+ update: (c: BridgeClient, appId: string, key: string, fields: PlanFields) => Promise<Plan>;
82
+ remove: (c: BridgeClient, appId: string, key: string) => Promise<unknown>;
83
+ archive: (c: BridgeClient, appId: string, key: string, archived: boolean) => Promise<Plan>;
84
+ deletionPreview: (c: BridgeClient, appId: string, key: string) => Promise<{
85
+ key: string;
86
+ holders: number;
87
+ deletable: boolean;
88
+ }>;
89
+ };
90
+ export declare const products: {
91
+ list: (c: BridgeClient, appId: string, archived?: boolean) => Promise<Plan[]>;
92
+ get: (c: BridgeClient, appId: string, key: string) => Promise<unknown>;
93
+ create: (c: BridgeClient, appId: string, fields: ProductFields & {
94
+ key: string;
95
+ name: string;
96
+ kind: "addon" | "one_time";
97
+ }) => Promise<unknown>;
98
+ update: (c: BridgeClient, appId: string, key: string, fields: ProductFields) => Promise<unknown>;
99
+ remove: (c: BridgeClient, appId: string, key: string) => Promise<unknown>;
100
+ archive: (c: BridgeClient, appId: string, key: string, archived: boolean) => Promise<unknown>;
101
+ };
102
+ export declare const metrics: {
103
+ list: (c: BridgeClient, appId: string) => Promise<Metric[]>;
104
+ set: (c: BridgeClient, appId: string, key: string, fields: {
105
+ name?: string;
106
+ kind: "counter" | "gauge";
107
+ }) => Promise<Metric>;
108
+ remove: (c: BridgeClient, appId: string, key: string) => Promise<unknown>;
109
+ };
110
+ export declare const taxes: {
111
+ list: (c: BridgeClient, appId: string) => Promise<Tax[]>;
112
+ set: (c: BridgeClient, appId: string, country: string, fields: {
113
+ name: string;
114
+ basisPoints: number;
115
+ }) => Promise<Tax>;
116
+ remove: (c: BridgeClient, appId: string, country: string) => Promise<unknown>;
117
+ };
118
+ export declare const billingSettings: {
119
+ get: (c: BridgeClient, appId: string) => Promise<BillingSettings>;
120
+ update: (c: BridgeClient, appId: string, fields: BillingSettings) => Promise<BillingSettings>;
121
+ };
122
+ export declare const connection: {
123
+ get: (c: BridgeClient, appId: string) => Promise<unknown>;
124
+ remove: (c: BridgeClient, appId: string) => Promise<unknown>;
125
+ /** Connects Stripe with a pasted secret key: the app-key route, the one version 2 offers for it. */
126
+ pasteKey: (c: BridgeClient, appKey: string, fields: {
127
+ secretKey: string;
128
+ publishableKey?: string;
129
+ }) => Promise<unknown>;
130
+ };
131
+ //# sourceMappingURL=billing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"billing.d.ts","sourceRoot":"","sources":["../../src/api/billing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ const body = (answer) => answer.body;
2
+ export const plans = {
3
+ list: (c, appId, archived = false) => c.person('plansList', { params: { appId }, query: { archived: archived ? 'true' : undefined } }).then(body),
4
+ get: (c, appId, key) => c.person('plansGet', { params: { appId, key } }).then(body),
5
+ create: (c, appId, fields) => c.person('plansCreate', { params: { appId }, body: fields }).then(body),
6
+ /** Creates the plan, or replaces it whole. */
7
+ replace: (c, appId, key, fields) => c.person('plansReplace', { params: { appId, key }, body: fields }).then(body),
8
+ /** Changes only the fields named. */
9
+ update: (c, appId, key, fields) => c.person('plansUpdate', { params: { appId, key }, body: fields }).then(body),
10
+ remove: (c, appId, key) => c.person('plansDelete', { params: { appId, key } }).then(body),
11
+ archive: (c, appId, key, archived) => c.person('plansArchive', { params: { appId, key }, body: { archived } }).then(body),
12
+ deletionPreview: (c, appId, key) => c.person('plansDeletionPreview', { params: { appId, key } }).then(body),
13
+ };
14
+ export const products = {
15
+ list: (c, appId, archived = false) => c.person('productsList', { params: { appId }, query: { archived: archived ? 'true' : undefined } }).then(body),
16
+ get: (c, appId, key) => c.person('productsGet', { params: { appId, key } }).then(body),
17
+ create: (c, appId, fields) => c.person('productsCreate', { params: { appId }, body: fields }).then(body),
18
+ update: (c, appId, key, fields) => c.person('productsUpdate', { params: { appId, key }, body: fields }).then(body),
19
+ remove: (c, appId, key) => c.person('productsDelete', { params: { appId, key } }).then(body),
20
+ archive: (c, appId, key, archived) => c.person('productsArchive', { params: { appId, key }, body: { archived } }).then(body),
21
+ };
22
+ export const metrics = {
23
+ list: (c, appId) => c.person('metricsList', { params: { appId } }).then(body),
24
+ set: (c, appId, key, fields) => c.person('metricsPut', { params: { appId, key }, body: fields }).then(body),
25
+ remove: (c, appId, key) => c.person('metricsDelete', { params: { appId, key } }).then(body),
26
+ };
27
+ export const taxes = {
28
+ list: (c, appId) => c.person('taxesList', { params: { appId } }).then(body),
29
+ set: (c, appId, country, fields) => c.person('taxesPut', { params: { appId, country: country.toUpperCase() }, body: fields }).then(body),
30
+ remove: (c, appId, country) => c.person('taxesDelete', { params: { appId, country: country.toUpperCase() } }).then(body),
31
+ };
32
+ export const billingSettings = {
33
+ get: (c, appId) => c.person('billingSettingsGet', { params: { appId } }).then(body),
34
+ update: (c, appId, fields) => c.person('billingSettingsUpdate', { params: { appId }, body: fields }).then(body),
35
+ };
36
+ export const connection = {
37
+ get: (c, appId) => c.person('connectionGet', { params: { appId } }).then(body),
38
+ remove: (c, appId) => c.person('connectionDelete', { params: { appId } }).then(body),
39
+ /** Connects Stripe with a pasted secret key: the app-key route, the one version 2 offers for it. */
40
+ pasteKey: (c, appKey, fields) => c.withKey('connectionPasteKey', appKey, { body: { connector: 'stripe', ...fields } }).then(body),
41
+ };
42
+ //# sourceMappingURL=billing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"billing.js","sourceRoot":"","sources":["../../src/api/billing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ import type { BridgeClient } from '../client.js';
2
+ export declare const FLAG_STATES: readonly ["off", "on", "on-with-rule"];
3
+ export type FlagState = (typeof FLAG_STATES)[number];
4
+ export declare const VALUE_TYPES: readonly ["boolean", "string", "number", "json"];
5
+ export type ValueType = (typeof VALUE_TYPES)[number];
6
+ export declare const OPERATORS: readonly ["eq", "neq", "contains", "not_contains", "in", "not_in", "gt", "lt", "between", "regex", "exists", "not_exists"];
7
+ export type Operator = (typeof OPERATORS)[number];
8
+ export type ConditionValue = string | number | boolean | null;
9
+ export interface Condition {
10
+ attribute: string;
11
+ operator: Operator;
12
+ values: ConditionValue[];
13
+ }
14
+ /** One branch of a rule: its conditions are AND-ed; the first branch that matches gives its value. */
15
+ export interface Branch {
16
+ conditions: Condition[];
17
+ segments?: string[];
18
+ returnValue: unknown;
19
+ rolloutPct?: number;
20
+ }
21
+ export interface Rule {
22
+ branches: Branch[];
23
+ otherwiseValue: unknown;
24
+ rolloutPct?: number;
25
+ bucketBy?: string;
26
+ }
27
+ export interface FlagFields {
28
+ key?: string;
29
+ description?: string;
30
+ state?: FlagState;
31
+ valueType?: ValueType;
32
+ onValue?: unknown;
33
+ offValue?: unknown;
34
+ rule?: Rule | null;
35
+ public?: boolean;
36
+ }
37
+ export interface Flag extends FlagFields {
38
+ readonly key: string;
39
+ readonly state: FlagState;
40
+ readonly valueType: ValueType;
41
+ readonly rule: Rule | null;
42
+ readonly revision: number;
43
+ readonly [field: string]: unknown;
44
+ }
45
+ export declare const flags: {
46
+ list: (c: BridgeClient, appId: string) => Promise<Flag[]>;
47
+ get: (c: BridgeClient, appId: string, key: string) => Promise<Flag>;
48
+ create: (c: BridgeClient, appId: string, fields: FlagFields & {
49
+ key: string;
50
+ }) => Promise<Flag>;
51
+ /** Changes the flag as it is now: read, changed, written with its revision, so a change made meanwhile is never overwritten. */
52
+ update(c: BridgeClient, appId: string, key: string, change: FlagFields | ((flag: Flag) => FlagFields)): Promise<Flag>;
53
+ remove(c: BridgeClient, appId: string, key: string): Promise<unknown>;
54
+ /** Switches the flag off and keeps its rule, so `restore` brings back what it was. */
55
+ kill: (c: BridgeClient, appId: string, key: string) => Promise<Flag>;
56
+ restore: (c: BridgeClient, appId: string, key: string) => Promise<Flag>;
57
+ segments: (c: BridgeClient, appId: string) => Promise<unknown>;
58
+ };
59
+ /**
60
+ * One condition written in words: `<attribute> <operator> [value[,value…]]`.
61
+ * `in`, `not_in` and `between` take a comma-separated list; `exists` and
62
+ * `not_exists` take none.
63
+ *
64
+ * privileges contains USER_WRITE
65
+ * bridge:billing.entitlement.analytics eq true
66
+ * user.email in a@example.com,b@example.com
67
+ */
68
+ export declare function parseCondition(text: string): Condition;
69
+ /** A flag value written on the command line, read as the flag's type. */
70
+ export declare function parseValue(raw: string, type: ValueType): unknown;
71
+ /** A rule given as JSON, checked for its shape before it is sent. */
72
+ export declare function parseRule(json: string): Rule;
73
+ //# sourceMappingURL=flags.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flags.d.ts","sourceRoot":"","sources":["../../src/api/flags.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,108 @@
1
+ import { CliError } from '../core/errors.js';
2
+ export const FLAG_STATES = ['off', 'on', 'on-with-rule'];
3
+ export const VALUE_TYPES = ['boolean', 'string', 'number', 'json'];
4
+ export const OPERATORS = ['eq', 'neq', 'contains', 'not_contains', 'in', 'not_in', 'gt', 'lt', 'between', 'regex', 'exists', 'not_exists'];
5
+ const body = (answer) => answer.body;
6
+ /** `If-Match` for a change made on the flag as it was read: version 2 refuses a change that names no revision. */
7
+ const revisionOf = (flag) => ({ 'if-match': `"${String(flag.revision)}"` });
8
+ export const flags = {
9
+ list: (c, appId) => c.person('flagsList', { params: { appId } }).then(body),
10
+ get: (c, appId, key) => c.person('flagsGet', { params: { appId, key } }).then(body),
11
+ create: (c, appId, fields) => c.person('flagsCreate', { params: { appId }, body: fields }).then(body),
12
+ /** Changes the flag as it is now: read, changed, written with its revision, so a change made meanwhile is never overwritten. */
13
+ async update(c, appId, key, change) {
14
+ const current = await flags.get(c, appId, key);
15
+ const fields = typeof change === 'function' ? change(current) : change;
16
+ return c.person('flagsUpdate', { params: { appId, key }, body: fields, headers: revisionOf(current) }).then(body);
17
+ },
18
+ async remove(c, appId, key) {
19
+ const current = await flags.get(c, appId, key);
20
+ return c.person('flagsDelete', { params: { appId, key }, headers: revisionOf(current) }).then(body);
21
+ },
22
+ /** Switches the flag off and keeps its rule, so `restore` brings back what it was. */
23
+ kill: (c, appId, key) => c.person('flagsKill', { params: { appId, key } }).then(body),
24
+ restore: (c, appId, key) => c.person('flagsRestore', { params: { appId, key } }).then(body),
25
+ segments: (c, appId) => c.person('segmentsList', { params: { appId } }).then(body),
26
+ };
27
+ /** A value written in a condition: true, false, null and numbers as themselves, anything else as text. */
28
+ function conditionValue(raw) {
29
+ if (raw === 'true')
30
+ return true;
31
+ if (raw === 'false')
32
+ return false;
33
+ if (raw === 'null')
34
+ return null;
35
+ if (/^-?\d+(\.\d+)?$/.test(raw))
36
+ return Number(raw);
37
+ return raw.replace(/^"(.*)"$/, '$1');
38
+ }
39
+ /**
40
+ * One condition written in words: `<attribute> <operator> [value[,value…]]`.
41
+ * `in`, `not_in` and `between` take a comma-separated list; `exists` and
42
+ * `not_exists` take none.
43
+ *
44
+ * privileges contains USER_WRITE
45
+ * bridge:billing.entitlement.analytics eq true
46
+ * user.email in a@example.com,b@example.com
47
+ */
48
+ export function parseCondition(text) {
49
+ const match = /^\s*(\S+)\s+(\S+)(?:\s+(.*?))?\s*$/.exec(text);
50
+ if (!match)
51
+ throw new CliError('invalid', `A condition is "<attribute> <operator> <value>": ${text}`);
52
+ const [, attribute, operator, rest] = match;
53
+ if (!OPERATORS.includes(operator)) {
54
+ throw new CliError('invalid', `${operator} is not an operator. The operators are: ${OPERATORS.join(', ')}.`);
55
+ }
56
+ const op = operator;
57
+ if (op === 'exists' || op === 'not_exists') {
58
+ if (rest)
59
+ throw new CliError('invalid', `${op} takes no value: ${text}`);
60
+ return { attribute, operator: op, values: [] };
61
+ }
62
+ if (rest === undefined || rest === '')
63
+ throw new CliError('invalid', `${op} needs a value: ${text}`);
64
+ const values = op === 'in' || op === 'not_in' || op === 'between' ? rest.split(',').map((each) => conditionValue(each.trim())) : [conditionValue(rest)];
65
+ if (op === 'between' && values.length !== 2)
66
+ throw new CliError('invalid', `between takes two values, "low,high": ${text}`);
67
+ return { attribute, operator: op, values };
68
+ }
69
+ /** A flag value written on the command line, read as the flag's type. */
70
+ export function parseValue(raw, type) {
71
+ switch (type) {
72
+ case 'boolean':
73
+ if (raw !== 'true' && raw !== 'false')
74
+ throw new CliError('invalid', `A boolean flag's value is true or false, not ${raw}.`);
75
+ return raw === 'true';
76
+ case 'number': {
77
+ const n = Number(raw);
78
+ if (raw.trim() === '' || !Number.isFinite(n))
79
+ throw new CliError('invalid', `A number flag's value is a number, not ${raw}.`);
80
+ return n;
81
+ }
82
+ case 'json':
83
+ try {
84
+ return JSON.parse(raw);
85
+ }
86
+ catch {
87
+ throw new CliError('invalid', `A json flag's value is JSON: ${raw}`);
88
+ }
89
+ default:
90
+ return raw;
91
+ }
92
+ }
93
+ /** A rule given as JSON, checked for its shape before it is sent. */
94
+ export function parseRule(json) {
95
+ let parsed;
96
+ try {
97
+ parsed = JSON.parse(json);
98
+ }
99
+ catch {
100
+ throw new CliError('invalid', 'The rule is not valid JSON.');
101
+ }
102
+ const rule = parsed;
103
+ if (typeof rule !== 'object' || rule === null || !Array.isArray(rule.branches) || !('otherwiseValue' in rule)) {
104
+ throw new CliError('invalid', 'A rule is { "branches": [{ "conditions": [...], "returnValue": … }], "otherwiseValue": … }.');
105
+ }
106
+ return rule;
107
+ }
108
+ //# sourceMappingURL=flags.js.map