skyboard-cli 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/dist/__tests__/auth-state.test.d.ts +1 -0
  2. package/dist/__tests__/auth-state.test.js +86 -0
  3. package/dist/__tests__/auth-state.test.js.map +1 -0
  4. package/dist/__tests__/card-ref.test.d.ts +1 -0
  5. package/dist/__tests__/card-ref.test.js +36 -0
  6. package/dist/__tests__/card-ref.test.js.map +1 -0
  7. package/dist/__tests__/column-match.test.d.ts +1 -0
  8. package/dist/__tests__/column-match.test.js +49 -0
  9. package/dist/__tests__/column-match.test.js.map +1 -0
  10. package/dist/__tests__/commands.test.d.ts +1 -0
  11. package/dist/__tests__/commands.test.js +243 -0
  12. package/dist/__tests__/commands.test.js.map +1 -0
  13. package/dist/__tests__/helpers.d.ts +50 -0
  14. package/dist/__tests__/helpers.js +135 -0
  15. package/dist/__tests__/helpers.js.map +1 -0
  16. package/dist/__tests__/materialize.test.d.ts +1 -0
  17. package/dist/__tests__/materialize.test.js +186 -0
  18. package/dist/__tests__/materialize.test.js.map +1 -0
  19. package/dist/__tests__/pds.test.d.ts +1 -0
  20. package/dist/__tests__/pds.test.js +172 -0
  21. package/dist/__tests__/pds.test.js.map +1 -0
  22. package/dist/commands/add.d.ts +1 -0
  23. package/dist/commands/add.js +41 -0
  24. package/dist/commands/add.js.map +1 -0
  25. package/dist/commands/boards.d.ts +3 -0
  26. package/dist/commands/boards.js +54 -0
  27. package/dist/commands/boards.js.map +1 -0
  28. package/dist/commands/cards.d.ts +7 -0
  29. package/dist/commands/cards.js +54 -0
  30. package/dist/commands/cards.js.map +1 -0
  31. package/dist/commands/cols.d.ts +4 -0
  32. package/dist/commands/cols.js +44 -0
  33. package/dist/commands/cols.js.map +1 -0
  34. package/dist/commands/comment.d.ts +4 -0
  35. package/dist/commands/comment.js +55 -0
  36. package/dist/commands/comment.js.map +1 -0
  37. package/dist/commands/edit.d.ts +7 -0
  38. package/dist/commands/edit.js +80 -0
  39. package/dist/commands/edit.js.map +1 -0
  40. package/dist/commands/login.d.ts +1 -0
  41. package/dist/commands/login.js +20 -0
  42. package/dist/commands/login.js.map +1 -0
  43. package/dist/commands/logout.d.ts +1 -0
  44. package/dist/commands/logout.js +14 -0
  45. package/dist/commands/logout.js.map +1 -0
  46. package/dist/commands/mv.d.ts +4 -0
  47. package/dist/commands/mv.js +74 -0
  48. package/dist/commands/mv.js.map +1 -0
  49. package/dist/commands/new.d.ts +6 -0
  50. package/dist/commands/new.js +72 -0
  51. package/dist/commands/new.js.map +1 -0
  52. package/dist/commands/rm.d.ts +5 -0
  53. package/dist/commands/rm.js +67 -0
  54. package/dist/commands/rm.js.map +1 -0
  55. package/dist/commands/show.d.ts +4 -0
  56. package/dist/commands/show.js +90 -0
  57. package/dist/commands/show.js.map +1 -0
  58. package/dist/commands/status.d.ts +3 -0
  59. package/dist/commands/status.js +71 -0
  60. package/dist/commands/status.js.map +1 -0
  61. package/dist/commands/use.d.ts +1 -0
  62. package/dist/commands/use.js +61 -0
  63. package/dist/commands/use.js.map +1 -0
  64. package/dist/commands/whoami.d.ts +3 -0
  65. package/dist/commands/whoami.js +23 -0
  66. package/dist/commands/whoami.js.map +1 -0
  67. package/dist/index.d.ts +2 -0
  68. package/dist/index.js +126 -0
  69. package/dist/index.js.map +1 -0
  70. package/dist/lib/auth.d.ts +28 -0
  71. package/dist/lib/auth.js +219 -0
  72. package/dist/lib/auth.js.map +1 -0
  73. package/dist/lib/card-ref.d.ts +7 -0
  74. package/dist/lib/card-ref.js +23 -0
  75. package/dist/lib/card-ref.js.map +1 -0
  76. package/dist/lib/column-match.d.ts +6 -0
  77. package/dist/lib/column-match.js +35 -0
  78. package/dist/lib/column-match.js.map +1 -0
  79. package/dist/lib/config.d.ts +32 -0
  80. package/dist/lib/config.js +153 -0
  81. package/dist/lib/config.js.map +1 -0
  82. package/dist/lib/display.d.ts +11 -0
  83. package/dist/lib/display.js +97 -0
  84. package/dist/lib/display.js.map +1 -0
  85. package/dist/lib/materialize.d.ts +2 -0
  86. package/dist/lib/materialize.js +111 -0
  87. package/dist/lib/materialize.js.map +1 -0
  88. package/dist/lib/pds.d.ts +48 -0
  89. package/dist/lib/pds.js +355 -0
  90. package/dist/lib/pds.js.map +1 -0
  91. package/dist/lib/permissions.d.ts +4 -0
  92. package/dist/lib/permissions.js +13 -0
  93. package/dist/lib/permissions.js.map +1 -0
  94. package/dist/lib/schemas.d.ts +209 -0
  95. package/dist/lib/schemas.js +82 -0
  96. package/dist/lib/schemas.js.map +1 -0
  97. package/dist/lib/tid.d.ts +9 -0
  98. package/{src/lib/tid.ts → dist/lib/tid.js} +5 -11
  99. package/dist/lib/tid.js.map +1 -0
  100. package/dist/lib/types.d.ts +129 -0
  101. package/dist/lib/types.js +3 -0
  102. package/dist/lib/types.js.map +1 -0
  103. package/package.json +6 -2
  104. package/src/__tests__/auth-state.test.ts +0 -111
  105. package/src/__tests__/card-ref.test.ts +0 -42
  106. package/src/__tests__/column-match.test.ts +0 -57
  107. package/src/__tests__/commands.test.ts +0 -326
  108. package/src/__tests__/helpers.ts +0 -154
  109. package/src/__tests__/materialize.test.ts +0 -257
  110. package/src/__tests__/pds.test.ts +0 -213
  111. package/src/commands/add.ts +0 -47
  112. package/src/commands/boards.ts +0 -64
  113. package/src/commands/cards.ts +0 -65
  114. package/src/commands/cols.ts +0 -51
  115. package/src/commands/comment.ts +0 -64
  116. package/src/commands/edit.ts +0 -89
  117. package/src/commands/login.ts +0 -19
  118. package/src/commands/logout.ts +0 -14
  119. package/src/commands/mv.ts +0 -84
  120. package/src/commands/new.ts +0 -80
  121. package/src/commands/rm.ts +0 -79
  122. package/src/commands/show.ts +0 -100
  123. package/src/commands/status.ts +0 -78
  124. package/src/commands/use.ts +0 -72
  125. package/src/commands/whoami.ts +0 -22
  126. package/src/index.ts +0 -143
  127. package/src/lib/auth.ts +0 -244
  128. package/src/lib/card-ref.ts +0 -32
  129. package/src/lib/column-match.ts +0 -45
  130. package/src/lib/config.ts +0 -182
  131. package/src/lib/display.ts +0 -112
  132. package/src/lib/materialize.ts +0 -138
  133. package/src/lib/pds.ts +0 -440
  134. package/src/lib/permissions.ts +0 -28
  135. package/src/lib/schemas.ts +0 -97
  136. package/src/lib/types.ts +0 -144
  137. package/tsconfig.json +0 -15
  138. package/vitest.config.ts +0 -7
