allsquare 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/LICENSE +21 -0
  3. package/README.md +234 -0
  4. package/dist/api/client.d.ts +46 -0
  5. package/dist/api/client.d.ts.map +1 -0
  6. package/dist/api/client.js +162 -0
  7. package/dist/api/client.js.map +1 -0
  8. package/dist/api/contract.d.ts +549 -0
  9. package/dist/api/contract.d.ts.map +1 -0
  10. package/dist/api/contract.js +49 -0
  11. package/dist/api/contract.js.map +1 -0
  12. package/dist/api/model.d.ts +627 -0
  13. package/dist/api/model.d.ts.map +1 -0
  14. package/dist/api/model.js +378 -0
  15. package/dist/api/model.js.map +1 -0
  16. package/dist/auth/auth-service.d.ts +34 -0
  17. package/dist/auth/auth-service.d.ts.map +1 -0
  18. package/dist/auth/auth-service.js +221 -0
  19. package/dist/auth/auth-service.js.map +1 -0
  20. package/dist/auth/browser.d.ts +12 -0
  21. package/dist/auth/browser.d.ts.map +1 -0
  22. package/dist/auth/browser.js +50 -0
  23. package/dist/auth/browser.js.map +1 -0
  24. package/dist/auth/credential-store.d.ts +28 -0
  25. package/dist/auth/credential-store.d.ts.map +1 -0
  26. package/dist/auth/credential-store.js +75 -0
  27. package/dist/auth/credential-store.js.map +1 -0
  28. package/dist/auth/installation-store.d.ts +14 -0
  29. package/dist/auth/installation-store.d.ts.map +1 -0
  30. package/dist/auth/installation-store.js +122 -0
  31. package/dist/auth/installation-store.js.map +1 -0
  32. package/dist/auth/model.d.ts +54 -0
  33. package/dist/auth/model.d.ts.map +1 -0
  34. package/dist/auth/model.js +24 -0
  35. package/dist/auth/model.js.map +1 -0
  36. package/dist/auth/oauth-callback.d.ts +17 -0
  37. package/dist/auth/oauth-callback.d.ts.map +1 -0
  38. package/dist/auth/oauth-callback.js +94 -0
  39. package/dist/auth/oauth-callback.js.map +1 -0
  40. package/dist/auth/oauth-client.d.ts +43 -0
  41. package/dist/auth/oauth-client.d.ts.map +1 -0
  42. package/dist/auth/oauth-client.js +191 -0
  43. package/dist/auth/oauth-client.js.map +1 -0
  44. package/dist/auth/pkce.d.ts +9 -0
  45. package/dist/auth/pkce.d.ts.map +1 -0
  46. package/dist/auth/pkce.js +12 -0
  47. package/dist/auth/pkce.js.map +1 -0
  48. package/dist/command.d.ts +3 -0
  49. package/dist/command.d.ts.map +1 -0
  50. package/dist/command.js +24 -0
  51. package/dist/command.js.map +1 -0
  52. package/dist/commands/agent-guide.d.ts +5 -0
  53. package/dist/commands/agent-guide.d.ts.map +1 -0
  54. package/dist/commands/agent-guide.js +226 -0
  55. package/dist/commands/agent-guide.js.map +1 -0
  56. package/dist/commands/auth.d.ts +5 -0
  57. package/dist/commands/auth.d.ts.map +1 -0
  58. package/dist/commands/auth.js +68 -0
  59. package/dist/commands/auth.js.map +1 -0
  60. package/dist/commands/balances.d.ts +5 -0
  61. package/dist/commands/balances.d.ts.map +1 -0
  62. package/dist/commands/balances.js +106 -0
  63. package/dist/commands/balances.js.map +1 -0
  64. package/dist/commands/config.d.ts +4 -0
  65. package/dist/commands/config.d.ts.map +1 -0
  66. package/dist/commands/config.js +16 -0
  67. package/dist/commands/config.js.map +1 -0
  68. package/dist/commands/expense-input.d.ts +17 -0
  69. package/dist/commands/expense-input.d.ts.map +1 -0
  70. package/dist/commands/expense-input.js +78 -0
  71. package/dist/commands/expense-input.js.map +1 -0
  72. package/dist/commands/expenses.d.ts +5 -0
  73. package/dist/commands/expenses.d.ts.map +1 -0
  74. package/dist/commands/expenses.js +419 -0
  75. package/dist/commands/expenses.js.map +1 -0
  76. package/dist/commands/groups.d.ts +5 -0
  77. package/dist/commands/groups.d.ts.map +1 -0
  78. package/dist/commands/groups.js +149 -0
  79. package/dist/commands/groups.js.map +1 -0
  80. package/dist/commands/recurring-expenses.d.ts +5 -0
  81. package/dist/commands/recurring-expenses.d.ts.map +1 -0
  82. package/dist/commands/recurring-expenses.js +416 -0
  83. package/dist/commands/recurring-expenses.js.map +1 -0
  84. package/dist/commands/settlements.d.ts +5 -0
  85. package/dist/commands/settlements.d.ts.map +1 -0
  86. package/dist/commands/settlements.js +225 -0
  87. package/dist/commands/settlements.js.map +1 -0
  88. package/dist/commands/shared.d.ts +6 -0
  89. package/dist/commands/shared.d.ts.map +1 -0
  90. package/dist/commands/shared.js +35 -0
  91. package/dist/commands/shared.js.map +1 -0
  92. package/dist/commands/spend-summary.d.ts +5 -0
  93. package/dist/commands/spend-summary.d.ts.map +1 -0
  94. package/dist/commands/spend-summary.js +107 -0
  95. package/dist/commands/spend-summary.js.map +1 -0
  96. package/dist/commands/update.d.ts +9 -0
  97. package/dist/commands/update.d.ts.map +1 -0
  98. package/dist/commands/update.js +78 -0
  99. package/dist/commands/update.js.map +1 -0
  100. package/dist/config.d.ts +14 -0
  101. package/dist/config.d.ts.map +1 -0
  102. package/dist/config.js +52 -0
  103. package/dist/config.js.map +1 -0
  104. package/dist/errors.d.ts +87 -0
  105. package/dist/errors.d.ts.map +1 -0
  106. package/dist/errors.js +183 -0
  107. package/dist/errors.js.map +1 -0
  108. package/dist/index.d.ts +3 -0
  109. package/dist/index.d.ts.map +1 -0
  110. package/dist/index.js +43 -0
  111. package/dist/index.js.map +1 -0
  112. package/dist/interaction.d.ts +16 -0
  113. package/dist/interaction.d.ts.map +1 -0
  114. package/dist/interaction.js +14 -0
  115. package/dist/interaction.js.map +1 -0
  116. package/dist/layers.d.ts +13 -0
  117. package/dist/layers.d.ts.map +1 -0
  118. package/dist/layers.js +17 -0
  119. package/dist/layers.js.map +1 -0
  120. package/dist/output.d.ts +31 -0
  121. package/dist/output.d.ts.map +1 -0
  122. package/dist/output.js +26 -0
  123. package/dist/output.js.map +1 -0
  124. package/dist/update/update-service.d.ts +41 -0
  125. package/dist/update/update-service.d.ts.map +1 -0
  126. package/dist/update/update-service.js +231 -0
  127. package/dist/update/update-service.js.map +1 -0
  128. package/dist/version.d.ts +3 -0
  129. package/dist/version.d.ts.map +1 -0
  130. package/dist/version.js +3 -0
  131. package/dist/version.js.map +1 -0
  132. package/package.json +41 -0
