@graffiti-garden/api 0.5.0 → 0.6.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.
@@ -1,4 +1,4 @@
1
- import type { GraffitiLocation, GraffitiObject, GraffitiObjectBase, GraffitiPatch, GraffitiSession, GraffitiPutObject, GraffitiStream, ChannelStats } from "./2-types";
1
+ import type { GraffitiObjectUrl, GraffitiObject, GraffitiObjectBase, GraffitiPatch, GraffitiSession, GraffitiPutObject, GraffitiStream, ChannelStats } from "./2-types";
2
2
  import type { JSONSchema } from "json-schema-to-ts";
3
3
  /**
4
4
  * This API describes a small but powerful set of methods that
@@ -75,7 +75,7 @@ import type { JSONSchema } from "json-schema-to-ts";
75
75
  * comment threads, topics, places (real or virtual), pieces of media, and more.
76
76
  *
77
77
  * For example, consider a comment on a post. If we place that comment in the channel
78
- * represented by the post's URI, then only people viewing the post will know to
78
+ * represented by the post's URL, then only people viewing the post will know to
79
79
  * look in that channel, giving it visibility akin to a comment on a blog post
80
80
  * or comment on Instagram ([since 2019](https://www.buzzfeednews.com/article/katienotopoulos/instagrams-following-activity-tab-is-going-away)).
81
81
  * If we also place the comment in the channel represented by the commenter's URI (their
@@ -125,12 +125,12 @@ import type { JSONSchema } from "json-schema-to-ts";
125
125
  * exists relative to an observer," or equivalently, all interaction is [reified](https://en.wikipedia.org/wiki/Reification_(computer_science)).
126
126
  * For example, if one user creates a post and another user wants to "like" that post,
127
127
  * their like is not modifying the original post, it is simply another data object that points
128
- * to the post being liked, via its {@link GraffitiObjectBase.uri | URI}.
128
+ * to the post being liked, via its {@link GraffitiObjectBase.url | URL}.
129
129
  *
130
130
  * ```json
131
131
  * {
132
132
  * activity: 'like',
133
- * target: 'uri-of-the-post-i-like',
133
+ * target: 'url-of-the-post-i-like',
134
134
  * actor: 'my-user-id'
135
135
  * }
136
136
  * ```
@@ -182,16 +182,22 @@ export declare abstract class Graffiti {
182
182
  * An object can only be replaced by the same {@link GraffitiObjectBase.actor | `actor`}
183
183
  * that created it.
184
184
  *
185
- * Replacement occurs when the {@link GraffitiObjectBase.uri | `uri`} of
186
- * the replaced object exactly matches an existing object's URI.
185
+ * Replacement occurs when the {@link GraffitiObjectBase.url | `url`} of
186
+ * the replaced object exactly matches an existing object's URL.
187
187
  *
188
- * @returns The object that was replaced if one exists or an object with
188
+ * @throws {@link GraffitiErrorNotFound} if a {@link GraffitiObjectBase.url | `url`}
189
+ * is provided that has not been created yet or the {@link GraffitiObjectBase.actor | `actor`}
190
+ * is not {@link GraffitiObjectBase.allowed | `allowed`} to see it.
191
+ *
192
+ * @throws {@link GraffitiErrorForbidden} if the {@link GraffitiObjectBase.actor | `actor`}
193
+ * is not the same `actor` as the one who created the object.
194
+ *
195
+ * @returns The object that was replaced if one one exists, otherwise an object with
189
196
  * with an empty {@link GraffitiObjectBase.value | `value`},
190
197
  * {@link GraffitiObjectBase.channels | `channels`}, and {@link GraffitiObjectBase.allowed | `allowed`}
191
- * list if the method created a new object.
192
- * In either case, the object will have a {@link GraffitiObjectBase.tombstone | `tombstone`}
193
- * field set to `true` and a {@link GraffitiObjectBase.lastModified | `lastModified`}
194
- * field updated to the time of replacement/creation.
198
+ * list.
199
+ * The {@link GraffitiObjectBase.lastModified | `lastModified`} property of the returned object
200
+ * will be updated to the time of replacement/creation.
195
201
  *
196
202
  * @group CRUD Methods
197
203
  */
