@crowdedkingdomstudios/crowdyjs 4.3.0 → 5.0.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.
- package/MIGRATION.md +30 -0
- package/README.md +46 -26
- package/dist/domains/udp.d.ts +9 -5
- package/dist/domains/udp.d.ts.map +1 -1
- package/dist/domains/udp.js +10 -6
- package/dist/generated/graphql.d.ts +17 -0
- package/dist/generated/graphql.d.ts.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/realtime.d.ts +2 -1
- package/dist/realtime.d.ts.map +1 -1
- package/dist/realtime.js +26 -2
- package/dist/world.js +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -26,13 +26,13 @@
|
|
|
26
26
|
*
|
|
27
27
|
* const { token, user } = await client.auth.login({ email, password });
|
|
28
28
|
* const me = await client.users.me();
|
|
29
|
-
* const unsub = client.udp.subscribe({
|
|
29
|
+
* const unsub = client.udp.subscribe({ actorUpdate: (n) => { ... } }, appId);
|
|
30
30
|
*
|
|
31
31
|
* Org / app / billing / payments / quotas operations are not in this
|
|
32
32
|
* package; consume `cks-management-api` directly (the management UI does)
|
|
33
33
|
* via Apollo, fetch, or a separate codegen client.
|
|
34
34
|
*/
|
|
35
|
-
export declare const VERSION = "
|
|
35
|
+
export declare const VERSION = "5.0.0";
|
|
36
36
|
export { CrowdyClient, createCrowdyClient, type CrowdyClientConfig, } from './crowdy-client.js';
|
|
37
37
|
export { BrowserLocalStorageTokenStore, SessionStore, type SessionListener, type TokenStore, } from './session.js';
|
|
38
38
|
export { GraphQLClient, GraphQLTransport, type GraphQLClientConfig, } from './client.js';
|
package/dist/index.js
CHANGED
|
@@ -26,13 +26,13 @@
|
|
|
26
26
|
*
|
|
27
27
|
* const { token, user } = await client.auth.login({ email, password });
|
|
28
28
|
* const me = await client.users.me();
|
|
29
|
-
* const unsub = client.udp.subscribe({
|
|
29
|
+
* const unsub = client.udp.subscribe({ actorUpdate: (n) => { ... } }, appId);
|
|
30
30
|
*
|
|
31
31
|
* Org / app / billing / payments / quotas operations are not in this
|
|
32
32
|
* package; consume `cks-management-api` directly (the management UI does)
|
|
33
33
|
* via Apollo, fetch, or a separate codegen client.
|
|
34
34
|
*/
|
|
35
|
-
export const VERSION = '
|
|
35
|
+
export const VERSION = '5.0.0';
|
|
36
36
|
export { CrowdyClient, createCrowdyClient, } from './crowdy-client.js';
|
|
37
37
|
export { BrowserLocalStorageTokenStore, SessionStore, } from './session.js';
|
|
38
38
|
export { GraphQLClient, GraphQLTransport, } from './client.js';
|
package/dist/realtime.d.ts
CHANGED
|
@@ -72,13 +72,14 @@ export declare class RealtimeClient {
|
|
|
72
72
|
private readonly subscribers;
|
|
73
73
|
private readonly pending;
|
|
74
74
|
private nextSubscriberId;
|
|
75
|
+
private subscribedAppId;
|
|
75
76
|
constructor(config: RealtimeConfig | undefined, session: SessionStore);
|
|
76
77
|
status(): RealtimeStatus;
|
|
77
78
|
onStatus(listener: (status: RealtimeStatus) => void): () => void;
|
|
78
79
|
connect(): void;
|
|
79
80
|
disconnect(): void;
|
|
80
81
|
close(): void;
|
|
81
|
-
subscribe(handlers: UdpNotificationHandlers): () => void;
|
|
82
|
+
subscribe(handlers: UdpNotificationHandlers, appId: string): () => void;
|
|
82
83
|
waitForSequence(sequenceNumber: number, timeoutMs?: number): Promise<SpatialNotification>;
|
|
83
84
|
private ensureSubscription;
|
|
84
85
|
private restart;
|
package/dist/realtime.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"realtime.d.ts","sourceRoot":"","sources":["../src/realtime.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"realtime.d.ts","sourceRoot":"","sources":["../src/realtime.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAEL,KAAK,4BAA4B,EAClC,MAAM,wBAAwB,CAAC;AAEhC,MAAM,MAAM,cAAc,GACtB,MAAM,GACN,YAAY,GACZ,WAAW,GACX,cAAc,GACd,cAAc,GACd,QAAQ,CAAC;AAEb,MAAM,MAAM,eAAe,GAAG,WAAW,CACvC,4BAA4B,CAAC,kBAAkB,CAAC,CACjD,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,OAAO,CACvC,eAAe,EACf;IAAE,cAAc,EAAE,MAAM,CAAA;CAAE,CAC3B,CAAC;AAEF,MAAM,WAAW,uBAAuB;IACtC,WAAW,CAAC,EAAE,CAAC,YAAY,EAAE,OAAO,CAAC,eAAe,EAAE;QAAE,UAAU,CAAC,EAAE,yBAAyB,CAAA;KAAE,CAAC,KAAK,IAAI,CAAC;IAC3G,mBAAmB,CAAC,EAAE,CAAC,YAAY,EAAE,OAAO,CAAC,eAAe,EAAE;QAAE,UAAU,CAAC,EAAE,qBAAqB,CAAA;KAAE,CAAC,KAAK,IAAI,CAAC;IAC/G,WAAW,CAAC,EAAE,CAAC,YAAY,EAAE,OAAO,CAAC,eAAe,EAAE;QAAE,UAAU,CAAC,EAAE,yBAAyB,CAAA;KAAE,CAAC,KAAK,IAAI,CAAC;IAC3G,mBAAmB,CAAC,EAAE,CAAC,YAAY,EAAE,OAAO,CAAC,eAAe,EAAE;QAAE,UAAU,CAAC,EAAE,qBAAqB,CAAA;KAAE,CAAC,KAAK,IAAI,CAAC;IAC/G,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,OAAO,CAAC,eAAe,EAAE;QAAE,UAAU,CAAC,EAAE,yBAAyB,CAAA;KAAE,CAAC,KAAK,IAAI,CAAC;IACrG,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,OAAO,CAAC,eAAe,EAAE;QAAE,UAAU,CAAC,EAAE,wBAAwB,CAAA;KAAE,CAAC,KAAK,IAAI,CAAC;IACnG,WAAW,CAAC,EAAE,CAAC,YAAY,EAAE,OAAO,CAAC,eAAe,EAAE;QAAE,UAAU,CAAC,EAAE,yBAAyB,CAAA;KAAE,CAAC,KAAK,IAAI,CAAC;IAC3G,WAAW,CAAC,EAAE,CAAC,YAAY,EAAE,OAAO,CAAC,eAAe,EAAE;QAAE,UAAU,CAAC,EAAE,yBAAyB,CAAA;KAAE,CAAC,KAAK,IAAI,CAAC;IAC3G,kBAAkB,CAAC,EAAE,CAAC,YAAY,EAAE,OAAO,CAAC,eAAe,EAAE;QAAE,UAAU,CAAC,EAAE,gCAAgC,CAAA;KAAE,CAAC,KAAK,IAAI,CAAC;IACzH,cAAc,CAAC,EAAE,CAAC,YAAY,EAAE,OAAO,CAAC,eAAe,EAAE;QAAE,UAAU,CAAC,EAAE,4BAA4B,CAAA;KAAE,CAAC,KAAK,IAAI,CAAC;IACjH,YAAY,CAAC,EAAE,CAAC,YAAY,EAAE,OAAO,CAAC,eAAe,EAAE;QAAE,UAAU,CAAC,EAAE,sBAAsB,CAAA;KAAE,CAAC,KAAK,IAAI,CAAC;IACzG,eAAe,CAAC,EAAE,CAAC,YAAY,EAAE,OAAO,CAAC,eAAe,EAAE;QAAE,UAAU,CAAC,EAAE,yBAAyB,CAAA;KAAE,CAAC,KAAK,IAAI,CAAC;IAC/G,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAC7C,GAAG,CAAC,EAAE,CAAC,YAAY,EAAE,eAAe,KAAK,IAAI,CAAC;CAC/C;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAQD,qBAAa,cAAc;IAsBvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IArB1B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAS;IAC7C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,WAAW,CAA0B;IAC7C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA+C;IAC/E,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA8C;IAC1E,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoC;IAC5D,OAAO,CAAC,gBAAgB,CAAK;IAI7B,OAAO,CAAC,eAAe,CAAuB;gBAG5C,MAAM,EAAE,cAAc,YAAK,EACV,OAAO,EAAE,YAAY;IAyBxC,MAAM,IAAI,cAAc;IAIxB,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,GAAG,MAAM,IAAI;IAQhE,OAAO,IAAI,IAAI;IAKf,UAAU,IAAI,IAAI;IASlB,KAAK,IAAI,IAAI;IAMb,SAAS,CAAC,QAAQ,EAAE,uBAAuB,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,IAAI;IAgBvE,eAAe,CACb,cAAc,EAAE,MAAM,EACtB,SAAS,SAAqB,GAC7B,OAAO,CAAC,mBAAmB,CAAC;IAkB/B,OAAO,CAAC,kBAAkB;IAiG1B,OAAO,CAAC,OAAO;IAQf,OAAO,CAAC,QAAQ;IA8DhB,OAAO,CAAC,cAAc;IAqBtB,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,SAAS;CAOlB"}
|
package/dist/realtime.js
CHANGED
|
@@ -14,6 +14,10 @@ export class RealtimeClient {
|
|
|
14
14
|
this.subscribers = new Map();
|
|
15
15
|
this.pending = new Map();
|
|
16
16
|
this.nextSubscriberId = 1;
|
|
17
|
+
// App this realtime session is scoped to. Sent in connectionParams so the
|
|
18
|
+
// game-api only fans this app's spatial notifications to this subscription.
|
|
19
|
+
// The game-api rejects subscriptions that arrive without it.
|
|
20
|
+
this.subscribedAppId = null;
|
|
17
21
|
this.wsUrl = config.wsUrl || config.wsEndpoint || 'ws://localhost:3000/graphql';
|
|
18
22
|
this.logger = config.logger ?? silentLogger;
|
|
19
23
|
this.retryAttempts = config.retryAttempts ?? 8;
|
|
@@ -61,7 +65,11 @@ export class RealtimeClient {
|
|
|
61
65
|
this.subscribers.clear();
|
|
62
66
|
this.rejectAllPending(new CrowdyRealtimeError('Realtime client closed', { retryable: false }));
|
|
63
67
|
}
|
|
64
|
-
subscribe(handlers) {
|
|
68
|
+
subscribe(handlers, appId) {
|
|
69
|
+
// appId is required by the type; guard for JS callers so a missing value
|
|
70
|
+
// is sent as "no app" (cleanly rejected by the game-api) rather than the
|
|
71
|
+
// literal string "undefined".
|
|
72
|
+
this.subscribedAppId = appId != null ? String(appId) : null;
|
|
65
73
|
const id = `s${this.nextSubscriberId++}`;
|
|
66
74
|
this.subscribers.set(id, handlers);
|
|
67
75
|
this.connect();
|
|
@@ -104,7 +112,14 @@ export class RealtimeClient {
|
|
|
104
112
|
retryAttempts: this.retryAttempts,
|
|
105
113
|
connectionParams: () => {
|
|
106
114
|
const currentToken = this.session.getToken();
|
|
107
|
-
|
|
115
|
+
if (!currentToken)
|
|
116
|
+
return {};
|
|
117
|
+
const params = {
|
|
118
|
+
Authorization: `Bearer ${currentToken}`,
|
|
119
|
+
};
|
|
120
|
+
if (this.subscribedAppId != null)
|
|
121
|
+
params.appId = this.subscribedAppId;
|
|
122
|
+
return params;
|
|
108
123
|
},
|
|
109
124
|
retryWait: async (retries) => {
|
|
110
125
|
this.setStatus('reconnecting');
|
|
@@ -172,6 +187,15 @@ export class RealtimeClient {
|
|
|
172
187
|
}
|
|
173
188
|
dispatch(notification) {
|
|
174
189
|
this.resolvePending(notification);
|
|
190
|
+
// A non-retryable connection event (e.g. APP_ID_REQUIRED, AUTH_REQUIRED)
|
|
191
|
+
// means the server completed the subscription and resubscribing would just
|
|
192
|
+
// be rejected again. Stop wanting the connection so the `complete` handler
|
|
193
|
+
// doesn't immediately reopen it (lazy graphql-ws then closes the socket).
|
|
194
|
+
if (notification.__typename === 'RealtimeConnectionEvent' &&
|
|
195
|
+
notification.retryable === false) {
|
|
196
|
+
this.desired = false;
|
|
197
|
+
this.setStatus('failed');
|
|
198
|
+
}
|
|
175
199
|
for (const handlers of [...this.subscribers.values()]) {
|
|
176
200
|
try {
|
|
177
201
|
handlers.any?.(notification);
|
package/dist/world.js
CHANGED