@@ -0,0 +1,209 @@
1
+ import { z } from "zod";
2
+ export declare const BoardRecordSchema: z.ZodObject<{
3
+ name: z.ZodString;
4
+ description: z.ZodOptional<z.ZodString>;
5
+ columns: z.ZodArray<z.ZodObject<{
6
+ id: z.ZodString;
7
+ name: z.ZodString;
8
+ order: z.ZodNumber;
9
+ }, "strip", z.ZodTypeAny, {
10
+ id: string;
11
+ name: string;
12
+ order: number;
13
+ }, {
14
+ id: string;
15
+ name: string;
16
+ order: number;
17
+ }>, "many">;
18
+ labels: z.ZodOptional<z.ZodArray<z.ZodObject<{
19
+ id: z.ZodString;
20
+ name: z.ZodString;
21
+ color: z.ZodString;
22
+ description: z.ZodOptional<z.ZodString>;
23
+ }, "strip", z.ZodTypeAny, {
24
+ id: string;
25
+ name: string;
26
+ color: string;
27
+ description?: string | undefined;
28
+ }, {
29
+ id: string;
30
+ name: string;
31
+ color: string;
32
+ description?: string | undefined;
33
+ }>, "many">>;
34
+ open: z.ZodOptional<z.ZodBoolean>;
35
+ createdAt: z.ZodString;
36
+ }, "strip", z.ZodTypeAny, {
37
+ name: string;
38
+ columns: {
39
+ id: string;
40
+ name: string;
41
+ order: number;
42
+ }[];
43
+ createdAt: string;
44
+ open?: boolean | undefined;
45
+ description?: string | undefined;
46
+ labels?: {
47
+ id: string;
48
+ name: string;
49
+ color: string;
50
+ description?: string | undefined;
51
+ }[] | undefined;
52
+ }, {
53
+ name: string;
54
+ columns: {
55
+ id: string;
56
+ name: string;
57
+ order: number;
58
+ }[];
59
+ createdAt: string;
60
+ open?: boolean | undefined;
61
+ description?: string | undefined;
62
+ labels?: {
63
+ id: string;
64
+ name: string;
65
+ color: string;
66
+ description?: string | undefined;
67
+ }[] | undefined;
68
+ }>;
69
+ export declare const TaskRecordSchema: z.ZodObject<{
70
+ title: z.ZodString;
71
+ description: z.ZodOptional<z.ZodString>;
72
+ columnId: z.ZodString;
73
+ boardUri: z.ZodString;
74
+ position: z.ZodOptional<z.ZodString>;
75
+ labelIds: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
76
+ order: z.ZodOptional<z.ZodNumber>;
77
+ createdAt: z.ZodString;
78
+ updatedAt: z.ZodOptional<z.ZodString>;
79
+ }, "strip", z.ZodTypeAny, {
80
+ createdAt: string;
81
+ title: string;
82
+ columnId: string;
83
+ boardUri: string;
84
+ order?: number | undefined;
85
+ description?: string | undefined;
86
+ position?: string | undefined;
87
+ labelIds?: string[] | undefined;
88
+ updatedAt?: string | undefined;
89
+ }, {
90
+ createdAt: string;
91
+ title: string;
92
+ columnId: string;
93
+ boardUri: string;
94
+ order?: number | undefined;
95
+ description?: string | undefined;
96
+ position?: string | undefined;
97
+ labelIds?: string[] | undefined;
98
+ updatedAt?: string | undefined;
99
+ }>;
100
+ export declare const OpRecordSchema: z.ZodObject<{
101
+ targetTaskUri: z.ZodString;
102
+ boardUri: z.ZodString;
103
+ fields: z.ZodObject<{
104
+ title: z.ZodOptional<z.ZodString>;
105
+ description: z.ZodOptional<z.ZodString>;
106
+ columnId: z.ZodOptional<z.ZodString>;
107
+ position: z.ZodOptional<z.ZodString>;
108
+ labelIds: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
109
+ order: z.ZodOptional<z.ZodNumber>;
110
+ }, "strip", z.ZodTypeAny, {
111
+ order?: number | undefined;
112
+ description?: string | undefined;
113
+ title?: string | undefined;
114
+ columnId?: string | undefined;
115
+ position?: string | undefined;
116
+ labelIds?: string[] | undefined;
117
+ }, {
118
+ order?: number | undefined;
119
+ description?: string | undefined;
120
+ title?: string | undefined;
121
+ columnId?: string | undefined;
122
+ position?: string | undefined;
123
+ labelIds?: string[] | undefined;
124
+ }>;
125
+ createdAt: z.ZodString;
126
+ }, "strip", z.ZodTypeAny, {
127
+ createdAt: string;
128
+ boardUri: string;
129
+ targetTaskUri: string;
130
+ fields: {
131
+ order?: number | undefined;
132
+ description?: string | undefined;
133
+ title?: string | undefined;
134
+ columnId?: string | undefined;
135
+ position?: string | undefined;
136
+ labelIds?: string[] | undefined;
137
+ };
138
+ }, {
139
+ createdAt: string;
140
+ boardUri: string;
141
+ targetTaskUri: string;
142
+ fields: {
143
+ order?: number | undefined;
144
+ description?: string | undefined;
145
+ title?: string | undefined;
146
+ columnId?: string | undefined;
147
+ position?: string | undefined;
148
+ labelIds?: string[] | undefined;
149
+ };
150
+ }>;
151
+ export declare const TrustRecordSchema: z.ZodObject<{
152
+ trustedDid: z.ZodString;
153
+ boardUri: z.ZodString;
154
+ createdAt: z.ZodString;
155
+ }, "strip", z.ZodTypeAny, {
156
+ createdAt: string;
157
+ boardUri: string;
158
+ trustedDid: string;
159
+ }, {
160
+ createdAt: string;
161
+ boardUri: string;
162
+ trustedDid: string;
163
+ }>;
164
+ export declare const CommentRecordSchema: z.ZodObject<{
165
+ targetTaskUri: z.ZodString;
166
+ boardUri: z.ZodString;
167
+ text: z.ZodString;
168
+ createdAt: z.ZodString;
169
+ }, "strip", z.ZodTypeAny, {
170
+ createdAt: string;
171
+ boardUri: string;
172
+ targetTaskUri: string;
173
+ text: string;
174
+ }, {
175
+ createdAt: string;
176
+ boardUri: string;
177
+ targetTaskUri: string;
178
+ text: string;
179
+ }>;
180
+ export declare const ApprovalRecordSchema: z.ZodObject<{
181
+ targetUri: z.ZodString;
182
+ boardUri: z.ZodString;
183
+ createdAt: z.ZodString;
184
+ }, "strip", z.ZodTypeAny, {
185
+ createdAt: string;
186
+ boardUri: string;
187
+ targetUri: string;
188
+ }, {
189
+ createdAt: string;
190
+ boardUri: string;
191
+ targetUri: string;
192
+ }>;
193
+ export declare const ReactionRecordSchema: z.ZodObject<{
194
+ targetTaskUri: z.ZodString;
195
+ boardUri: z.ZodString;
196
+ emoji: z.ZodString;
197
+ createdAt: z.ZodString;
198
+ }, "strip", z.ZodTypeAny, {
199
+ createdAt: string;
200
+ boardUri: string;
201
+ targetTaskUri: string;
202
+ emoji: string;
203
+ }, {
204
+ createdAt: string;
205
+ boardUri: string;
206
+ targetTaskUri: string;
207
+ emoji: string;
208
+ }>;
209
+ export declare function safeParse<T>(schema: z.ZodType<T>, data: unknown, label: string): T | null;
@@ -0,0 +1,82 @@
1
+ // Synced from ../src/lib/schemas.ts
2
+ import { z } from "zod";
3
+ const MAX_STRING = 50_000;
4
+ const MAX_EMOJI = 32;
5
+ const MAX_COLUMNS = 100;
6
+ const MAX_LABELS = 200;
7
+ const MAX_LABEL_IDS = 200;
8
+ const MAX_ORDER = 10_000;
9
+ const ColumnSchema = z.object({
10
+ id: z.string().max(MAX_STRING),
11
+ name: z.string().max(MAX_STRING),
12
+ order: z.number(),
13
+ });
14
+ const LabelSchema = z.object({
15
+ id: z.string().max(MAX_STRING),
16
+ name: z.string().max(MAX_STRING),
17
+ color: z.string().max(MAX_STRING),
18
+ description: z.string().max(MAX_STRING).optional(),
19
+ });
20
+ export const BoardRecordSchema = z.object({
21
+ name: z.string().max(MAX_STRING),
22
+ description: z.string().max(MAX_STRING).optional(),
23
+ columns: z.array(ColumnSchema).max(MAX_COLUMNS),
24
+ labels: z.array(LabelSchema).max(MAX_LABELS).optional(),
25
+ open: z.boolean().optional(),
26
+ createdAt: z.string().max(MAX_STRING),
27
+ });
28
+ export const TaskRecordSchema = z.object({
29
+ title: z.string().max(MAX_STRING),
30
+ description: z.string().max(MAX_STRING).optional(),
31
+ columnId: z.string().max(MAX_STRING),
32
+ boardUri: z.string().max(MAX_STRING),
33
+ position: z.string().max(MAX_STRING).optional(),
34
+ labelIds: z.array(z.string().max(MAX_STRING)).max(MAX_LABEL_IDS).optional(),
35
+ order: z.number().int().min(0).max(MAX_ORDER).optional(),
36
+ createdAt: z.string().max(MAX_STRING),
37
+ updatedAt: z.string().max(MAX_STRING).optional(),
38
+ });
39
+ const OpFieldsSchema = z.object({
40
+ title: z.string().max(MAX_STRING).optional(),
41
+ description: z.string().max(MAX_STRING).optional(),
42
+ columnId: z.string().max(MAX_STRING).optional(),
43
+ position: z.string().max(MAX_STRING).optional(),
44
+ labelIds: z.array(z.string().max(MAX_STRING)).max(MAX_LABEL_IDS).optional(),
45
+ order: z.number().int().min(0).max(MAX_ORDER).optional(),
46
+ });
47
+ export const OpRecordSchema = z.object({
48
+ targetTaskUri: z.string().max(MAX_STRING),
49
+ boardUri: z.string().max(MAX_STRING),
50
+ fields: OpFieldsSchema,
51
+ createdAt: z.string().max(MAX_STRING),
52
+ });
53
+ export const TrustRecordSchema = z.object({
54
+ trustedDid: z.string().max(MAX_STRING),
55
+ boardUri: z.string().max(MAX_STRING),
56
+ createdAt: z.string().max(MAX_STRING),
57
+ });
58
+ export const CommentRecordSchema = z.object({
59
+ targetTaskUri: z.string().max(MAX_STRING),
60
+ boardUri: z.string().max(MAX_STRING),
61
+ text: z.string().max(MAX_STRING),
62
+ createdAt: z.string().max(MAX_STRING),
63
+ });
64
+ export const ApprovalRecordSchema = z.object({
65
+ targetUri: z.string().max(MAX_STRING),
66
+ boardUri: z.string().max(MAX_STRING),
67
+ createdAt: z.string().max(MAX_STRING),
68
+ });
69
+ export const ReactionRecordSchema = z.object({
70
+ targetTaskUri: z.string().max(MAX_STRING),
71
+ boardUri: z.string().max(MAX_STRING),
72
+ emoji: z.string().max(MAX_EMOJI),
73
+ createdAt: z.string().max(MAX_STRING),
74
+ });
75
+ export function safeParse(schema, data, label) {
76
+ const result = schema.safeParse(data);
77
+ if (!result.success) {
78
+ return null;
79
+ }
80
+ return result.data;
81
+ }
82
+ //# sourceMappingURL=schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/lib/schemas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export declare const BOARD_COLLECTION = "dev.skyboard.board";
2
+ export declare const TASK_COLLECTION = "dev.skyboard.task";
3
+ export declare const OP_COLLECTION = "dev.skyboard.op";
4
+ export declare const TRUST_COLLECTION = "dev.skyboard.trust";
5
+ export declare const COMMENT_COLLECTION = "dev.skyboard.comment";
6
+ export declare const APPROVAL_COLLECTION = "dev.skyboard.approval";
7
+ export declare const REACTION_COLLECTION = "dev.skyboard.reaction";
8
+ export declare function generateTID(): string;
9
+ export declare function buildAtUri(did: string, collection: string, rkey: string): string;
@@ -1,6 +1,5 @@
1
1
  // Synced from ../src/lib/tid.ts