@@ -209,7 +215,7 @@ export declare abstract class Graffiti {
209
215
  */
210
216
  session: GraffitiSession): Promise<GraffitiObjectBase>;
211
217
  /**
212
- * Retrieves an object from a given location.
218
+ * Retrieves an object from a given {@link GraffitiObjectBase.url | `url`}.
213
219
  *
214
220
  * The retrieved object is type-checked against the provided [JSON schema](https://json-schema.org/)
215
221
  * otherwise a {@link GraffitiErrorSchemaMismatch} is thrown.
@@ -220,22 +226,10 @@ export declare abstract class Graffiti {
220
226
  * {@link GraffitiObjectBase.channels | `channels`} properties are
221
227
  * not revealed, similar to a BCC.
222
228
  *
223
- * If the object existed but has since been deleted,
224
- * or the retrieving {@link GraffitiObjectBase.actor | `actor`}
225
- * was {@link GraffitiObjectBase.allowed | `allowed`} to access
226
- * the object but now isn't, this method may return the latest
227
- * version of the object that the {@link GraffitiObjectBase.actor | `actor`}
228
- * was allowed to access with its {@link GraffitiObjectBase.tombstone | `tombstone`}
229
- * set to `true`. This allows for the invalidation of the object
230
- * in a client-side cache.
231
- *
232
- * Otherwise, if the object never existed, or the
233
- * retrieving {@link GraffitiObjectBase.actor | `actor`} was never
234
- * {@link GraffitiObjectBase.allowed | `allowed`} to access it, or if
235
- * the object was changed long enough ago that it has been permanently deleted,
236
- * a {@link GraffitiErrorNotFound} is thrown.
237
- * The rate at which permanent deletions happen is implementation dependent.
238
- * See the `tombstoneRetention` property returned by {@link discover}.
229
+ * @throws {@link GraffitiErrorNotFound} if the object does not exist, has been deleted, or the user is not
230
+ * {@link GraffitiObjectBase.allowed | `allowed`} to access it.
231
+ *
232
+ * @throws {@link GraffitiErrorSchemaMismatch} if the retrieved object does not match the provided schema.
239
233
  *
240
234
  * @group CRUD Methods
241
235
  */