@@ -0,0 +1,87 @@
1
+ import { Runtime, Schema } from "effect";
2
+ declare const CliConfigError_base: Schema.Class<CliConfigError, Schema.TaggedStruct<"CliConfigError", {
3
+ readonly message: Schema.String;
4
+ }>, import("effect/Cause").YieldableError>;
5
+ export declare class CliConfigError extends CliConfigError_base {
6
+ readonly [Runtime.errorReported]: false;
7
+ readonly [Runtime.errorExitCode] = 2;
8
+ }
9
+ declare const CliStorageError_base: Schema.Class<CliStorageError, Schema.TaggedStruct<"CliStorageError", {
10
+ readonly message: Schema.String;
11
+ }>, import("effect/Cause").YieldableError>;
12
+ export declare class CliStorageError extends CliStorageError_base {
13
+ readonly [Runtime.errorReported]: false;
14
+ readonly [Runtime.errorExitCode] = 5;
15
+ }
16
+ declare const OAuthRequestError_base: Schema.Class<OAuthRequestError, Schema.TaggedStruct<"OAuthRequestError", {
17
+ readonly message: Schema.String;
18
+ readonly oauthError: Schema.optionalKey<Schema.String>;
19
+ readonly status: Schema.optionalKey<Schema.Number>;
20
+ }>, import("effect/Cause").YieldableError>;
21
+ export declare class OAuthRequestError extends OAuthRequestError_base {
22
+ readonly [Runtime.errorReported]: false;
23
+ get [Runtime.errorExitCode](): 5 | 3;
24
+ }
25
+ declare const OAuthCallbackError_base: Schema.Class<OAuthCallbackError, Schema.TaggedStruct<"OAuthCallbackError", {
26
+ readonly message: Schema.String;
27
+ }>, import("effect/Cause").YieldableError>;
28
+ export declare class OAuthCallbackError extends OAuthCallbackError_base {
29
+ readonly [Runtime.errorReported]: false;
30
+ readonly [Runtime.errorExitCode] = 5;
31
+ }
32
+ declare const BrowserOpenError_base: Schema.Class<BrowserOpenError, Schema.TaggedStruct<"BrowserOpenError", {
33
+ readonly message: Schema.String;
34
+ }>, import("effect/Cause").YieldableError>;
35
+ export declare class BrowserOpenError extends BrowserOpenError_base {
36
+ readonly [Runtime.errorReported]: false;
37
+ readonly [Runtime.errorExitCode] = 5;
38
+ }
39
+ declare const AuthRequiredError_base: Schema.Class<AuthRequiredError, Schema.TaggedStruct<"AuthRequiredError", {
40
+ readonly message: Schema.String;
41
+ readonly reason: Schema.optionalKey<Schema.Literal<"insufficient_scope">>;
42
+ }>, import("effect/Cause").YieldableError>;
43
+ export declare class AuthRequiredError extends AuthRequiredError_base {
44
+ readonly [Runtime.errorReported]: false;
45
+ readonly [Runtime.errorExitCode] = 3;
46
+ }
47
+ declare const RefreshLockError_base: Schema.Class<RefreshLockError, Schema.TaggedStruct<"RefreshLockError", {
48
+ readonly message: Schema.String;
49
+ }>, import("effect/Cause").YieldableError>;
50
+ export declare class RefreshLockError extends RefreshLockError_base {
51
+ readonly [Runtime.errorReported]: false;
52
+ readonly [Runtime.errorExitCode] = 5;
53
+ }
54
+ declare const ApiRequestError_base: Schema.Class<ApiRequestError, Schema.TaggedStruct<"ApiRequestError", {
55
+ readonly message: Schema.String;
56
+ readonly status: Schema.optionalKey<Schema.Number>;
57
+ readonly apiCode: Schema.optionalKey<Schema.String>;
58
+ readonly fields: Schema.optionalKey<Schema.$Record<Schema.String, Schema.String>>;
59
+ readonly route: Schema.optionalKey<Schema.String>;
60
+ readonly retryAfterSeconds: Schema.optionalKey<Schema.Number>;
61
+ }>, import("effect/Cause").YieldableError>;
62
+ export declare class ApiRequestError extends ApiRequestError_base {
63
+ readonly [Runtime.errorReported]: false;
64
+ get [Runtime.errorExitCode](): 2 | 5 | 3 | 4 | 6;
65
+ }
66
+ declare const CliInputError_base: Schema.Class<CliInputError, Schema.TaggedStruct<"CliInputError", {
67
+ readonly message: Schema.String;
68
+ }>, import("effect/Cause").YieldableError>;
69
+ export declare class CliInputError extends CliInputError_base {
70
+ readonly [Runtime.errorReported]: false;
71
+ readonly [Runtime.errorExitCode] = 2;
72
+ }
73
+ declare const UpdateError_base: Schema.Class<UpdateError, Schema.TaggedStruct<"UpdateError", {
74
+ readonly message: Schema.String;
75
+ readonly code: Schema.Literals<readonly ["UPDATE_CHECK_FAILED", "UPDATE_NOT_PUBLISHED", "UPDATE_UNSUPPORTED", "UPDATE_FAILED"]>;
76
+ readonly command: Schema.optionalKey<Schema.String>;
77
+ readonly exitCode: Schema.optionalKey<Schema.Number>;
78
+ }>, import("effect/Cause").YieldableError>;
79
+ export declare class UpdateError extends UpdateError_base {
80
+ readonly [Runtime.errorReported]: false;
81
+ get [Runtime.errorExitCode](): 2 | 5;
82
+ }
83
+ export type CliExpectedError = CliConfigError | CliStorageError | OAuthRequestError | OAuthCallbackError | BrowserOpenError | AuthRequiredError | RefreshLockError | ApiRequestError | CliInputError | UpdateError;
84
+ export declare const cliErrorCode: (error: CliExpectedError) => string;
85
+ export declare const isRetryable: (error: CliExpectedError) => boolean;
86
+ export {};
87
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;;;;AAIxC,qBAAa,cAAe,SAAQ,mBAKnC;IACC,QAAQ,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,QAAkB;IAClD,QAAQ,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,KAAI;CACrC;;;;AAED,qBAAa,eAAgB,SAAQ,oBAGpC;IACC,QAAQ,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,QAAkB;IAClD,QAAQ,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,KAAI;CACrC;;;;;;AAED,qBAAa,iBAAkB,SAAQ,sBAOtC;IACC,QAAQ,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,QAAkB;IAClD,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,UAAyD;CACrF;;;;AAED,qBAAa,kBAAmB,SAAQ,uBAGvC;IACC,QAAQ,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,QAAkB;IAClD,QAAQ,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,KAAI;CACrC;;;;AAED,qBAAa,gBAAiB,SAAQ,qBAGrC;IACC,QAAQ,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,QAAkB;IAClD,QAAQ,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,KAAI;CACrC;;;;;AAED,qBAAa,iBAAkB,SAAQ,sBAOtC;IACC,QAAQ,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,QAAkB;IAClD,QAAQ,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,KAAI;CACrC;;;;AAED,qBAAa,gBAAiB,SAAQ,qBAGrC;IACC,QAAQ,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,QAAkB;IAClD,QAAQ,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,KAAI;CACrC;;;;;;;;;AAED,qBAAa,eAAgB,SAAQ,oBAUpC;IACC,QAAQ,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,QAAkB;IAClD,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,sBAM1B;CACF;;;;AAED,qBAAa,aAAc,SAAQ,kBAGlC;IACC,QAAQ,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,QAAkB;IAClD,QAAQ,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,KAAI;CACrC;;;;;;;AAED,qBAAa,WAAY,SAAQ,gBAahC;IACC,QAAQ,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,QAAkB;IAClD,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,UAE1B;CACF;AAED,MAAM,MAAM,gBAAgB,GACxB,cAAc,GACd,eAAe,GACf,iBAAiB,GACjB,kBAAkB,GAClB,gBAAgB,GAChB,iBAAiB,GACjB,gBAAgB,GAChB,eAAe,GACf,aAAa,GACb,WAAW,CAAA;AAEf,eAAO,MAAM,YAAY,GAAI,OAAO,gBAAgB,KAAG,MAyBtD,CAAA;AAwDD,eAAO,MAAM,WAAW,GAAI,OAAO,gBAAgB,KAAG,OAsBrD,CAAA"}
package/dist/errors.js ADDED
@@ -0,0 +1,183 @@
1
+ import { Runtime, Schema } from "effect";
2
+ const alreadyReported = false;
3
+ export class CliConfigError extends Schema.TaggedError()("CliConfigError", {
4
+ message: Schema.String
5
+ }) {
6
+ [Runtime.errorReported] = alreadyReported;
7
+ [Runtime.errorExitCode] = 2;
8
+ }
9
+ export class CliStorageError extends Schema.TaggedError()("CliStorageError", { message: Schema.String }) {
10
+ [Runtime.errorReported] = alreadyReported;
11
+ [Runtime.errorExitCode] = 5;
12
+ }
13
+ export class OAuthRequestError extends Schema.TaggedError()("OAuthRequestError", {
14
+ message: Schema.String,
15
+ oauthError: Schema.optionalKey(Schema.String),
16
+ status: Schema.optionalKey(Schema.Number)
17
+ }) {
18
+ [Runtime.errorReported] = alreadyReported;
19
+ get [Runtime.errorExitCode]() { return this.oauthError === "invalid_grant" ? 3 : 5; }
20
+ }
21
+ export class OAuthCallbackError extends Schema.TaggedError()("OAuthCallbackError", { message: Schema.String }) {
22
+ [Runtime.errorReported] = alreadyReported;
23
+ [Runtime.errorExitCode] = 5;
24
+ }
25
+ export class BrowserOpenError extends Schema.TaggedError()("BrowserOpenError", { message: Schema.String }) {
26
+ [Runtime.errorReported] = alreadyReported;
27
+ [Runtime.errorExitCode] = 5;
28
+ }
29
+ export class AuthRequiredError extends Schema.TaggedError()("AuthRequiredError", {
30
+ message: Schema.String,
31
+ // Set when a session exists but lacks the scope, as opposed to no session.
32
+ reason: Schema.optionalKey(Schema.Literal("insufficient_scope"))
33
+ }) {
34
+ [Runtime.errorReported] = alreadyReported;
35
+ [Runtime.errorExitCode] = 3;
36
+ }
37
+ export class RefreshLockError extends Schema.TaggedError()("RefreshLockError", { message: Schema.String }) {
38
+ [Runtime.errorReported] = alreadyReported;
39
+ [Runtime.errorExitCode] = 5;
40
+ }
41
+ export class ApiRequestError extends Schema.TaggedError()("ApiRequestError", {
42
+ message: Schema.String,
43
+ status: Schema.optionalKey(Schema.Number),
44
+ apiCode: Schema.optionalKey(Schema.String),
45
+ fields: Schema.optionalKey(Schema.Record(Schema.String, Schema.String)),
46
+ route: Schema.optionalKey(Schema.String),
47
+ retryAfterSeconds: Schema.optionalKey(Schema.Number)
48
+ }) {
49
+ [Runtime.errorReported] = alreadyReported;
50
+ get [Runtime.errorExitCode]() {
51
+ if (this.status === 401 || this.status === 403)
52
+ return 3;
53
+ if (this.status === 409)
54
+ return this.retryAfterSeconds === undefined ? 4 : 5;
55
+ if (this.status === 404)
56
+ return 6;
57
+ if (this.status === 400 || this.status === 422)
58
+ return 2;
59
+ return 5;
60
+ }
61
+ }
62
+ export class CliInputError extends Schema.TaggedError()("CliInputError", { message: Schema.String }) {
63
+ [Runtime.errorReported] = alreadyReported;
64
+ [Runtime.errorExitCode] = 2;
65
+ }
66
+ export class UpdateError extends Schema.TaggedError()("UpdateError", {
67
+ message: Schema.String,
68
+ code: Schema.Literals([
69
+ "UPDATE_CHECK_FAILED",
70
+ "UPDATE_NOT_PUBLISHED",
71
+ "UPDATE_UNSUPPORTED",
72
+ "UPDATE_FAILED"
73
+ ]),
74
+ command: Schema.optionalKey(Schema.String),
75
+ exitCode: Schema.optionalKey(Schema.Number)
76
+ }) {
77
+ [Runtime.errorReported] = alreadyReported;
78
+ get [Runtime.errorExitCode]() {
79
+ return this.code === "UPDATE_UNSUPPORTED" || this.code === "UPDATE_NOT_PUBLISHED" ? 2 : 5;
80
+ }
81
+ }
82
+ export const cliErrorCode = (error) => {
83
+ switch (error._tag) {
84
+ case "CliConfigError":
85
+ return "CONFIG_INVALID";
86
+ case "CliStorageError":
87
+ return "STORAGE_ERROR";
88
+ case "OAuthRequestError":
89
+ return error.oauthError === "invalid_grant"
90
+ ? "AUTH_REQUIRED"
91
+ : "OAUTH_ERROR";
92
+ case "OAuthCallbackError":
93
+ return "OAUTH_CALLBACK_ERROR";
94
+ case "BrowserOpenError":
95
+ return "BROWSER_OPEN_ERROR";
96
+ case "AuthRequiredError":
97
+ return "AUTH_REQUIRED";
98
+ case "RefreshLockError":
99
+ return "AUTH_BUSY";
100
+ case "ApiRequestError":
101
+ return apiErrorCode(error);
102
+ case "CliInputError":
103
+ return "INVALID_ARGUMENT";
104
+ case "UpdateError":
105
+ return error.code;
106
+ }
107
+ };
108
+ // Server codes are error class names (NotFoundError); the CLI reports one
109
+ // consistent style. The original server code stays in details.apiCode.
110
+ const apiErrorCode = (error) => {
111
+ if (isInProgress(error))
112
+ return "IN_PROGRESS";
113
+ switch (error.apiCode) {
114
+ case "ValidationError":
115
+ return "INVALID_ARGUMENT";
116
+ case "UnauthorizedError":
117
+ return "AUTH_REQUIRED";
118
+ case "ForbiddenError":
119
+ return "FORBIDDEN";
120
+ case "NotFoundError":
121
+ return "NOT_FOUND";
122
+ case "ConflictError":
123
+ return "CONFLICT";
124
+ case "RateLimitedError":
125
+ case "RATE_LIMITED":
126
+ return "RATE_LIMITED";
127
+ case "UpstreamError":
128
+ return "SERVICE_UNAVAILABLE";
129
+ }
130
+ switch (error.status) {
131
+ case 400:
132
+ case 422:
133
+ return "INVALID_ARGUMENT";
134
+ case 401:
135
+ return "AUTH_REQUIRED";
136
+ case 403:
137
+ return "FORBIDDEN";
138
+ case 404:
139
+ return "NOT_FOUND";
140
+ case 409:
141
+ return "CONFLICT";
142
+ case 429:
143
+ return "RATE_LIMITED";
144
+ case undefined:
145
+ return "NETWORK_ERROR";
146
+ default:
147
+ return "SERVICE_UNAVAILABLE";
148
+ }
149
+ };
150
+ // A 409 with a retry hint means the same idempotent write is still running;
151
+ // other conflicts (settled expense, reused key with a different request) are
152
+ // permanent and carry no hint.
153
+ const isInProgress = (error) => error.status === 409 && error.retryAfterSeconds !== undefined;
154
+ // OAuth errors a later identical request can get past: rate limiting,
155
+ // server-side failures, and the RFC 6749 temporary error codes.
156
+ const transientOAuthErrors = new Set(["server_error", "temporarily_unavailable"]);
157
+ // Whether repeating the same command (with the same idempotency key for
158
+ // writes) can succeed without changing anything else.
159
+ export const isRetryable = (error) => {
160
+ switch (error._tag) {
161
+ case "ApiRequestError":
162
+ return error.status === undefined ||
163
+ error.status === 429 ||
164
+ error.status >= 500 ||
165
+ isInProgress(error);
166
+ case "RefreshLockError":
167
+ return true;
168
+ case "OAuthRequestError":
169
+ // Check the HTTP status first: a rate-limited response carries a
170
+ // non-standard error string ("Rate limit exceeded") in oauthError.
171
+ if (error.status === 429 || (error.status !== undefined && error.status >= 500)) {
172
+ return true;
173
+ }
174
+ if (error.oauthError !== undefined)
175
+ return transientOAuthErrors.has(error.oauthError);
176
+ return error.status === undefined;
177
+ case "UpdateError":
178
+ return error.code === "UPDATE_CHECK_FAILED";
179
+ default:
180
+ return false;
181
+ }
182
+ };
183
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAExC,MAAM,eAAe,GAAG,KAAc,CAAA;AAEtC,MAAM,OAAO,cAAe,SAAQ,MAAM,CAAC,WAAW,EAAkB,CACtE,gBAAgB,EAChB;IACE,OAAO,EAAE,MAAM,CAAC,MAAM;CACvB,CACF;IACU,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,eAAe,CAAA;IACzC,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;CACrC;AAED,MAAM,OAAO,eAAgB,SAAQ,MAAM,CAAC,WAAW,EAAmB,CACxE,iBAAiB,EACjB,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,CAC3B;IACU,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,eAAe,CAAA;IACzC,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;CACrC;AAED,MAAM,OAAO,iBAAkB,SAAQ,MAAM,CAAC,WAAW,EAAqB,CAC5E,mBAAmB,EACnB;IACE,OAAO,EAAE,MAAM,CAAC,MAAM;IACtB,UAAU,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC;IAC7C,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC;CAC1C,CACF;IACU,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,eAAe,CAAA;IAClD,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,OAAO,IAAI,CAAC,UAAU,KAAK,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAC,CAAC;CACrF;AAED,MAAM,OAAO,kBAAmB,SAAQ,MAAM,CAAC,WAAW,EAAsB,CAC9E,oBAAoB,EACpB,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,CAC3B;IACU,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,eAAe,CAAA;IACzC,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;CACrC;AAED,MAAM,OAAO,gBAAiB,SAAQ,MAAM,CAAC,WAAW,EAAoB,CAC1E,kBAAkB,EAClB,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,CAC3B;IACU,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,eAAe,CAAA;IACzC,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;CACrC;AAED,MAAM,OAAO,iBAAkB,SAAQ,MAAM,CAAC,WAAW,EAAqB,CAC5E,mBAAmB,EACnB;IACE,OAAO,EAAE,MAAM,CAAC,MAAM;IACtB,2EAA2E;IAC3E,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;CACjE,CACF;IACU,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,eAAe,CAAA;IACzC,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;CACrC;AAED,MAAM,OAAO,gBAAiB,SAAQ,MAAM,CAAC,WAAW,EAAoB,CAC1E,kBAAkB,EAClB,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,CAC3B;IACU,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,eAAe,CAAA;IACzC,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;CACrC;AAED,MAAM,OAAO,eAAgB,SAAQ,MAAM,CAAC,WAAW,EAAmB,CACxE,iBAAiB,EACjB;IACE,OAAO,EAAE,MAAM,CAAC,MAAM;IACtB,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC;IACzC,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC;IAC1C,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACvE,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC;IACxC,iBAAiB,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC;CACrD,CACF;IACU,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,eAAe,CAAA;IAClD,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;QACzB,IAAI,IAAI,CAAC,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,MAAM,KAAK,GAAG;YAAE,OAAO,CAAC,CAAA;QACxD,IAAI,IAAI,CAAC,MAAM,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAC5E,IAAI,IAAI,CAAC,MAAM,KAAK,GAAG;YAAE,OAAO,CAAC,CAAA;QACjC,IAAI,IAAI,CAAC,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,MAAM,KAAK,GAAG;YAAE,OAAO,CAAC,CAAA;QACxD,OAAO,CAAC,CAAA;IACV,CAAC;CACF;AAED,MAAM,OAAO,aAAc,SAAQ,MAAM,CAAC,WAAW,EAAiB,CACpE,eAAe,EACf,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,CAC3B;IACU,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,eAAe,CAAA;IACzC,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;CACrC;AAED,MAAM,OAAO,WAAY,SAAQ,MAAM,CAAC,WAAW,EAAe,CAChE,aAAa,EACb;IACE,OAAO,EAAE,MAAM,CAAC,MAAM;IACtB,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC;QACpB,qBAAqB;QACrB,sBAAsB;QACtB,oBAAoB;QACpB,eAAe;KAChB,CAAC;IACF,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC;IAC1C,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC;CAC5C,CACF;IACU,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,eAAe,CAAA;IAClD,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;QACzB,OAAO,IAAI,CAAC,IAAI,KAAK,oBAAoB,IAAI,IAAI,CAAC,IAAI,KAAK,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC3F,CAAC;CACF;AAcD,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAuB,EAAU,EAAE;IAC9D,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,gBAAgB;YACnB,OAAO,gBAAgB,CAAA;QACzB,KAAK,iBAAiB;YACpB,OAAO,eAAe,CAAA;QACxB,KAAK,mBAAmB;YACtB,OAAO,KAAK,CAAC,UAAU,KAAK,eAAe;gBACzC,CAAC,CAAC,eAAe;gBACjB,CAAC,CAAC,aAAa,CAAA;QACnB,KAAK,oBAAoB;YACvB,OAAO,sBAAsB,CAAA;QAC/B,KAAK,kBAAkB;YACrB,OAAO,oBAAoB,CAAA;QAC7B,KAAK,mBAAmB;YACtB,OAAO,eAAe,CAAA;QACxB,KAAK,kBAAkB;YACrB,OAAO,WAAW,CAAA;QACpB,KAAK,iBAAiB;YACpB,OAAO,YAAY,CAAC,KAAK,CAAC,CAAA;QAC5B,KAAK,eAAe;YAClB,OAAO,kBAAkB,CAAA;QAC3B,KAAK,aAAa;YAChB,OAAO,KAAK,CAAC,IAAI,CAAA;IACrB,CAAC;AACH,CAAC,CAAA;AAED,0EAA0E;AAC1E,uEAAuE;AACvE,MAAM,YAAY,GAAG,CAAC,KAAsB,EAAU,EAAE;IACtD,IAAI,YAAY,CAAC,KAAK,CAAC;QAAE,OAAO,aAAa,CAAA;IAC7C,QAAQ,KAAK,CAAC,OAAO,EAAE,CAAC;QACtB,KAAK,iBAAiB;YACpB,OAAO,kBAAkB,CAAA;QAC3B,KAAK,mBAAmB;YACtB,OAAO,eAAe,CAAA;QACxB,KAAK,gBAAgB;YACnB,OAAO,WAAW,CAAA;QACpB,KAAK,eAAe;YAClB,OAAO,WAAW,CAAA;QACpB,KAAK,eAAe;YAClB,OAAO,UAAU,CAAA;QACnB,KAAK,kBAAkB,CAAC;QACxB,KAAK,cAAc;YACjB,OAAO,cAAc,CAAA;QACvB,KAAK,eAAe;YAClB,OAAO,qBAAqB,CAAA;IAChC,CAAC;IACD,QAAQ,KAAK,CAAC,MAAM,EAAE,CAAC;QACrB,KAAK,GAAG,CAAC;QACT,KAAK,GAAG;YACN,OAAO,kBAAkB,CAAA;QAC3B,KAAK,GAAG;YACN,OAAO,eAAe,CAAA;QACxB,KAAK,GAAG;YACN,OAAO,WAAW,CAAA;QACpB,KAAK,GAAG;YACN,OAAO,WAAW,CAAA;QACpB,KAAK,GAAG;YACN,OAAO,UAAU,CAAA;QACnB,KAAK,GAAG;YACN,OAAO,cAAc,CAAA;QACvB,KAAK,SAAS;YACZ,OAAO,eAAe,CAAA;QACxB;YACE,OAAO,qBAAqB,CAAA;IAChC,CAAC;AACH,CAAC,CAAA;AAED,4EAA4E;AAC5E,6EAA6E;AAC7E,+BAA+B;AAC/B,MAAM,YAAY,GAAG,CAAC,KAAsB,EAAW,EAAE,CACvD,KAAK,CAAC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,iBAAiB,KAAK,SAAS,CAAA;AAE/D,sEAAsE;AACtE,gEAAgE;AAChE,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,CAAC,cAAc,EAAE,yBAAyB,CAAC,CAAC,CAAA;AAEjF,wEAAwE;AACxE,sDAAsD;AACtD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAuB,EAAW,EAAE;IAC9D,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,iBAAiB;YACpB,OAAO,KAAK,CAAC,MAAM,KAAK,SAAS;gBAC/B,KAAK,CAAC,MAAM,KAAK,GAAG;gBACpB,KAAK,CAAC,MAAM,IAAI,GAAG;gBACnB,YAAY,CAAC,KAAK,CAAC,CAAA;QACvB,KAAK,kBAAkB;YACrB,OAAO,IAAI,CAAA;QACb,KAAK,mBAAmB;YACtB,iEAAiE;YACjE,mEAAmE;YACnE,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC,EAAE,CAAC;gBAChF,OAAO,IAAI,CAAA;YACb,CAAC;YACD,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS;gBAAE,OAAO,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;YACrF,OAAO,KAAK,CAAC,MAAM,KAAK,SAAS,CAAA;QACnC,KAAK,aAAa;YAChB,OAAO,KAAK,CAAC,IAAI,KAAK,qBAAqB,CAAA;QAC7C;YACE,OAAO,KAAK,CAAA;IAChB,CAAC;AACH,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,43 @@
1
+ #!/usr/bin/env node
2
+ import { NodeRuntime } from "@effect/platform-node";
3
+ import { Console, Effect } from "effect";
4
+ import { CliOutput, Command } from "effect/unstable/cli";
5
+ import { rootCommand } from "./command.js";
6
+ import { CliInputError } from "./errors.js";
7
+ import { Interaction } from "./interaction.js";
8
+ import { AppLayer } from "./layers.js";
9
+ import { printFailure } from "./output.js";
10
+ import { VERSION } from "./version.js";
11
+ const args = process.argv.slice(2);
12
+ const separator = args.indexOf("--");
13
+ const flags = separator < 0 ? args : args.slice(0, separator);
14
+ const json = flags.includes("--json") &&
15
+ !flags.includes("--help") && !flags.includes("-h");
16
+ // Effect's CLI runner renders help before it returns a parse error. In JSON
17
+ // mode, suppress only that rendering; command output still uses the real console.
18
+ const hiddenHelp = "\u0000allsquare-cli-parser-help\u0000";
19
+ const formatter = CliOutput.defaultFormatter();
20
+ const jsonFormatter = {
21
+ ...formatter,
22
+ formatHelpDoc: () => hiddenHelp
23
+ };
24
+ const jsonConsole = Object.assign(Object.create(console), {
25
+ log: (...values) => {
26
+ if (values.length === 1 && values[0] === hiddenHelp)
27
+ return;
28
+ console.log(...values);
29
+ }
30
+ });
31
+ const run = rootCommand.pipe(Command.run({ version: VERSION, renderErrors: !json }), Effect.catchTag("ShowHelp", (error) => {
32
+ if (error.errors.length === 0 && !json)
33
+ return Effect.void;
34
+ const message = error.errors.map((item) => item.message).join("; ");
35
+ const reason = message || "Missing command";
36
+ const failure = new CliInputError({ message: reason });
37
+ return json
38
+ ? printFailure({ code: "INVALID_ARGUMENT", message: reason, json: true }).pipe(Effect.andThen(Effect.fail(failure)))
39
+ : Effect.fail(failure);
40
+ }));
41
+ const program = run.pipe(Effect.provideService(CliOutput.Formatter, json ? jsonFormatter : formatter), Effect.provideService(Console.Console, json ? jsonConsole : console), Effect.provide(AppLayer), Effect.provide(Interaction.layer({ json })));
42
+ NodeRuntime.runMain(program);
43
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAExD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AAClC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;AACpC,MAAM,KAAK,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAA;AAC7D,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;IACnC,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;AAEpD,4EAA4E;AAC5E,kFAAkF;AAClF,MAAM,UAAU,GAAG,uCAAuC,CAAA;AAC1D,MAAM,SAAS,GAAG,SAAS,CAAC,gBAAgB,EAAE,CAAA;AAC9C,MAAM,aAAa,GAAG;IACpB,GAAG,SAAS;IACZ,aAAa,EAAE,GAAG,EAAE,CAAC,UAAU;CAChC,CAAA;AACD,MAAM,WAAW,GAAoB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;IACzE,GAAG,EAAE,CAAC,GAAG,MAA8B,EAAE,EAAE;QACzC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,UAAU;YAAE,OAAM;QAC3D,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAA;IACxB,CAAC;CACF,CAAC,CAAA;AAEF,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAC1B,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,IAAI,EAAE,CAAC,EACtD,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE;IACpC,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI;QAAE,OAAO,MAAM,CAAC,IAAI,CAAA;IAC1D,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACnE,MAAM,MAAM,GAAG,OAAO,IAAI,iBAAiB,CAAA;IAC3C,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAA;IACtD,OAAO,IAAI;QACT,CAAC,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAC1E,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CACrC;QACH,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AAC1B,CAAC,CAAC,CACH,CAAA;AAED,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CACtB,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,EAC5E,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,EACpE,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EACxB,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAC5C,CAAA;AAED,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA"}
@@ -0,0 +1,16 @@
1
+ import { Context, Layer } from "effect";
2
+ export declare const canPromptForLogin: (options: {
3
+ readonly json: boolean;
4
+ readonly stdinIsTTY: boolean;
5
+ readonly stderrIsTTY: boolean;
6
+ }) => boolean;
7
+ declare const Interaction_base: Context.ServiceClass<Interaction, "@allsquare/cli/Interaction", {
8
+ readonly canPromptForLogin: boolean;
9
+ }>;
10
+ export declare class Interaction extends Interaction_base {
11
+ static readonly layer: (options: {
12
+ readonly json: boolean;
13
+ }) => Layer.Layer<Interaction, never, never>;
14
+ }
15
+ export {};
16
+ //# sourceMappingURL=interaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interaction.d.ts","sourceRoot":"","sources":["../src/interaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAIvC,eAAO,MAAM,iBAAiB,GAAI,SAAS;IACzC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;IACtB,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAA;CAC9B,KAAG,OAAqE,CAAA;;gCAG3C,OAAO;;AADrC,qBAAa,WAAY,SAAQ,gBAEC;IAChC,MAAM,CAAC,QAAQ,CAAC,KAAK,GAAI,SAAS;QAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;KAAE,4CAUzD;CACJ"}
@@ -0,0 +1,14 @@
1
+ import { Context, Layer } from "effect";
2
+ // Scripts, agents, and --json callers need an immediate AUTH_REQUIRED failure,
3
+ // not a command that pauses for up to five minutes waiting on browser consent.
4
+ export const canPromptForLogin = (options) => !options.json && options.stdinIsTTY && options.stderrIsTTY;
5
+ export class Interaction extends Context.Service()("@allsquare/cli/Interaction") {
6
+ static layer = (options) => Layer.succeed(Interaction, Interaction.of({
7
+ canPromptForLogin: canPromptForLogin({
8
+ json: options.json,
9
+ stdinIsTTY: process.stdin.isTTY === true,
10
+ stderrIsTTY: process.stderr.isTTY === true
11
+ })
12
+ }));
13
+ }
14
+ //# sourceMappingURL=interaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interaction.js","sourceRoot":"","sources":["../src/interaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAEvC,+EAA+E;AAC/E,+EAA+E;AAC/E,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,OAIjC,EAAW,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,WAAW,CAAA;AAEzE,MAAM,OAAO,WAAY,SAAQ,OAAO,CAAC,OAAO,EAE5C,CAAC,4BAA4B,CAAC;IAChC,MAAM,CAAU,KAAK,GAAG,CAAC,OAAmC,EAAE,EAAE,CAC9D,KAAK,CAAC,OAAO,CACX,WAAW,EACX,WAAW,CAAC,EAAE,CAAC;QACb,iBAAiB,EAAE,iBAAiB,CAAC;YACnC,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI;YACxC,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI;SAC3C,CAAC;KACH,CAAC,CACH,CAAA"}
@@ -0,0 +1,13 @@
1
+ import { NodeServices } from "@effect/platform-node";
2
+ import { Layer } from "effect";
3
+ import { ApiClient } from "./api/client.js";
4
+ import { AuthService } from "./auth/auth-service.js";
5
+ import { BrowserLauncher } from "./auth/browser.js";
6
+ import { CredentialStore } from "./auth/credential-store.js";
7
+ import { InstallationStore } from "./auth/installation-store.js";
8
+ import { AuthorizationCallback } from "./auth/oauth-callback.js";
9
+ import { OAuthClient } from "./auth/oauth-client.js";
10
+ import { CliConfig } from "./config.js";
11
+ import { UpdateService } from "./update/update-service.js";
12
+ export declare const AppLayer: Layer.Layer<CliConfig | BrowserLauncher | CredentialStore | InstallationStore | OAuthClient | import("effect/unstable/http/HttpClient").HttpClient | AuthorizationCallback | NodeServices.NodeServices | AuthService | ApiClient | UpdateService, import("effect/Config").ConfigError, import("./interaction.js").Interaction>;
13
+ //# sourceMappingURL=layers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layers.d.ts","sourceRoot":"","sources":["../src/layers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAG9B,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAoB1D,eAAO,MAAM,QAAQ,gUAKpB,CAAA"}
package/dist/layers.js ADDED
@@ -0,0 +1,17 @@
1
+ import { NodeServices } from "@effect/platform-node";
2
+ import { Layer } from "effect";
3
+ import { FetchHttpClient } from "effect/unstable/http";
4
+ import { ApiClient } from "./api/client.js";
5
+ import { AuthService } from "./auth/auth-service.js";
6
+ import { BrowserLauncher } from "./auth/browser.js";
7
+ import { CredentialStore } from "./auth/credential-store.js";
8
+ import { InstallationStore } from "./auth/installation-store.js";
9
+ import { AuthorizationCallback } from "./auth/oauth-callback.js";
10
+ import { OAuthClient } from "./auth/oauth-client.js";
11
+ import { CliConfig } from "./config.js";
12
+ import { UpdateService } from "./update/update-service.js";
13
+ const infrastructure = Layer.mergeAll(NodeServices.layer, CliConfig.layer, FetchHttpClient.layer);
14
+ const authDependencies = Layer.mergeAll(BrowserLauncher.layer, AuthorizationCallback.layer, CredentialStore.layer, InstallationStore.layer, OAuthClient.layer).pipe(Layer.provideMerge(infrastructure));
15
+ const auth = AuthService.layer.pipe(Layer.provideMerge(authDependencies));
16
+ export const AppLayer = Layer.mergeAll(ApiClient.layer, UpdateService.layer).pipe(Layer.provideMerge(auth));
17
+ //# sourceMappingURL=layers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layers.js","sourceRoot":"","sources":["../src/layers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC9B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAEtD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAE1D,MAAM,cAAc,GAAG,KAAK,CAAC,QAAQ,CACnC,YAAY,CAAC,KAAK,EAClB,SAAS,CAAC,KAAK,EACf,eAAe,CAAC,KAAK,CACtB,CAAA;AAED,MAAM,gBAAgB,GAAG,KAAK,CAAC,QAAQ,CACrC,eAAe,CAAC,KAAK,EACrB,qBAAqB,CAAC,KAAK,EAC3B,eAAe,CAAC,KAAK,EACrB,iBAAiB,CAAC,KAAK,EACvB,WAAW,CAAC,KAAK,CAClB,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,CAAA;AAE1C,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CACjC,KAAK,CAAC,YAAY,CAAC,gBAAgB,CAAC,CACrC,CAAA;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CACpC,SAAS,CAAC,KAAK,EACf,aAAa,CAAC,KAAK,CACpB,CAAC,IAAI,CACJ,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CACzB,CAAA"}
@@ -0,0 +1,31 @@
1
+ import { Effect } from "effect";
2
+ export interface JsonSuccess<T> {
3
+ readonly ok: true;
4
+ readonly data: T;
5
+ readonly replayed?: true;
6
+ }
7
+ export interface JsonFailure {
8
+ readonly ok: false;
9
+ readonly error: {
10
+ readonly code: string;
11
+ readonly message: string;
12
+ readonly retryable: boolean;
13
+ readonly details?: unknown;
14
+ };
15
+ }
16
+ export type JsonOutput<T> = JsonSuccess<T> | JsonFailure;
17
+ export declare const formatTable: (headers: ReadonlyArray<string>, rows: ReadonlyArray<ReadonlyArray<string>>) => string;
18
+ export declare const printSuccess: <T>(options: {
19
+ readonly data: T;
20
+ readonly json: boolean;
21
+ readonly renderHuman: (data: T) => string;
22
+ readonly replayed?: boolean;
23
+ }) => Effect.Effect<void>;
24
+ export declare const printFailure: (options: {
25
+ readonly code: string;
26
+ readonly message: string;
27
+ readonly retryable?: boolean;
28
+ readonly details?: unknown;
29
+ readonly json: boolean;
30
+ }) => Effect.Effect<void>;
31
+ //# sourceMappingURL=output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,MAAM,EAAE,MAAM,QAAQ,CAAA;AAExC,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAA;IACjB,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;IAChB,QAAQ,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAA;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAA;IAClB,QAAQ,CAAC,KAAK,EAAE;QACd,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;QACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;QACxB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;QAC3B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAC3B,CAAA;CACF;AAED,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW,CAAA;AAExD,eAAO,MAAM,WAAW,GACtB,SAAS,aAAa,CAAC,MAAM,CAAC,EAC9B,MAAM,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,KACzC,MAUF,CAAA;AAKD,eAAO,MAAM,YAAY,GAAI,CAAC,EAAE,SAAS;IACvC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;IAChB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;IACtB,QAAQ,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAA;IACzC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAC5B,KAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CASf,CAAA;AAEP,eAAO,MAAM,YAAY,GAAI,SAAS;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CACvB,KAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAarB,CAAA"}
package/dist/output.js ADDED
@@ -0,0 +1,26 @@
1
+ import { Console, Effect } from "effect";
2
+ export const formatTable = (headers, rows) => {
3
+ const widths = headers.map((header, index) => Math.max(header.length, ...rows.map((row) => row[index]?.length ?? 0)));
4
+ const line = (values) => values.map((value, index) => value.padEnd(widths[index] ?? value.length)).join(" ").trimEnd();
5
+ return [line(headers), line(widths.map((width) => "-".repeat(width))), ...rows.map(line)].join("\n");
6
+ };
7
+ const replayNotice = "Nothing new was written: this is the saved result of an earlier request with the same idempotency key.";
8
+ export const printSuccess = (options) => options.json
9
+ ? Console.log(JSON.stringify({
10
+ ok: true,
11
+ data: options.data,
12
+ ...(options.replayed ? { replayed: true } : {})
13
+ }))
14
+ : Console.log(options.renderHuman(options.data)).pipe(Effect.andThen(options.replayed ? Console.error(replayNotice) : Effect.void));
15
+ export const printFailure = (options) => {
16
+ const error = {
17
+ code: options.code,
18
+ message: options.message,
19
+ retryable: options.retryable ?? false,
20
+ ...(options.details === undefined ? {} : { details: options.details })
21
+ };
22
+ return Console.error(options.json
23
+ ? JSON.stringify({ ok: false, error })
24
+ : `Error: ${options.message}`);
25
+ };
26
+ //# sourceMappingURL=output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAoBxC,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,OAA8B,EAC9B,IAA0C,EAClC,EAAE;IACV,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAC3C,IAAI,CAAC,GAAG,CACN,MAAM,CAAC,MAAM,EACb,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,CAC9C,CAAC,CAAA;IACJ,MAAM,IAAI,GAAG,CAAC,MAA6B,EAAE,EAAE,CAC7C,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAA;IAEhG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACtG,CAAC,CAAA;AAED,MAAM,YAAY,GAChB,wGAAwG,CAAA;AAE1G,MAAM,CAAC,MAAM,YAAY,GAAG,CAAI,OAK/B,EAAuB,EAAE,CACxB,OAAO,CAAC,IAAI;IACV,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;QACzB,EAAE,EAAE,IAAI;QACR,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAChC,CAAC,CAAC;IAC9B,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CACjD,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAC7E,CAAA;AAEP,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,OAM5B,EAAuB,EAAE;IACxB,MAAM,KAAK,GAAG;QACZ,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,KAAK;QACrC,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;KACvE,CAAA;IAED,OAAO,OAAO,CAAC,KAAK,CAClB,OAAO,CAAC,IAAI;QACV,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAwB,CAAC;QAC5D,CAAC,CAAC,UAAU,OAAO,CAAC,OAAO,EAAE,CAChC,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,41 @@
1
+ import { Context, Effect, Layer } from "effect";
2
+ import { HttpClient } from "effect/unstable/http";
3
+ import { ChildProcessSpawner } from "effect/unstable/process";
4
+ import { UpdateError } from "../errors.js";
5
+ import { PACKAGE_NAME } from "../version.js";
6
+ export type InstallationMethod = "npm-global" | "pnpm-global" | "yarn-global" | "bun-global" | "ephemeral" | "local-package" | "source" | "unknown";
7
+ export interface InstallationInfo {
8
+ readonly method: InstallationMethod;
9
+ readonly automaticUpdateSupported: boolean;
10
+ readonly updateCommand: string | null;
11
+ readonly guidance: string;
12
+ }
13
+ export interface UpdateStatus {
14
+ readonly packageName: typeof PACKAGE_NAME;
15
+ readonly currentVersion: string;
16
+ readonly latestVersion: string;
17
+ readonly updateAvailable: boolean;
18
+ readonly installation: InstallationInfo;
19
+ }
20
+ export interface UpdateResult extends UpdateStatus {
21
+ readonly updated: boolean;
22
+ }
23
+ export interface UpdateCommandSpec {
24
+ readonly executable: string;
25
+ readonly args: ReadonlyArray<string>;
26
+ readonly display: string;
27
+ }
28
+ export declare const updateCommandSpec: (method: InstallationMethod) => UpdateCommandSpec | null;
29
+ export declare const detectInstallation: (modulePath: string) => InstallationInfo;
30
+ export declare const compareSemver: (leftValue: string, rightValue: string) => -1 | 0 | 1 | null;
31
+ declare const UpdateService_base: Context.ServiceClass<UpdateService, "@allsquare/cli/UpdateService", {
32
+ readonly check: Effect.Effect<UpdateStatus, UpdateError>;
33
+ readonly install: (status: UpdateStatus, options: {
34
+ readonly captureOutput: boolean;
35
+ }) => Effect.Effect<void, UpdateError>;
36
+ }>;
37
+ export declare class UpdateService extends UpdateService_base {
38
+ static readonly layer: Layer.Layer<UpdateService, never, ChildProcessSpawner.ChildProcessSpawner | HttpClient.HttpClient>;
39
+ }
40
+ export {};
41
+ //# sourceMappingURL=update-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-service.d.ts","sourceRoot":"","sources":["../../src/update/update-service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAkB,MAAM,QAAQ,CAAA;AAC/D,OAAO,EACL,UAAU,EAGX,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAEL,mBAAmB,EACpB,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,EAAE,YAAY,EAAW,MAAM,eAAe,CAAA;AAErD,MAAM,MAAM,kBAAkB,GAC1B,YAAY,GACZ,aAAa,GACb,aAAa,GACb,YAAY,GACZ,WAAW,GACX,eAAe,GACf,QAAQ,GACR,SAAS,CAAA;AAEb,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAA;IACnC,QAAQ,CAAC,wBAAwB,EAAE,OAAO,CAAA;IAC1C,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,WAAW,EAAE,OAAO,YAAY,CAAA;IACzC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAA;IACjC,QAAQ,CAAC,YAAY,EAAE,gBAAgB,CAAA;CACxC;AAED,MAAM,WAAW,YAAa,SAAQ,YAAY;IAChD,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB;AASD,eAAO,MAAM,iBAAiB,GAC5B,QAAQ,kBAAkB,KACzB,iBAAiB,GAAG,IA6BtB,CAAA;AAwDD,eAAO,MAAM,kBAAkB,GAAI,YAAY,MAAM,KAAG,gBA2BvD,CAAA;AAiDD,eAAO,MAAM,aAAa,GACxB,WAAW,MAAM,EACjB,YAAY,MAAM,KACjB,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IASf,CAAA;;oBASiB,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,WAAW,CAAC;sBACtC,CAChB,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE;QAAE,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAA;KAAE,KACzC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC;;AALvC,qBAAa,aAAc,SAAQ,kBAMC;IAClC,MAAM,CAAC,QAAQ,CAAC,KAAK,qGAwHpB;CACF"}