2
2
  import { TID } from "@atproto/common-web";
3
-
4
3
  export const BOARD_COLLECTION = "dev.skyboard.board";
5
4
  export const TASK_COLLECTION = "dev.skyboard.task";
6
5
  export const OP_COLLECTION = "dev.skyboard.op";
@@ -8,15 +7,10 @@ export const TRUST_COLLECTION = "dev.skyboard.trust";
8
7
  export const COMMENT_COLLECTION = "dev.skyboard.comment";
9
8
  export const APPROVAL_COLLECTION = "dev.skyboard.approval";
10
9
  export const REACTION_COLLECTION = "dev.skyboard.reaction";
11
-
12
- export function generateTID(): string {
13
- return TID.nextStr();
10
+ export function generateTID() {
11
+ return TID.nextStr();
14
12
  }
15
-
16
- export function buildAtUri(
17
- did: string,
18
- collection: string,
19
- rkey: string,
20
- ): string {
21
- return `at://${did}/${collection}/${rkey}`;
13
+ export function buildAtUri(did, collection, rkey) {
14
+ return `at://${did}/${collection}/${rkey}`;
22
15
  }
16
+ //# sourceMappingURL=tid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tid.js","sourceRoot":"","sources":["../../src/lib/tid.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAE1C,MAAM,CAAC,MAAM,gBAAgB,GAAG,oBAAoB,CAAC;AACrD,MAAM,CAAC,MAAM,eAAe,GAAG,mBAAmB,CAAC;AACnD,MAAM,CAAC,MAAM,aAAa,GAAG,iBAAiB,CAAC;AAC/C,MAAM,CAAC,MAAM,gBAAgB,GAAG,oBAAoB,CAAC;AACrD,MAAM,CAAC,MAAM,kBAAkB,GAAG,sBAAsB,CAAC;AACzD,MAAM,CAAC,MAAM,mBAAmB,GAAG,uBAAuB,CAAC;AAC3D,MAAM,CAAC,MAAM,mBAAmB,GAAG,uBAAuB,CAAC;AAE3D,MAAM,UAAU,WAAW;IACzB,OAAO,GAAG,CAAC,OAAO,EAAE,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,UAAU,CACxB,GAAW,EACX,UAAkB,EAClB,IAAY;IAEZ,OAAO,QAAQ,GAAG,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,129 @@
1
+ export interface Column {
2
+ id: string;
3
+ name: string;
4
+ order: number;
5
+ }
6
+ export interface Label {
7
+ id: string;
8
+ name: string;
9
+ color: string;
10
+ description?: string;
11
+ }
12
+ export interface Board {
13
+ rkey: string;
14
+ did: string;
15
+ name: string;
16
+ description?: string;
17
+ columns: Column[];
18
+ labels?: Label[];
19
+ open?: boolean;
20
+ createdAt: string;
21
+ }
22
+ export interface Task {
23
+ rkey: string;
24
+ did: string;
25
+ title: string;
26
+ description?: string;
27
+ columnId: string;
28
+ boardUri: string;
29
+ position?: string;
30
+ labelIds?: string[];
31
+ order?: number;
32
+ createdAt: string;
33
+ updatedAt?: string;
34
+ }
35
+ export interface BoardRecord {
36
+ $type: "dev.skyboard.board";
37
+ name: string;
38
+ description?: string;
39
+ columns: Column[];
40
+ labels?: Label[];
41
+ open?: boolean;
42
+ createdAt: string;
43
+ }
44
+ export interface TaskRecord {
45
+ $type: "dev.skyboard.task";
46
+ title: string;
47
+ description?: string;
48
+ columnId: string;
49
+ boardUri: string;
50
+ position?: string;
51
+ labelIds?: string[];
52
+ order?: number;
53
+ createdAt: string;
54
+ updatedAt?: string;
55
+ }
56
+ export interface OpFields {
57
+ title?: string;
58
+ description?: string;
59
+ columnId?: string;
60
+ position?: string;
61
+ labelIds?: string[];
62
+ order?: number;
63
+ }
64
+ export interface Op {
65
+ rkey: string;
66
+ did: string;
67
+ targetTaskUri: string;
68
+ boardUri: string;
69
+ fields: OpFields;
70
+ createdAt: string;
71
+ }
72
+ export interface OpRecord {
73
+ $type: "dev.skyboard.op";
74
+ targetTaskUri: string;
75
+ boardUri: string;
76
+ fields: OpFields;
77
+ createdAt: string;
78
+ }
79
+ export interface Trust {
80
+ rkey: string;
81
+ did: string;
82
+ trustedDid: string;
83
+ boardUri: string;
84
+ createdAt: string;
85
+ }
86
+ export interface TrustRecord {
87
+ $type: "dev.skyboard.trust";
88
+ trustedDid: string;
89
+ boardUri: string;
90
+ createdAt: string;
91
+ }
92
+ export interface Comment {
93
+ rkey: string;
94
+ did: string;
95
+ targetTaskUri: string;
96
+ boardUri: string;
97
+ text: string;
98
+ createdAt: string;
99
+ }
100
+ export interface CommentRecord {
101
+ $type: "dev.skyboard.comment";
102
+ targetTaskUri: string;
103
+ boardUri: string;
104
+ text: string;
105
+ createdAt: string;
106
+ }
107
+ export interface MaterializedTask {
108
+ rkey: string;
109
+ did: string;
110
+ title: string;
111
+ description?: string;
112
+ columnId: string;
113
+ boardUri: string;
114
+ position?: string;
115
+ order?: number;
116
+ createdAt: string;
117
+ updatedAt?: string;
118
+ sourceTask: Task;
119
+ appliedOps: Op[];
120
+ pendingOps: Op[];
121
+ effectiveTitle: string;
122
+ effectiveDescription?: string;
123
+ effectiveColumnId: string;
124
+ effectivePosition: string;
125
+ effectiveLabelIds: string[];
126
+ ownerDid: string;
127
+ lastModifiedBy: string;
128
+ lastModifiedAt: string;
129
+ }
@@ -0,0 +1,3 @@
1
+ // Synced from ../src/lib/types.ts — stripped of Dexie auto-increment id fields
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAAA,+EAA+E"}
package/package.json CHANGED
@@ -1,13 +1,17 @@
1
1
  {
2
2
  "name": "skyboard-cli",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "CLI for Skyboard – a collaborative kanban board on AT Protocol",
5
5
  "author": {
6
6
  "name": "Tim Disney"
7
7
  },
8
8
  "type": "module",
9
+ "files": [
10
+ "dist",
11
+ "bin"
12
+ ],
9
13
  "bin": {
10
- "sb": "./bin/sb.js"
14
+ "sb": "bin/sb.js"
11
15
  },
12
16
  "scripts": {
13
17
  "build": "tsc",
@@ -1,111 +0,0 @@
1
- import { describe, it, expect, vi, beforeEach } from "vitest";
2
- import { OWNER_DID, USER_DID, BOARD_RKEY } from "./helpers.js";
3
-
4
- // Mock config module
5
- const mockLoadAuthInfo = vi.fn();
6
- const mockClearDefaultBoard = vi.fn();
7
- const mockGetDefaultBoard = vi.fn();
8
-
9
- vi.mock("../lib/config.js", () => ({
10
- loadAuthInfo: (...args: unknown[]) => mockLoadAuthInfo(...args),
11
- clearDefaultBoard: (...args: unknown[]) => mockClearDefaultBoard(...args),
12
- getDefaultBoard: (...args: unknown[]) => mockGetDefaultBoard(...args),
13
- }));
14
-
15
- // Mock auth module
16
- const mockLogin = vi.fn();
17
- const mockLogout = vi.fn();
18
-
19
- vi.mock("../lib/auth.js", () => ({
20
- login: (...args: unknown[]) => mockLogin(...args),
21
- logout: (...args: unknown[]) => mockLogout(...args),
22
- }));
23
-
24
- import { logoutCommand } from "../commands/logout.js";
25
- import { loginCommand } from "../commands/login.js";
26
-
27
- beforeEach(() => {
28
- vi.clearAllMocks();
29
- vi.spyOn(console, "log").mockImplementation(() => {});
30
- vi.spyOn(console, "error").mockImplementation(() => {});
31
- });
32
-
33
- describe("logoutCommand", () => {
34
- it("clears the default board on logout", () => {
35
- mockLoadAuthInfo.mockReturnValue({
36
- did: OWNER_DID,
37
- handle: "owner.test",
38
- service: "https://pds.example.com",
39
- });
40
-
41
- logoutCommand();
42
-
43
- expect(mockLogout).toHaveBeenCalledOnce();
44
- expect(mockClearDefaultBoard).toHaveBeenCalledOnce();
45
- });
46
-
47
- it("does not clear board if not logged in", () => {
48
- mockLoadAuthInfo.mockReturnValue(null);
49
-
50
- logoutCommand();
51
-
52
- expect(mockLogout).not.toHaveBeenCalled();
53
- expect(mockClearDefaultBoard).not.toHaveBeenCalled();
54
- });
55
- });
56
-
57
- describe("loginCommand", () => {
58
- it("clears the default board when switching to a different account", async () => {
59
- mockLoadAuthInfo.mockReturnValue({
60
- did: OWNER_DID,
61
- handle: "owner.test",
62
- service: "https://pds.example.com",
63
- });
64
- mockLogin.mockResolvedValue({ did: USER_DID, handle: "user.test" });
65
-
66
- await loginCommand("user.test");
67
-
68
- expect(mockClearDefaultBoard).toHaveBeenCalledOnce();
69
- });
70
-
71
- it("does not clear the default board when logging in as the same account", async () => {
72
- mockLoadAuthInfo.mockReturnValue({
73
- did: OWNER_DID,
74
- handle: "owner.test",
75
- service: "https://pds.example.com",
76
- });
77
- mockLogin.mockResolvedValue({ did: OWNER_DID, handle: "owner.test" });
78
-
79
- await loginCommand("owner.test");
80
-
81
- expect(mockClearDefaultBoard).not.toHaveBeenCalled();
82
- });
83
-
84
- it("does not clear the default board on first login (no previous auth)", async () => {
85
- mockLoadAuthInfo.mockReturnValue(null);
86
- mockLogin.mockResolvedValue({ did: OWNER_DID, handle: "owner.test" });
87
-
88
- await loginCommand("owner.test");
89
-
90
- expect(mockClearDefaultBoard).not.toHaveBeenCalled();
91
- });
92
-
93
- it("does not clear the default board if login fails", async () => {
94
- mockLoadAuthInfo.mockReturnValue({
95
- did: OWNER_DID,
96
- handle: "owner.test",
97
- service: "https://pds.example.com",
98
- });
99
- mockLogin.mockRejectedValue(new Error("OAuth failed"));
100
-
101
- const exitSpy = vi.spyOn(process, "exit").mockImplementation((() => {
102
- throw new Error("process.exit");
103
- }) as any);
104
-
105
- await expect(loginCommand("user.test")).rejects.toThrow("process.exit");
106
-
107
- expect(mockClearDefaultBoard).not.toHaveBeenCalled();
108
-
109
- exitSpy.mockRestore();
110
- });
111
- });
@@ -1,42 +0,0 @@
1
- import { describe, it, expect } from "vitest";
2
- import { resolveCardRef } from "../lib/card-ref.js";
3
- import { makeMaterializedTask, TASK_RKEY_1, TASK_RKEY_2, TASK_RKEY_3 } from "./helpers.js";
4
-
5
- describe("resolveCardRef", () => {
6
- const tasks = [
7
- makeMaterializedTask({ rkey: TASK_RKEY_1, title: "First Task" }),
8
- makeMaterializedTask({ rkey: TASK_RKEY_2, title: "Second Task" }),
9
- makeMaterializedTask({ rkey: TASK_RKEY_3, title: "Third Task" }),
10
- ];
11
-
12
- it("matches a task by 4+ character rkey prefix", () => {
13
- // TASK_RKEY_1 = "3jui7a2zbbb22" — need enough chars to disambiguate from TASK_RKEY_2 "3jui7a2zbbb33"
14
- const result = resolveCardRef(TASK_RKEY_1.slice(0, 12), tasks);
15
- expect(result.rkey).toBe(TASK_RKEY_1);
16
- });
17
-
18
- it("matches a task by full rkey", () => {
19
- const result = resolveCardRef(TASK_RKEY_2, tasks);
20
- expect(result.rkey).toBe(TASK_RKEY_2);
21
- });
22
-
23
- it("throws on too-short prefix (< 4 chars)", () => {
24
- expect(() => resolveCardRef("3ju", tasks)).toThrow("too short");
25
- });
26
-
27
- it("throws when no task matches", () => {
28
- expect(() => resolveCardRef("zzzz", tasks)).toThrow('No card found');
29
- });
30
-
31
- it("throws on ambiguous match with list of candidates", () => {
32
- // TASK_RKEY_1 = "3jui7a2zbbb22", TASK_RKEY_2 = "3jui7a2zbbb33"
33
- // They share prefix "3jui7a2zbbb"
34
- expect(() => resolveCardRef("3jui7a2zbbb", tasks)).toThrow("Ambiguous");
35
- });
36
-
37
- it("resolves unambiguous prefix that partially overlaps", () => {
38
- // TASK_RKEY_3 = "3jui7a2zbcc44" — prefix "3jui7a2zbcc" is unique
39
- const result = resolveCardRef("3jui7a2zbcc", tasks);
40
- expect(result.rkey).toBe(TASK_RKEY_3);
41
- });
42
- });