@@ -243,7 +237,7 @@ export declare abstract class Graffiti {
243
237
  /**
244
238
  * The location of the object to get.
245
239
  */
246
- locationOrUri: GraffitiLocation | string,
240
+ url: string | GraffitiObjectUrl,
247
241
  /**
248
242
  * The JSON schema to validate the retrieved object against.
249
243
  */
@@ -256,16 +250,19 @@ export declare abstract class Graffiti {
256
250
  */
257
251
  session?: GraffitiSession | null): Promise<GraffitiObject<Schema>>;
258
252
  /**
259
- * Patches an existing object at a given location.
253
+ * Patches an existing object at a given {@link GraffitiObjectBase.url | `url`}.
260
254
  * The patching {@link GraffitiObjectBase.actor | `actor`} must be the same as the
261
255
  * `actor` that created the object.
262
256
  *
263
- * @returns The original object prior to the patch
264
- * The object will have a {@link GraffitiObjectBase.tombstone | `tombstone`}
265
- * field set to `true` and a {@link GraffitiObjectBase.lastModified | `lastModified`}
266
- * field updated to the time of deletion.
257
+ * @returns The original object prior to the patch with its
258
+ * {@link GraffitiObjectBase.lastModified | `lastModified`}
259
+ * property updated to the time of deletion.
267
260
  *
268
- * @throws {@link GraffitiErrorNotFound} if the object does not exist or has already been deleted.
261
+ * @throws {@link GraffitiErrorNotFound} if the object does not exist, has already been deleted,
262
+ * or the user is not {@link GraffitiObjectBase.allowed | `allowed`} to access it.
263
+ *
264
+ * @throws {@link GraffitiErrorForbidden} if the {@link GraffitiObjectBase.actor | `actor`}
265
+ * is not the same `actor` as the one who created the object.
269
266
  *
270
267
  * @group CRUD Methods
271
268
  */
@@ -278,23 +275,26 @@ export declare abstract class Graffiti {
278
275
  /**
279
276
  * The location of the object to patch.
280
277
  */
281
- locationOrUri: GraffitiLocation | string,
278
+ url: string | GraffitiObjectUrl,
282
279
  /**
283
280
  * An implementation-specific object with information to authenticate the
284
281
  * {@link GraffitiObjectBase.actor | `actor`}.
285
282
  */
286
283
  session: GraffitiSession): Promise<GraffitiObjectBase>;
287
284
  /**
288
- * Deletes an object from a given location.
285
+ * Deletes an object from a given {@link GraffitiObjectBase.url | `url`}.
289
286
  * The deleting {@link GraffitiObjectBase.actor | `actor`} must be the same as the
290
287
  * `actor` that created the object.
291
288
  *
292
- * @returns The object that was deleted if one exists.
293
- * The object will have a {@link GraffitiObjectBase.tombstone | `tombstone`}
294
- * field set to `true` and a {@link GraffitiObjectBase.lastModified | `lastModified`}
295
- * field updated to the time of deletion.
289
+ * @returns The object that was deleted its
290
+ * {@link GraffitiObjectBase.lastModified | `lastModified`}
291
+ * property updated to the time of deletion.
292
+ *
293
+ * @throws {@link GraffitiErrorNotFound} if the object does not exist, has already been deleted,
294
+ * or the user is not {@link GraffitiObjectBase.allowed | `allowed`} to access it.
296
295
  *
297
- * @throws {@link GraffitiErrorNotFound} if the object does not exist or has already been deleted.
296
+ * @throws {@link GraffitiErrorForbidden} if the {@link GraffitiObjectBase.actor | `actor`}
297
+ * is not the same `actor` as the one who created the object.
298
298
  *
299
299
  * @group CRUD Methods
300
300
  */
@@ -302,7 +302,7 @@ export declare abstract class Graffiti {
302
302
  /**
303
303
  * The location of the object to delete.
304
304
  */
305
- locationOrUri: GraffitiLocation | string,
305
+ url: string | GraffitiObjectUrl,
306
306
  /**
307
307
  * An implementation-specific object with information to authenticate the
308
308
  * {@link GraffitiObjectBase.actor | `actor`}.
@@ -315,7 +315,12 @@ export declare abstract class Graffiti {
315
315
  *
316
316
  * Objects are returned asynchronously as they are discovered but the stream
317
317
  * will end once all leads have been exhausted.
318
- * The method must be polled again for new objects.
318
+ * The {@link GraffitiStream} ends by returning a `continue`
319
+ * method and a `cursor` string, each of which can be be used to poll for new objects.
320
+ * The `continue` method preserves the typing of the stream and the `cursor`
321
+ * string can be serialized to continue the stream after an application is closed
322
+ * and reopened.
323
+ * See the {@link continueStream} method for more information on continuing a stream.
319
324
  *
320
325
  * `discover` will not return objects that the {@link GraffitiObjectBase.actor | `actor`}
321
326
  * is not {@link GraffitiObjectBase.allowed | `allowed`} to access.
@@ -327,42 +332,10 @@ export declare abstract class Graffiti {
327
332
  * before the supplied schema is applied.
328
333
  *
329
334
  * Since different implementations may fetch data from multiple sources there is
330
- * no guarentee on the order that objects are returned in. Additionally, the method
331
- * will return objects that have been deleted but with a
332
- * {@link GraffitiObjectBase.tombstone | `tombstone`} field set to `true` for
333
- * client-side cache invalidation purposes.
334
- * The final `return()` value of the stream includes a `tombstoneRetention`
335
- * property that represents the minimum amount of time,
336
- * in milliseconds, that an application will retain and return tombstones for objects that
337
- * have been deleted.
338
- *
339
- * When repolling, the {@link GraffitiObjectBase.lastModified | `lastModified`}
340
- * field can be queried via the schema to
341
- * only fetch objects that have been modified since the last poll.
342
- * Such queries should only be done if the time since the last poll
343
- * is less than the `tombstoneRetention` value of that poll, otherwise the tombstones
344
- * for objects that have been deleted may not be returned.
345
- *
346
- * ```json
347
- * {
348
- * "properties": {
349
- * "lastModified": {
350
- * "minimum": LAST_RETRIEVED_TIME
351
- * }
352
- * }
353
- * }
354
- * ```
355
- *
356
- * `discover` needs to be polled for new data because live updates to
357
- * an application can be visually distracting or lead to toxic engagement.
358
- * If and when an application wants real-time updates, such as in a chat
359
- * application, application authors must be intentional about their polling.
360
- *
361
- * Implementers should be aware that some users may applications may try to poll
362
- * {@link discover} repetitively. They can deal with this by rate limiting or
363
- * preemptively fetching data via a bidirectional channel, like a WebSocket.
364
- * Additionally, implementers should probably index the `lastModified` field
365
- * to speed up responses to schemas like the one above.
335
+ * no guarentee on the order that objects are returned in.
336
+ * It is also possible that duplicate objects are returned and their
337
+ * {@link GraffitiObjectBase.lastModified | `lastModified`} fields must be used
338
+ * to determine which object is the most recent.
366
339
  *
367
340
  * @returns A stream of objects that match the given {@link GraffitiObjectBase.channels | `channels`}
368
341
  * and [JSON Schema](https://json-schema.org).
@@ -384,9 +357,7 @@ export declare abstract class Graffiti {
384
357
  * only objects that have no {@link GraffitiObjectBase.allowed | `allowed`}
385
358
  * property will be returned.
386
359
  */
387
- session?: GraffitiSession | null): GraffitiStream<GraffitiObject<Schema>, {
388
- tombstoneRetention: number;
389
- }>;
360
+ session?: GraffitiSession | null): GraffitiStream<GraffitiObject<Schema>>;
390
361
  /**
391
362
  * Discovers objects **not** contained in any
392
363
  * {@link GraffitiObjectBase.channels | `channels`}
@@ -398,7 +369,13 @@ export declare abstract class Graffiti {
398
369
  * getting a global view of all a user's Graffiti data or debugging
399
370
  * channel usage.
400
371
  *
401
- * It's return value is the same as {@link discover}.
372
+ * Like {@link discover}, objects are returned asynchronously as they are discovered,
373
+ * the stream will end once all leads have been exhausted, and the stream
374
+ * can be continued using the `continue` method or `cursor` string.
375
+ *
376
+ * @returns A stream of objects created by the querying {@link GraffitiObjectBase.actor | `actor`}
377
+ * that do not belong to any {@link GraffitiObjectBase.channels | `channels`}
378
+ * and match the given [JSON Schema](https://json-schema.org).
402
379
  *
403
380
  * @group Query Methods
404
381
  */
