@dxos/protocols 0.8.1-staging.391c573 → 0.8.1-staging.5be625a
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/dist/cjs/src/edge-error.d.ts +26 -0
- package/dist/cjs/src/edge-error.d.ts.map +1 -0
- package/dist/cjs/src/edge-error.js +63 -0
- package/dist/cjs/src/edge-error.js.map +1 -0
- package/dist/cjs/src/edge.d.ts +25 -25
- package/dist/cjs/src/edge.d.ts.map +1 -1
- package/dist/cjs/src/edge.js +13 -57
- package/dist/cjs/src/edge.js.map +1 -1
- package/dist/cjs/src/index.d.ts +1 -0
- package/dist/cjs/src/index.d.ts.map +1 -1
- package/dist/cjs/src/index.js +1 -0
- package/dist/cjs/src/index.js.map +1 -1
- package/dist/cjs/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/src/edge-error.d.ts +26 -0
- package/dist/esm/src/edge-error.d.ts.map +1 -0
- package/dist/esm/src/edge-error.js +62 -0
- package/dist/esm/src/edge-error.js.map +1 -0
- package/dist/esm/src/edge.d.ts +25 -25
- package/dist/esm/src/edge.d.ts.map +1 -1
- package/dist/esm/src/edge.js +12 -58
- package/dist/esm/src/edge.js.map +1 -1
- package/dist/esm/src/index.d.ts +1 -0
- package/dist/esm/src/index.d.ts.map +1 -1
- package/dist/esm/src/index.js +1 -0
- package/dist/esm/src/index.js.map +1 -1
- package/package.json +7 -7
- package/src/edge-error.ts +79 -0
- package/src/edge.ts +19 -71
- package/src/index.ts +1 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type EdgeErrorData, type EdgeHttpFailure } from './edge';
|
|
2
|
+
export declare class EdgeCallFailedError extends Error {
|
|
3
|
+
static fromProcessingFailureCause(cause: Error): EdgeCallFailedError;
|
|
4
|
+
static fromHttpFailure(response: Response): EdgeCallFailedError;
|
|
5
|
+
static fromUnsuccessfulResponse(response: Response, body: EdgeHttpFailure): EdgeCallFailedError;
|
|
6
|
+
readonly reason: string;
|
|
7
|
+
readonly errorData?: EdgeErrorData;
|
|
8
|
+
readonly isRetryable?: boolean;
|
|
9
|
+
readonly retryAfterMs?: number;
|
|
10
|
+
constructor(args: {
|
|
11
|
+
reason: string;
|
|
12
|
+
isRetryable?: boolean;
|
|
13
|
+
errorData?: EdgeErrorData;
|
|
14
|
+
retryAfterMs?: number;
|
|
15
|
+
cause?: Error;
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
export declare class EdgeAuthChallengeError extends EdgeCallFailedError {
|
|
19
|
+
readonly challenge: string;
|
|
20
|
+
constructor(challenge: string, errorData: EdgeErrorData);
|
|
21
|
+
}
|
|
22
|
+
export declare const createRetryableHttpFailure: (args: {
|
|
23
|
+
reason: any;
|
|
24
|
+
retryAfterSeconds: number;
|
|
25
|
+
}) => Response;
|
|
26
|
+
//# sourceMappingURL=edge-error.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edge-error.d.ts","sourceRoot":"","sources":["../../../src/edge-error.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,eAAe,EAAE,MAAM,QAAQ,CAAC;AAElE,qBAAa,mBAAoB,SAAQ,KAAK;WAC9B,0BAA0B,CAAC,KAAK,EAAE,KAAK;WAQvC,eAAe,CAAC,QAAQ,EAAE,QAAQ;WAQlC,wBAAwB,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,eAAe;IAShF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,aAAa,CAAC;IACnC,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;gBAEnB,IAAI,EAAE;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,SAAS,CAAC,EAAE,aAAa,CAAC;QAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,KAAK,CAAC,EAAE,KAAK,CAAC;KACf;CAOF;AAED,qBAAa,sBAAuB,SAAQ,mBAAmB;aAE3C,SAAS,EAAE,MAAM;gBAAjB,SAAS,EAAE,MAAM,EACjC,SAAS,EAAE,aAAa;CAI3B;AAOD,eAAO,MAAM,0BAA0B,SAAU;IAAE,MAAM,EAAE,GAAG,CAAC;IAAC,iBAAiB,EAAE,MAAM,CAAA;CAAE,aAI1F,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
export class EdgeCallFailedError extends Error {
|
|
5
|
+
static fromProcessingFailureCause(cause) {
|
|
6
|
+
return new EdgeCallFailedError({
|
|
7
|
+
reason: 'Error processing request.',
|
|
8
|
+
isRetryable: true,
|
|
9
|
+
cause,
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
static fromHttpFailure(response) {
|
|
13
|
+
return new EdgeCallFailedError({
|
|
14
|
+
reason: `HTTP code ${response.status}: ${response.statusText}.`,
|
|
15
|
+
isRetryable: isRetryableCode(response.status),
|
|
16
|
+
retryAfterMs: getRetryAfterMillis(response),
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
static fromUnsuccessfulResponse(response, body) {
|
|
20
|
+
return new EdgeCallFailedError({
|
|
21
|
+
reason: body.reason,
|
|
22
|
+
errorData: body.errorData,
|
|
23
|
+
isRetryable: body.errorData == null && response.headers.has('Retry-After'),
|
|
24
|
+
retryAfterMs: getRetryAfterMillis(response),
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
reason;
|
|
28
|
+
errorData;
|
|
29
|
+
isRetryable;
|
|
30
|
+
retryAfterMs;
|
|
31
|
+
constructor(args) {
|
|
32
|
+
super(args.reason, { cause: args.cause });
|
|
33
|
+
this.reason = args.reason;
|
|
34
|
+
this.errorData = args.errorData;
|
|
35
|
+
this.retryAfterMs = args.retryAfterMs;
|
|
36
|
+
this.isRetryable = Boolean(args.isRetryable);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
export class EdgeAuthChallengeError extends EdgeCallFailedError {
|
|
40
|
+
challenge;
|
|
41
|
+
constructor(challenge, errorData) {
|
|
42
|
+
super({ reason: 'Auth challenge.', errorData, isRetryable: false });
|
|
43
|
+
this.challenge = challenge;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
const getRetryAfterMillis = (response) => {
|
|
47
|
+
const retryAfter = Number(response.headers.get('Retry-After'));
|
|
48
|
+
return Number.isNaN(retryAfter) || retryAfter === 0 ? undefined : retryAfter * 1000;
|
|
49
|
+
};
|
|
50
|
+
export const createRetryableHttpFailure = (args) => {
|
|
51
|
+
return new Response(JSON.stringify({ success: false, reason: args.reason }), {
|
|
52
|
+
headers: { 'Retry-After': String(args.retryAfterSeconds) },
|
|
53
|
+
});
|
|
54
|
+
};
|
|
55
|
+
const isRetryableCode = (status) => {
|
|
56
|
+
if (status === 501) {
|
|
57
|
+
// Not Implemented
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
return !(status >= 400 && status < 500);
|
|
61
|
+
};
|
|
62
|
+
//# sourceMappingURL=edge-error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edge-error.js","sourceRoot":"","sources":["../../../src/edge-error.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/src/edge.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Schema as S } from 'effect';
|
|
2
|
+
import { SpaceId } from '@dxos/keys';
|
|
2
3
|
export declare enum EdgeService {
|
|
3
4
|
AUTOMERGE_REPLICATOR = "automerge-replicator",
|
|
4
5
|
FEED_REPLICATOR = "feed-replicator",
|
|
@@ -114,32 +115,31 @@ export declare enum EdgeAgentStatus {
|
|
|
114
115
|
INACTIVE = "inactive",
|
|
115
116
|
NOT_FOUND = "not_found"
|
|
116
117
|
}
|
|
117
|
-
export declare class EdgeCallFailedError extends Error {
|
|
118
|
-
static fromProcessingFailureCause(cause: Error): EdgeCallFailedError;
|
|
119
|
-
static fromHttpFailure(response: Response): EdgeCallFailedError;
|
|
120
|
-
static fromUnsuccessfulResponse(response: Response, body: EdgeHttpFailure): EdgeCallFailedError;
|
|
121
|
-
readonly reason: string;
|
|
122
|
-
readonly errorData?: EdgeErrorData;
|
|
123
|
-
readonly isRetryable?: boolean;
|
|
124
|
-
readonly retryAfterMs?: number;
|
|
125
|
-
constructor(args: {
|
|
126
|
-
reason: string;
|
|
127
|
-
isRetryable?: boolean;
|
|
128
|
-
errorData?: EdgeErrorData;
|
|
129
|
-
retryAfterMs?: number;
|
|
130
|
-
cause?: Error;
|
|
131
|
-
});
|
|
132
|
-
}
|
|
133
|
-
export declare class EdgeAuthChallengeError extends EdgeCallFailedError {
|
|
134
|
-
readonly challenge: string;
|
|
135
|
-
constructor(challenge: string, errorData: EdgeErrorData);
|
|
136
|
-
}
|
|
137
118
|
export type EdgeAuthChallenge = {
|
|
138
119
|
type: 'auth_challenge';
|
|
139
120
|
challenge: string;
|
|
140
121
|
};
|
|
141
|
-
export declare
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
122
|
+
export declare enum OAuthProvider {
|
|
123
|
+
GOOGLE = "google"
|
|
124
|
+
}
|
|
125
|
+
export declare const InitiateOAuthFlowRequestSchema: S.Struct<{
|
|
126
|
+
provider: S.Enums<typeof OAuthProvider>;
|
|
127
|
+
spaceId: S.refine<string & {
|
|
128
|
+
__SpaceId: true;
|
|
129
|
+
}, S.Schema<string, string, never>>;
|
|
130
|
+
accessTokenId: typeof S.String;
|
|
131
|
+
scopes: S.mutable<S.Array$<typeof S.String>>;
|
|
132
|
+
}>;
|
|
133
|
+
export type InitiateOAuthFlowRequest = S.Schema.Type<typeof InitiateOAuthFlowRequestSchema>;
|
|
134
|
+
export type InitiateOAuthFlowResponse = {
|
|
135
|
+
authUrl: string;
|
|
136
|
+
};
|
|
137
|
+
export type OAuthFlowResult = {
|
|
138
|
+
success: true;
|
|
139
|
+
accessToken: string;
|
|
140
|
+
accessTokenId: string;
|
|
141
|
+
} | {
|
|
142
|
+
success: false;
|
|
143
|
+
reason: string;
|
|
144
|
+
};
|
|
145
145
|
//# sourceMappingURL=edge.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edge.d.ts","sourceRoot":"","sources":["../../../src/edge.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"edge.d.ts","sourceRoot":"","sources":["../../../src/edge.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/src/edge.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
//
|
|
2
2
|
// Copyright 2024 DXOS.org
|
|
3
3
|
//
|
|
4
|
+
import { Schema as S } from 'effect';
|
|
5
|
+
import { SpaceId } from '@dxos/keys';
|
|
4
6
|
// TODO(burdon): Rename EdgerRouterEndpoint?
|
|
5
7
|
export var EdgeService;
|
|
6
8
|
(function (EdgeService) {
|
|
@@ -15,62 +17,14 @@ export var EdgeAgentStatus;
|
|
|
15
17
|
EdgeAgentStatus["INACTIVE"] = "inactive";
|
|
16
18
|
EdgeAgentStatus["NOT_FOUND"] = "not_found";
|
|
17
19
|
})(EdgeAgentStatus || (EdgeAgentStatus = {}));
|
|
18
|
-
export
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
reason: `HTTP code ${response.status}: ${response.statusText}.`,
|
|
29
|
-
isRetryable: isRetryableCode(response.status),
|
|
30
|
-
retryAfterMs: getRetryAfterMillis(response),
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
static fromUnsuccessfulResponse(response, body) {
|
|
34
|
-
return new EdgeCallFailedError({
|
|
35
|
-
reason: body.reason,
|
|
36
|
-
errorData: body.errorData,
|
|
37
|
-
isRetryable: body.errorData == null && response.headers.has('Retry-After'),
|
|
38
|
-
retryAfterMs: getRetryAfterMillis(response),
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
reason;
|
|
42
|
-
errorData;
|
|
43
|
-
isRetryable;
|
|
44
|
-
retryAfterMs;
|
|
45
|
-
constructor(args) {
|
|
46
|
-
super(args.reason, { cause: args.cause });
|
|
47
|
-
this.reason = args.reason;
|
|
48
|
-
this.errorData = args.errorData;
|
|
49
|
-
this.retryAfterMs = args.retryAfterMs;
|
|
50
|
-
this.isRetryable = Boolean(args.isRetryable);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
export class EdgeAuthChallengeError extends EdgeCallFailedError {
|
|
54
|
-
challenge;
|
|
55
|
-
constructor(challenge, errorData) {
|
|
56
|
-
super({ reason: 'Auth challenge.', errorData, isRetryable: false });
|
|
57
|
-
this.challenge = challenge;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
const getRetryAfterMillis = (response) => {
|
|
61
|
-
const retryAfter = Number(response.headers.get('Retry-After'));
|
|
62
|
-
return Number.isNaN(retryAfter) || retryAfter === 0 ? undefined : retryAfter * 1000;
|
|
63
|
-
};
|
|
64
|
-
export const createRetryableHttpFailure = (args) => {
|
|
65
|
-
return new Response(JSON.stringify({ success: false, reason: args.reason }), {
|
|
66
|
-
headers: { 'Retry-After': String(args.retryAfterSeconds) },
|
|
67
|
-
});
|
|
68
|
-
};
|
|
69
|
-
const isRetryableCode = (status) => {
|
|
70
|
-
if (status === 501) {
|
|
71
|
-
// Not Implemented
|
|
72
|
-
return false;
|
|
73
|
-
}
|
|
74
|
-
return !(status >= 400 && status < 500);
|
|
75
|
-
};
|
|
20
|
+
export var OAuthProvider;
|
|
21
|
+
(function (OAuthProvider) {
|
|
22
|
+
OAuthProvider["GOOGLE"] = "google";
|
|
23
|
+
})(OAuthProvider || (OAuthProvider = {}));
|
|
24
|
+
export const InitiateOAuthFlowRequestSchema = S.Struct({
|
|
25
|
+
provider: S.Enums(OAuthProvider),
|
|
26
|
+
spaceId: S.String.pipe(S.filter(SpaceId.isValid)),
|
|
27
|
+
accessTokenId: S.String,
|
|
28
|
+
scopes: S.mutable(S.Array(S.String)),
|
|
29
|
+
});
|
|
76
30
|
//# sourceMappingURL=edge.js.map
|
package/dist/esm/src/edge.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edge.js","sourceRoot":"","sources":["../../../src/edge.ts"],"names":[],"mappings":"AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;
|
|
1
|
+
{"version":3,"file":"edge.js","sourceRoot":"","sources":["../../../src/edge.ts"],"names":[],"mappings":"AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;AAEF,OAAO,EAAE,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAC;AAErC,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,4CAA4C;AAC5C,MAAM,CAAN,IAAY,WAKX;AALD,WAAY,WAAW;IACrB,4DAA6C,CAAA;IAC7C,kDAAmC,CAAA;IACnC,8BAAe,CAAA;IACf,gCAAiB,CAAA;AACnB,CAAC,EALW,WAAW,KAAX,WAAW,QAKtB;AA0HD,MAAM,CAAN,IAAY,eAIX;AAJD,WAAY,eAAe;IACzB,oCAAiB,CAAA;IACjB,wCAAqB,CAAA;IACrB,0CAAuB,CAAA;AACzB,CAAC,EAJW,eAAe,KAAf,eAAe,QAI1B;AAOD,MAAM,CAAN,IAAY,aAEX;AAFD,WAAY,aAAa;IACvB,kCAAiB,CAAA;AACnB,CAAC,EAFW,aAAa,KAAb,aAAa,QAExB;AAED,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,CAAC,MAAM,CAAC;IACrD,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC;IAChC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACjD,aAAa,EAAE,CAAC,CAAC,MAAM;IACvB,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;CACrC,CAAC,CAAC"}
|
package/dist/esm/src/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAIA,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAIA,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC"}
|
package/dist/esm/src/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;AAEF,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;AAEF,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dxos/protocols",
|
|
3
|
-
"version": "0.8.1-staging.
|
|
3
|
+
"version": "0.8.1-staging.5be625a",
|
|
4
4
|
"description": "Protobuf definitions for DXOS protocols.",
|
|
5
5
|
"homepage": "https://dxos.org",
|
|
6
6
|
"bugs": "https://github.com/dxos/dxos/issues",
|
|
@@ -72,12 +72,12 @@
|
|
|
72
72
|
],
|
|
73
73
|
"dependencies": {
|
|
74
74
|
"@bufbuild/protobuf": "^2.1.0",
|
|
75
|
-
"@dxos/codec-protobuf": "0.8.1-staging.
|
|
76
|
-
"@dxos/
|
|
77
|
-
"@dxos/
|
|
78
|
-
"@dxos/timeframe": "0.8.1-staging.
|
|
79
|
-
"@dxos/
|
|
80
|
-
"@dxos/
|
|
75
|
+
"@dxos/codec-protobuf": "0.8.1-staging.5be625a",
|
|
76
|
+
"@dxos/effect": "0.8.1-staging.5be625a",
|
|
77
|
+
"@dxos/invariant": "0.8.1-staging.5be625a",
|
|
78
|
+
"@dxos/timeframe": "0.8.1-staging.5be625a",
|
|
79
|
+
"@dxos/keys": "0.8.1-staging.5be625a",
|
|
80
|
+
"@dxos/util": "0.8.1-staging.5be625a"
|
|
81
81
|
},
|
|
82
82
|
"devDependencies": {
|
|
83
83
|
"@bufbuild/buf": "^1.43.0",
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { type EdgeErrorData, type EdgeHttpFailure } from './edge';
|
|
6
|
+
|
|
7
|
+
export class EdgeCallFailedError extends Error {
|
|
8
|
+
public static fromProcessingFailureCause(cause: Error) {
|
|
9
|
+
return new EdgeCallFailedError({
|
|
10
|
+
reason: 'Error processing request.',
|
|
11
|
+
isRetryable: true,
|
|
12
|
+
cause,
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
public static fromHttpFailure(response: Response) {
|
|
17
|
+
return new EdgeCallFailedError({
|
|
18
|
+
reason: `HTTP code ${response.status}: ${response.statusText}.`,
|
|
19
|
+
isRetryable: isRetryableCode(response.status),
|
|
20
|
+
retryAfterMs: getRetryAfterMillis(response),
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
public static fromUnsuccessfulResponse(response: Response, body: EdgeHttpFailure) {
|
|
25
|
+
return new EdgeCallFailedError({
|
|
26
|
+
reason: body.reason,
|
|
27
|
+
errorData: body.errorData,
|
|
28
|
+
isRetryable: body.errorData == null && response.headers.has('Retry-After'),
|
|
29
|
+
retryAfterMs: getRetryAfterMillis(response),
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
readonly reason: string;
|
|
34
|
+
readonly errorData?: EdgeErrorData;
|
|
35
|
+
readonly isRetryable?: boolean;
|
|
36
|
+
readonly retryAfterMs?: number;
|
|
37
|
+
|
|
38
|
+
constructor(args: {
|
|
39
|
+
reason: string;
|
|
40
|
+
isRetryable?: boolean;
|
|
41
|
+
errorData?: EdgeErrorData;
|
|
42
|
+
retryAfterMs?: number;
|
|
43
|
+
cause?: Error;
|
|
44
|
+
}) {
|
|
45
|
+
super(args.reason, { cause: args.cause });
|
|
46
|
+
this.reason = args.reason;
|
|
47
|
+
this.errorData = args.errorData;
|
|
48
|
+
this.retryAfterMs = args.retryAfterMs;
|
|
49
|
+
this.isRetryable = Boolean(args.isRetryable);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export class EdgeAuthChallengeError extends EdgeCallFailedError {
|
|
54
|
+
constructor(
|
|
55
|
+
public readonly challenge: string,
|
|
56
|
+
errorData: EdgeErrorData,
|
|
57
|
+
) {
|
|
58
|
+
super({ reason: 'Auth challenge.', errorData, isRetryable: false });
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const getRetryAfterMillis = (response: Response) => {
|
|
63
|
+
const retryAfter = Number(response.headers.get('Retry-After'));
|
|
64
|
+
return Number.isNaN(retryAfter) || retryAfter === 0 ? undefined : retryAfter * 1000;
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
export const createRetryableHttpFailure = (args: { reason: any; retryAfterSeconds: number }) => {
|
|
68
|
+
return new Response(JSON.stringify({ success: false, reason: args.reason }), {
|
|
69
|
+
headers: { 'Retry-After': String(args.retryAfterSeconds) },
|
|
70
|
+
});
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
const isRetryableCode = (status: number) => {
|
|
74
|
+
if (status === 501) {
|
|
75
|
+
// Not Implemented
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
return !(status >= 400 && status < 500);
|
|
79
|
+
};
|
package/src/edge.ts
CHANGED
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
// Copyright 2024 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import {
|
|
5
|
+
import { Schema as S } from 'effect';
|
|
6
|
+
|
|
7
|
+
import { SpaceId } from '@dxos/keys';
|
|
6
8
|
|
|
7
9
|
// TODO(burdon): Rename EdgerRouterEndpoint?
|
|
8
10
|
export enum EdgeService {
|
|
@@ -138,81 +140,27 @@ export enum EdgeAgentStatus {
|
|
|
138
140
|
NOT_FOUND = 'not_found',
|
|
139
141
|
}
|
|
140
142
|
|
|
141
|
-
export class EdgeCallFailedError extends Error {
|
|
142
|
-
public static fromProcessingFailureCause(cause: Error) {
|
|
143
|
-
return new EdgeCallFailedError({
|
|
144
|
-
reason: 'Error processing request.',
|
|
145
|
-
isRetryable: true,
|
|
146
|
-
cause,
|
|
147
|
-
});
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
public static fromHttpFailure(response: Response) {
|
|
151
|
-
return new EdgeCallFailedError({
|
|
152
|
-
reason: `HTTP code ${response.status}: ${response.statusText}.`,
|
|
153
|
-
isRetryable: isRetryableCode(response.status),
|
|
154
|
-
retryAfterMs: getRetryAfterMillis(response),
|
|
155
|
-
});
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
public static fromUnsuccessfulResponse(response: Response, body: EdgeHttpFailure) {
|
|
159
|
-
return new EdgeCallFailedError({
|
|
160
|
-
reason: body.reason,
|
|
161
|
-
errorData: body.errorData,
|
|
162
|
-
isRetryable: body.errorData == null && response.headers.has('Retry-After'),
|
|
163
|
-
retryAfterMs: getRetryAfterMillis(response),
|
|
164
|
-
});
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
readonly reason: string;
|
|
168
|
-
readonly errorData?: EdgeErrorData;
|
|
169
|
-
readonly isRetryable?: boolean;
|
|
170
|
-
readonly retryAfterMs?: number;
|
|
171
|
-
|
|
172
|
-
constructor(args: {
|
|
173
|
-
reason: string;
|
|
174
|
-
isRetryable?: boolean;
|
|
175
|
-
errorData?: EdgeErrorData;
|
|
176
|
-
retryAfterMs?: number;
|
|
177
|
-
cause?: Error;
|
|
178
|
-
}) {
|
|
179
|
-
super(args.reason, { cause: args.cause });
|
|
180
|
-
this.reason = args.reason;
|
|
181
|
-
this.errorData = args.errorData;
|
|
182
|
-
this.retryAfterMs = args.retryAfterMs;
|
|
183
|
-
this.isRetryable = Boolean(args.isRetryable);
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
export class EdgeAuthChallengeError extends EdgeCallFailedError {
|
|
188
|
-
constructor(
|
|
189
|
-
public readonly challenge: string,
|
|
190
|
-
errorData: EdgeErrorData,
|
|
191
|
-
) {
|
|
192
|
-
super({ reason: 'Auth challenge.', errorData, isRetryable: false });
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
|
|
196
143
|
export type EdgeAuthChallenge = {
|
|
197
144
|
type: 'auth_challenge';
|
|
198
145
|
challenge: string;
|
|
199
146
|
};
|
|
200
147
|
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
};
|
|
148
|
+
export enum OAuthProvider {
|
|
149
|
+
GOOGLE = 'google',
|
|
150
|
+
}
|
|
205
151
|
|
|
206
|
-
export const
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
152
|
+
export const InitiateOAuthFlowRequestSchema = S.Struct({
|
|
153
|
+
provider: S.Enums(OAuthProvider),
|
|
154
|
+
spaceId: S.String.pipe(S.filter(SpaceId.isValid)),
|
|
155
|
+
accessTokenId: S.String,
|
|
156
|
+
scopes: S.mutable(S.Array(S.String)),
|
|
157
|
+
});
|
|
158
|
+
export type InitiateOAuthFlowRequest = S.Schema.Type<typeof InitiateOAuthFlowRequestSchema>;
|
|
211
159
|
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
// Not Implemented
|
|
215
|
-
return false;
|
|
216
|
-
}
|
|
217
|
-
return !(status >= 400 && status < 500);
|
|
160
|
+
export type InitiateOAuthFlowResponse = {
|
|
161
|
+
authUrl: string;
|
|
218
162
|
};
|
|
163
|
+
|
|
164
|
+
export type OAuthFlowResult =
|
|
165
|
+
| { success: true; accessToken: string; accessTokenId: string }
|
|
166
|
+
| { success: false; reason: string };
|
package/src/index.ts
CHANGED