@@ -411,9 +388,7 @@ export declare abstract class Graffiti {
411
388
  * An implementation-specific object with information to authenticate the
412
389
  * {@link GraffitiObjectBase.actor | `actor`}.
413
390
  */
414
- session: GraffitiSession): GraffitiStream<GraffitiObject<Schema>, {
415
- tombstoneRetention: number;
416
- }>;
391
+ session: GraffitiSession): GraffitiStream<GraffitiObject<Schema>>;
417
392
  /**
418
393
  * Returns statistics about all the {@link GraffitiObjectBase.channels | `channels`}
419
394
  * that an {@link GraffitiObjectBase.actor | `actor`} has posted to.
@@ -421,6 +396,10 @@ export declare abstract class Graffiti {
421
396
  * necessary for certain applications where a user wants a
422
397
  * global view of all their Graffiti data or to debug
423
398
  * channel usage.
399
+
400
+ * Like {@link discover}, objects are returned asynchronously as they are discovered,
401
+ * the stream will end once all leads have been exhausted, and the stream
402
+ * can be continued using the `continue` method or `cursor` string.
424
403
  *
425
404
  * @group Query Methods
426
405
  *
@@ -433,6 +412,30 @@ export declare abstract class Graffiti {
433
412
  * {@link GraffitiObjectBase.actor | `actor`}.
434
413
  */
435
414
  session: GraffitiSession): GraffitiStream<ChannelStats>;
415
+ /**
416
+ * Continues a {@link GraffitiStream} from a given `cursor` string.
417
+ * The continuation will return new objects that have been created
418
+ * that match the original stream, and also return objects that
419
+ * have been deleted but with a `tombstone` property set to `true`.
420
+ *
421
+ * The continuation may also include duplicates of objects that
422
+ * were already returned by the original stream. This is dependent
423
+ * on how much state the underlying implementation maintains.
424
+ *
425
+ * The `cursor` allows the client to
426
+ * serialize the state of the stream and continue it later.
427
+ * However this method loses any typing information that was
428
+ * present in the original stream. To preserve typing, the
429
+ * use the `continue` method returned with the `cursor` at the
430
+ * end of the original stream.
431
+ *
432
+ * @throws {@link GraffitiErrorForbidden} if the {@link GraffitiObjectBase.actor | `actor`}
433
+ * provided in the `session` is not the same as the `actor`
434
+ * that initiated the original stream.
435
+ *
436
+ * @group Query Methods
437
+ */
438
+ abstract continueStream(cursor: string, session?: GraffitiSession | null): GraffitiStream<unknown>;
436
439
  /**
437
440
  * Begins the login process. Depending on the implementation, this may
438
441
  * involve redirecting the user to a login page or opening a popup,
@@ -1 +1 @@
1
- {"version":3,"file":"1-api.d.ts","sourceRoot":"","sources":["../../src/1-api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"1-api.d.ts","sourceRoot":"","sources":["../../src/1-api.ts"],"names":[],"mappings":"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"}
@@ -11,13 +11,12 @@ import type { Operation as JSONPatchOperation } from "fast-json-patch";
11
11
  * or properties that emerge in the Graffiti [folksonomy](https://en.wikipedia.org/wiki/Folksonomy)
12
12
  * to promote interoperability.
13
13
  *
14
- * The object is globally addressable via its {@link uri | `uri`}.
14
+ * The object is globally addressable via its {@link url | `url`}.
15
15
  *
16
16
  * The {@link channels | `channels`} and {@link allowed | `allowed`} properties
17
17
  * enable the object's creator to shape the visibility of and access to their object.
18
18
  *
19
- * The {@link tombstone | `tombstone`} and {@link lastModified | `lastModified`} properties are for
20
- * caching and synchronization.
19
+ * The {@link lastModified | `lastModified`} property can be used to compare object versions.
21
20
  */
22
21
  export interface GraffitiObjectBase {
23
22
  /**
@@ -35,7 +34,7 @@ export interface GraffitiObjectBase {
35
34
  * in the highly interoperable ecosystem that Graffiti envisions. For example, channel URIs may be:
36
35
  * - A user's own {@link actor | `actor`} URI. Putting an object in this channel is a way to broadcast
37
36
  * the object to the user's followers, like posting a tweet.
38
- * - The URI of a Graffiti post. Putting an object in this channel is a way to broadcast to anyone viewing
37
+ * - The URL of a Graffiti post. Putting an object in this channel is a way to broadcast to anyone viewing
39
38
  * the post, like commenting on a tweet.
40
39
  * - A URI representing a topic. Putting an object in this channel is a way to broadcast to anyone interested
41
40
  * in that topic, like posting in a subreddit.
@@ -71,13 +70,14 @@ export interface GraffitiObjectBase {
71
70
  */
72
71
  actor: string;
73
72
  /**
74
- * A globally unique identifier for the object. It can be used to point to
73
+ * A globally unique identifier and locator for the object. It can be used to point to
75
74
  * an object or to retrieve the object directly with {@link Graffiti.get}.
76
- * If an object is {@link Graffiti.put | put} with the same URI
75
+ * If an object is {@link Graffiti.put | put} with the same URL
77
76
  * as an existing object, the existing object will be replaced with the new object.
78
77
  *
79
- * The URI is generated on creation and include sufficient randomness to prevent collisions
80
- * and guessing. The URI starts with "scheme", just like web URLs start with `http` or `https`, to indicate
78
+ * An object's URL is generated when the object is first created and
79
+ * should include sufficient randomness to prevent collisions
80
+ * and guessing. The URL starts with a "scheme," just like web URLs start with `http` or `https`, to indicate
81
81
  * to indicate the particular Graffiti implementation. This allows for applications
82
82
  * to pull from multiple coexisting Graffiti implementations without collision.
83
83
  * Existing schemes include `graffiti:local:` for objects stored locally
@@ -87,23 +87,19 @@ export interface GraffitiObjectBase {
87
87
  * Options available in the future might include `graffiti:solid:` for objects stored on Solid servers
88
88
  * or `graffiti:p2p:` for objects stored on a peer-to-peer network.
89
89
  */
90
- uri: string;
90
+ url: string;
91
91
  /**
92
92
  * The time the object was last modified, measured in milliseconds since January 1, 1970.
93
- * This is used for caching and synchronization.
93
+ * It can be used to compare object versions.
94
94
  * A number, rather than an ISO string or Date object, is used for easy comparison, sorting,
95
95
  * and JSON Schema [range queries](https://json-schema.org/understanding-json-schema/reference/numeric#range).
96
96
  *
97
97
  * It is possible to use this value to sort objects in a user's interface but in many cases it would be better to
98
- * use a `createdAt` property in the object's {@link value | `value`} to indicate when the object was created
98
+ * use a [`published`](https://www.w3.org/TR/activitystreams-vocabulary/#dfn-published)
99
+ * property in the object's {@link value | `value`} to indicate when the object was created
99
100
  * rather than when it was modified.
100
101
  */
101
102
  lastModified: number;
102
- /**
103
- * A boolean indicating whether the object has been deleted.
104
- * Depending on implementation, objects stay available for some time after deletion to allow for synchronization.
105
- */
106
- tombstone: boolean;
107
103
  }
108
104
  /**
109
105
  * This type constrains the {@link GraffitiObjectBase} type to adhere to a
@@ -138,7 +134,7 @@ export declare const GraffitiObjectJSONSchema: {
138
134
  };
139
135
  readonly nullable: true;
140
136
  };
141
- readonly uri: {
137
+ readonly url: {
142
138
  readonly type: "string";
143
139
  };
144
140
  readonly actor: {
@@ -147,21 +143,18 @@ export declare const GraffitiObjectJSONSchema: {
147
143
  readonly lastModified: {
148
144
  readonly type: "number";
149
145
  };
150
- readonly tombstone: {
151
- readonly type: "boolean";
152
- };
153
146
  };
154
147
  readonly additionalProperties: false;
155
- readonly required: readonly ["value", "channels", "actor", "uri", "lastModified", "tombstone"];
148
+ readonly required: readonly ["value", "channels", "actor", "url", "lastModified"];
156
149
  };
157
150
  /**
158
- * This is an object containing only the {@link GraffitiObjectBase.uri | `uri`}
151
+ * This is an object containing only the {@link GraffitiObjectBase.url | `url`}
159
152
  * property of a {@link GraffitiObjectBase | GraffitiObject}.
160
153
  * It is used as a utility type so that users can call {@link Graffiti.get},
161
154
  * {@link Graffiti.patch}, or {@link Graffiti.delete} directly on an object
162
- * rather than on `object.uri`.
155
+ * rather than on `object.url`.
163
156
  */
164
- export type GraffitiLocation = Pick<GraffitiObjectBase, "uri">;
157
+ export type GraffitiObjectUrl = Pick<GraffitiObjectBase, "url">;
165
158
  /**
166
159
  * This object is a subset of {@link GraffitiObjectBase} that a user must construct locally before calling {@link Graffiti.put}.
167
160
  * This local copy does not require system-generated properties and may be statically typed with
@@ -170,11 +163,11 @@ export type GraffitiLocation = Pick<GraffitiObjectBase, "uri">;
170
163
  * This local object must have a {@link GraffitiObjectBase.value | `value`} and {@link GraffitiObjectBase.channels | `channels`}
171
164
  * and may optionally have an {@link GraffitiObjectBase.allowed | `allowed`} property.
172
165
  *
173
- * It may also include a {@link GraffitiObjectBase.uri | `uri`} property to specify the
174
- * URI of an existing object to replace. If no `uri` is provided, one will be generated during object creation.
166
+ * It may also include a {@link GraffitiObjectBase.url | `url`} property to specify the
167
+ * URL of an existing object to replace. If no `url` is provided, one will be generated during object creation.
175
168
  *
176
- * This object does not need a {@link GraffitiObjectBase.lastModified | `lastModified`} or {@link GraffitiObjectBase.tombstone | `tombstone`}
177
- * property since these are automatically generated by the Graffiti system.
169
+ * This object does not need a {@link GraffitiObjectBase.lastModified | `lastModified`}
170
+ * property since it will be automatically generated by the Graffiti system.
178
171
  */
179
172
  export type GraffitiPutObject<Schema extends JSONSchema> = Pick<GraffitiObjectBase, "value" | "channels" | "allowed"> & Partial<GraffitiObjectBase> & FromSchema<Schema & typeof GraffitiPutObjectJSONSchema>;
180
173
  /**
@@ -202,7 +195,7 @@ export declare const GraffitiPutObjectJSONSchema: {
202
195
  };
203
196
  readonly nullable: true;
204
197
  };
205
- readonly uri: {
198
+ readonly url: {
206
199
  readonly type: "string";
207
200
  };
208
201
  readonly actor: {
@@ -211,9 +204,6 @@ export declare const GraffitiPutObjectJSONSchema: {
211
204
  readonly lastModified: {
212
205
  readonly type: "number";
213
206
  };
214
- readonly tombstone: {
215
- readonly type: "boolean";
216
- };
217
207
  };
218
208
  readonly additionalProperties: false;
219
209
  };
@@ -308,14 +298,31 @@ export interface GraffitiPatch {
308
298
  * The stream is an [`AsyncGenerator`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function)
309
299
  * that can be iterated over using `for await` loops or calling `next` on the generator.
310
300
  * The stream can be terminated by breaking out of a loop calling `return` on the generator.
301
+ *
302
+ * The stream ends by returning a `continue` function and a `cursor` string,
303
+ * each of which can be used to resume the stream from where it left off.
304
+ * The `continue` function preserves the typing of the original stream,
305
+ * where as the `cursor` string can be serialized for use after a user
306
+ * has closed and reopened an application.
307
+ * Use {@link Graffiti.continueStream} to resume a stream from the `cursor` string.
308
+ *
309
+ * Unlike the original stream, the continued stream also includes a `tombstone`
310
+ * boolean to indicate whether a stream element previously returned has been deleted.
311
+ * The continuation may also include duplicates of objects that
312
+ * were already returned by the original stream. This is dependent
313
+ * on how much state the underlying implementation maintains.
311
314
  */
312
- export type GraffitiStream<TValue, TReturn = void> = AsyncGenerator<{
315
+ export type GraffitiStream<TValue> = AsyncGenerator<{
313
316
  error?: undefined;
314
317
  value: TValue;
318
+ tombstone?: boolean;
315
319
  } | {
316
320
  error: Error;
317
321
  origin: string;
318
- }, TReturn>;
322
+ }, {
323
+ continue: () => GraffitiStream<TValue>;
324
+ cursor: string;
325
+ }>;
319
326
  /**
320
327
  * Statistic about single channel returned by {@link Graffiti.channelStats}.
321
328
  * These statistics only account for contributions made by the
@@ -327,14 +334,14 @@ export type ChannelStats = {
327
334
  */
328
335
  channel: string;
329
336
  /**
330
- * The number of non-{@link GraffitiObjectBase.tombstone | `tombstone`}d objects
331
- * that the actor has posted to the channel.
337
+ * The number of objects that the actor has {@link Graffiti.put | put}
338
+ * and not {@link Graffiti.delete | deleted} in the channel.
332
339
  */
333
340
  count: number;
334
341
  /**
335
342
  * The time that the actor {@link GraffitiObjectBase.lastModified | last modified} an object in the channel,
336
343
  * measured in milliseconds since January 1, 1970.
337
- * {@link GraffitiObjectBase.tombstone | Tombstone}d objects do not effect this modification time.
344
+ * {@link Graffiti.delete | Deleted} objects do not effect this modification time.
338
345
  */
339
346
  lastModified: number;
340
347
  };
@@ -1 +1 @@
1
- {"version":3,"file":"2-types.d.ts","sourceRoot":"","sources":["../../src/2-types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"2-types.d.ts","sourceRoot":"","sources":["../../src/2-types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"crud.d.ts","sourceRoot":"","sources":["../../tests/crud.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,QAAQ,EACR,eAAe,EAGhB,MAAM,sBAAsB,CAAC;AAW9B,eAAO,MAAM,iBAAiB,GAC5B,aAAa,MAAM,IAAI,CAAC,QAAQ,EAAE,KAAK,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAC,EACrE,aAAa,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,EAC7D,aAAa,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,SAkgB9D,CAAC"}
1
+ {"version":3,"file":"crud.d.ts","sourceRoot":"","sources":["../../tests/crud.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,QAAQ,EACR,eAAe,EAGhB,MAAM,sBAAsB,CAAC;AAW9B,eAAO,MAAM,iBAAiB,GAC5B,aAAa,MAAM,IAAI,CAAC,QAAQ,EAAE,KAAK,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAC,EACrE,aAAa,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,EAC7D,aAAa,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,SA+f9D,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../tests/discover.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,QAAQ,EACR,eAAe,EAEhB,MAAM,sBAAsB,CAAC;AAG9B,eAAO,MAAM,qBAAqB,GAChC,aAAa,MAAM,IAAI,CAAC,QAAQ,EAAE,UAAU,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAC,EAC1E,aAAa,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,EAC7D,aAAa,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,SA8iB9D,CAAC"}
1
+ {"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../tests/discover.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,QAAQ,EACR,eAAe,EAEhB,MAAM,sBAAsB,CAAC;AAG9B,eAAO,MAAM,qBAAqB,GAChC,aAAa,MAAM,IAAI,CAAC,QAAQ,EAAE,UAAU,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAC,EAC1E,aAAa,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,EAC7D,aAAa,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,SAqlB9D,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"orphans.d.ts","sourceRoot":"","sources":["../../tests/orphans.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGtE,eAAO,MAAM,mBAAmB,GAC9B,aAAa,MAAM,IAAI,CACrB,QAAQ,EACR,gBAAgB,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,CAC9C,EACD,aAAa,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,EAC7D,aAAa,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,SAsE9D,CAAC"}
1
+ {"version":3,"file":"orphans.d.ts","sourceRoot":"","sources":["../../tests/orphans.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGtE,eAAO,MAAM,mBAAmB,GAC9B,aAAa,MAAM,IAAI,CACrB,QAAQ,EACR,gBAAgB,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,CAC9C,EACD,aAAa,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,EAC7D,aAAa,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,SAsG9D,CAAC"}
@@ -4,5 +4,5 @@ export declare function randomValue(): {
4
4
  [x: string]: string;
5
5
  };
6
6
  export declare function randomPutObject(): GraffitiPutObject<{}>;
7
- export declare function nextStreamValue<S, T>(iterator: GraffitiStream<S, T>): Promise<S>;
7
+ export declare function nextStreamValue<S>(iterator: GraffitiStream<S>): Promise<S>;
8
8
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../tests/utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE9E,wBAAgB,YAAY,IAAI,MAAM,CASrC;AAED,wBAAgB,WAAW;;EAI1B;AAED,wBAAgB,eAAe,IAAI,iBAAiB,CAAC,EAAE,CAAC,CAKvD;AAED,wBAAsB,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,cAIzE"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../tests/utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE9E,wBAAgB,YAAY,IAAI,MAAM,CASrC;AAED,wBAAgB,WAAW;;EAI1B;AAED,wBAAgB,eAAe,IAAI,iBAAiB,CAAC,EAAE,CAAC,CAKvD;AAED,wBAAsB,eAAe,CAAC,CAAC,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,cAKnE"}