apps 0.0.1-beta.9 → 0.0.1-beta.91
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/README.md +56 -38
- package/framework-reference.json +1 -1
- package/js/chunk-3LEVTFD4.js +712 -0
- package/js/chunk-5FHWNLCI.js +88 -0
- package/js/{chunk-FL2QR3XW.js → chunk-5MDA7MKL.js} +338 -73
- package/js/chunk-6XQLA5NC.js +5047 -0
- package/js/{chunk-M3B3DE4K.js → chunk-74YVXBKY.js} +463 -218
- package/js/chunk-7PHHWYV4.js +335 -0
- package/js/chunk-DADXWWRZ.js +449 -0
- package/js/{chunk-27F7W2LG.js → chunk-DDHBUKXX.js} +18 -2
- package/js/{chunk-UK573G7W.js → chunk-EOPQ727L.js} +87 -51
- package/js/{chunk-5T57N25Q.js → chunk-GQ33QSNB.js} +583 -69
- package/js/{chunk-JU7VHODU.js → chunk-H72MEDMN.js} +65 -10
- package/js/chunk-I5C7FD5Z.js +171 -0
- package/js/{chunk-CDL5PM2Q.js → chunk-IFJU5SYQ.js} +19082 -18402
- package/js/{chunk-VFZKSM3T.js → chunk-JPEUKEV4.js} +3 -3
- package/js/{chunk-KUMBKVJD.js → chunk-KLYSEHUD.js} +2 -2
- package/js/{chunk-RFVIONFX.js → chunk-KUCCHNVY.js} +123 -44
- package/js/chunk-OD3KFKZD.js +1617 -0
- package/js/{chunk-57RKNWL2.js → chunk-PD6I2SDG.js} +4 -4
- package/js/{chunk-72JNVHPK.js → chunk-PYQLOLOC.js} +4 -3
- package/js/{chunk-ODEIDRGW.js → chunk-QWQM3CLH.js} +795 -176
- package/js/{chunk-IJX4CYZO.js → chunk-TUMGL2OC.js} +228 -264
- package/js/{chunk-IPI4MFSN.js → chunk-XBG7HHXC.js} +2 -2
- package/js/chunk-XPRZTLHD.js +1915 -0
- package/js/chunk-YNJ5CZMJ.js +93 -0
- package/js/chunk-YRGL4QEF.js +49 -0
- package/js/{chunk-Z5M2LQOZ.js → chunk-YWFUWTUJ.js} +113 -58
- package/js/client.js +142 -78
- package/js/contracts.js +142 -21
- package/js/effect.js +18 -19
- package/js/{es-APDZKREY.js → es-DIULA3ZF.js} +62 -1659
- package/js/graphql.js +49 -40
- package/js/host.js +85 -62
- package/js/index.js +165 -70
- package/js/mcp/effect.js +21 -21
- package/js/mcp.js +76 -56
- package/js/openapi.js +4189 -1411
- package/js/react.js +2 -3
- package/js/skills/effect.js +6 -3
- package/js/skills.js +208 -81
- package/js/storage/facet.js +1 -540
- package/js/ui/auth/contracts.js +2 -2
- package/js/ui/auth.js +5 -5
- package/js/ui/contracts.js +5 -4
- package/js/ui/serving.js +8605 -225
- package/package.json +3 -8
- package/runtime.json +1 -1
- package/types/app-cache/src/contracts/cache.d.ts +18 -0
- package/types/app-cache/src/index.d.ts +34 -2
- package/types/apps/src/contracts/api-response-error.d.ts +4 -0
- package/types/apps/src/contracts/app.d.ts +60 -11
- package/types/apps/src/contracts/cache.d.ts +20 -0
- package/types/apps/src/contracts/context.d.ts +60 -17
- package/types/apps/src/contracts/elicitation.d.ts +23 -7
- package/types/apps/src/contracts/events.d.ts +94 -0
- package/types/apps/src/contracts/failure.d.ts +30 -1
- package/types/apps/src/contracts/graphql.d.ts +2 -1
- package/types/apps/src/contracts/host.d.ts +1446 -17
- package/types/apps/src/contracts/icons.d.ts +28 -0
- package/types/apps/src/contracts/live.d.ts +2 -0
- package/types/apps/src/contracts/mcp.d.ts +81 -20
- package/types/apps/src/contracts/network.d.ts +120 -0
- package/types/apps/src/contracts/openapi-compile.d.ts +82 -3
- package/types/apps/src/contracts/openapi.d.ts +41 -9
- package/types/apps/src/contracts/operations.d.ts +14 -7
- package/types/apps/src/contracts/placement.d.ts +102 -0
- package/types/apps/src/contracts/protocol-version.d.ts +2 -2
- package/types/apps/src/contracts/protocols/1.d.ts +733 -81
- package/types/apps/src/contracts/protocols/10.d.ts +1450 -0
- package/types/apps/src/contracts/protocols/11.d.ts +1149 -0
- package/types/apps/src/contracts/protocols/12.d.ts +3310 -0
- package/types/apps/src/contracts/protocols/2.d.ts +69 -26
- package/types/apps/src/contracts/protocols/3.d.ts +133 -33
- package/types/apps/src/contracts/protocols/4.d.ts +122 -45
- package/types/apps/src/contracts/protocols/5.d.ts +157 -47
- package/types/apps/src/contracts/protocols/6.d.ts +1629 -0
- package/types/apps/src/contracts/protocols/7.d.ts +1785 -0
- package/types/apps/src/contracts/protocols/8.d.ts +1182 -0
- package/types/apps/src/contracts/protocols/9.d.ts +1104 -0
- package/types/apps/src/contracts/protocols/current.d.ts +6669 -0
- package/types/apps/src/contracts/protocols/oauth-6.d.ts +74 -0
- package/types/apps/src/contracts/protocols/oauth.d.ts +134 -0
- package/types/apps/src/contracts/provider-error.d.ts +9 -0
- package/types/apps/src/contracts/provider.d.ts +90 -6
- package/types/apps/src/contracts/schedules.d.ts +7 -1
- package/types/apps/src/contracts/schema.d.ts +21 -0
- package/types/apps/src/contracts/skills.d.ts +50 -13
- package/types/apps/src/contracts/sql.d.ts +63 -0
- package/types/apps/src/contracts/ui.d.ts +44 -14
- package/types/apps/src/contracts/webhooks.d.ts +24 -7
- package/types/apps/src/contracts/workflows.d.ts +19 -17
- package/types/apps/src/facet.d.ts +4 -5
- package/types/apps/src/host.d.ts +5 -0
- package/types/apps/src/implementation/account-router.d.ts +4 -3
- package/types/apps/src/implementation/app.d.ts +41 -14
- package/types/apps/src/implementation/authoring.d.ts +25 -5
- package/types/apps/src/implementation/browser-scripts.gen.d.ts +6 -0
- package/types/apps/src/implementation/cache.d.ts +29 -2
- package/types/apps/src/implementation/catalog-cache.d.ts +35 -4
- package/types/apps/src/implementation/elicitation.d.ts +18 -15
- package/types/apps/src/implementation/events.d.ts +64 -0
- package/types/apps/src/implementation/failure-detail.d.ts +28 -5
- package/types/apps/src/implementation/graphql-catalog.d.ts +3 -3
- package/types/apps/src/implementation/graphql.d.ts +4 -3
- package/types/apps/src/implementation/input-problems.d.ts +6 -2
- package/types/apps/src/implementation/invocation-timing.d.ts +18 -0
- package/types/apps/src/implementation/live.d.ts +2 -2
- package/types/apps/src/implementation/mcp-call.d.ts +6 -5
- package/types/apps/src/implementation/mcp-catalog.d.ts +6 -4
- package/types/apps/src/implementation/mcp-client.d.ts +17 -9
- package/types/apps/src/implementation/mcp-tools.d.ts +2 -1
- package/types/apps/src/implementation/mcp.d.ts +20 -9
- package/types/apps/src/implementation/network.d.ts +16 -0
- package/types/apps/src/implementation/openapi-compile.d.ts +28 -7
- package/types/apps/src/implementation/openapi-document.d.ts +46 -19
- package/types/apps/src/implementation/openapi-names.d.ts +9 -4
- package/types/apps/src/implementation/openapi-request.d.ts +10 -2
- package/types/apps/src/implementation/openapi-source.d.ts +23 -1
- package/types/apps/src/implementation/openapi-upgrade.d.ts +4 -0
- package/types/apps/src/implementation/operations.d.ts +57 -7
- package/types/apps/src/implementation/optimistic.d.ts +1 -1
- package/types/apps/src/implementation/placement.d.ts +60 -0
- package/types/apps/src/implementation/protocol-operations.d.ts +3 -0
- package/types/apps/src/implementation/provider-error.d.ts +28 -1
- package/types/apps/src/implementation/provider.d.ts +19 -4
- package/types/apps/src/implementation/query-commit.d.ts +1 -1
- package/types/apps/src/implementation/router-catalog.d.ts +20 -18
- package/types/apps/src/implementation/router.d.ts +24 -5
- package/types/apps/src/implementation/runtime-yield.d.ts +7 -0
- package/types/apps/src/implementation/schedules.d.ts +39 -8
- package/types/apps/src/implementation/schema.d.ts +98 -11
- package/types/apps/src/implementation/skills.d.ts +18 -24
- package/types/apps/src/implementation/sql.d.ts +71 -0
- package/types/apps/src/implementation/ui-account-notice.d.ts +9 -0
- package/types/apps/src/implementation/ui-auth.d.ts +1 -1
- package/types/apps/src/implementation/ui-client.d.ts +2 -2
- package/types/apps/src/implementation/ui-document.d.ts +5 -0
- package/types/apps/src/implementation/ui-errors.d.ts +1 -1
- package/types/apps/src/implementation/ui-serving.d.ts +26 -9
- package/types/apps/src/implementation/ui-watch.d.ts +1 -1
- package/types/apps/src/implementation/upstream-error.d.ts +7 -0
- package/types/apps/src/implementation/webhooks.d.ts +15 -6
- package/types/apps/src/implementation/workflow-context.d.ts +6 -2
- package/types/apps/src/implementation/workflows.d.ts +11 -4
- package/types/apps/src/index.d.ts +68 -19
- package/types/apps/src/mcp.d.ts +20 -1
- package/types/apps/src/openapi.d.ts +6 -1
- package/types/apps/src/react.d.ts +1 -1
- package/types/apps/src/skills.d.ts +10 -8
- package/types/apps/src/ui-serving.d.ts +1 -1
- package/types/telemetry/src/app-records.d.ts +42 -0
- package/types/telemetry/src/browser-operations.d.ts +2 -2
- package/types/telemetry/src/browser.d.ts +8 -3
- package/types/telemetry/src/config.d.ts +2 -2
- package/types/telemetry/src/index.d.ts +2 -1
- package/types/telemetry/src/layer.d.ts +10 -4
- package/types/telemetry/src/measurements.d.ts +1 -1
- package/types/telemetry/src/ownership.d.ts +60 -0
- package/types/telemetry/src/recorded-failure.d.ts +29 -0
- package/types/telemetry/src/relay.d.ts +16 -6
- package/types/telemetry/src/span-attributes.d.ts +17 -1
- package/types/telemetry/src/transport.d.ts +8 -1
- package/types/utils/src/api-error.d.ts +55 -0
- package/types/utils/src/connection-failure.d.ts +33 -0
- package/types/utils/src/recorded-message.d.ts +18 -0
- package/types/utils/src/user-facing-error.d.ts +83 -0
- package/js/chunk-7EK2JDX4.js +0 -299
- package/js/chunk-IKS2C5MQ.js +0 -224
- package/js/chunk-MKWZPDR6.js +0 -63
- package/js/chunk-N7YDVXYJ.js +0 -186
- package/js/chunk-NKLWZJLE.js +0 -172
- package/js/chunk-PJJ24GU7.js +0 -877
- package/js/chunk-PZB6T6KU.js +0 -19
- package/js/chunk-R3EV5FTO.js +0 -97
- package/js/chunk-SJFZCGXG.js +0 -1243
- package/js/chunk-WLE7WX2U.js +0 -2645
- package/js/chunk-YXQHV65J.js +0 -242
- package/js/chunk-ZQINWV4W.js +0 -630
- package/js/mcp/stdio.js +0 -128
- package/types/app-data/src/implementation/cursor.d.ts +0 -10
- package/types/app-data/src/implementation/index-key.d.ts +0 -7
- package/types/app-data/src/implementation/promise.d.ts +0 -68
- package/types/app-data/src/implementation/range.d.ts +0 -8
- package/types/app-data/src/implementation/schema.d.ts +0 -18
- package/types/app-data/src/implementation/sqlite.d.ts +0 -11
- package/types/app-data/src/index.d.ts +0 -4
- package/types/apps/src/contracts/storage.d.ts +0 -68
- package/types/apps/src/implementation/mcp-stdio.d.ts +0 -4
- package/types/apps/src/implementation/storage.d.ts +0 -15
- package/types/apps/src/mcp-stdio.d.ts +0 -5
|
@@ -1,6 +1,49 @@
|
|
|
1
1
|
import {
|
|
2
|
+
RecordedMessage
|
|
3
|
+
} from "./chunk-5FHWNLCI.js";
|
|
4
|
+
import {
|
|
5
|
+
SchemaGetter_exports,
|
|
2
6
|
Schema_exports
|
|
3
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-IFJU5SYQ.js";
|
|
8
|
+
|
|
9
|
+
// ../utils/src/api-error.ts
|
|
10
|
+
var MessageField = Schema_exports.String.pipe(
|
|
11
|
+
Schema_exports.decodeTo(Schema_exports.optionalKey(Schema_exports.String), {
|
|
12
|
+
decode: SchemaGetter_exports.omit(),
|
|
13
|
+
encode: SchemaGetter_exports.passthrough()
|
|
14
|
+
})
|
|
15
|
+
);
|
|
16
|
+
function withFields(definition) {
|
|
17
|
+
const fields = definition.fields;
|
|
18
|
+
const message = definition.message;
|
|
19
|
+
const documentation = typeof message === "string" ? { description: message } : {};
|
|
20
|
+
const DefinedError = Schema_exports.Error(definition.tag)(
|
|
21
|
+
Schema_exports.TaggedStruct(definition.tag, { ...fields, message: MessageField }).annotate(
|
|
22
|
+
documentation
|
|
23
|
+
),
|
|
24
|
+
{ httpApiStatus: definition.status, ...documentation }
|
|
25
|
+
);
|
|
26
|
+
const recorded = definition.recorded ?? (typeof message === "string" ? () => message : void 0);
|
|
27
|
+
Object.defineProperties(DefinedError.prototype, {
|
|
28
|
+
message: {
|
|
29
|
+
get() {
|
|
30
|
+
return typeof message === "string" ? message : message(this);
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
...recorded === void 0 ? {} : {
|
|
34
|
+
[RecordedMessage]: {
|
|
35
|
+
get() {
|
|
36
|
+
return recorded(this);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
return DefinedError;
|
|
42
|
+
}
|
|
43
|
+
function define(definition) {
|
|
44
|
+
return "fields" in definition ? withFields(definition) : withFields({ ...definition, fields: {} });
|
|
45
|
+
}
|
|
46
|
+
var ApiError = { define };
|
|
4
47
|
|
|
5
48
|
// src/contracts/skills.ts
|
|
6
49
|
var SkillFilePath = Schema_exports.NonEmptyString.check(
|
|
@@ -45,9 +88,18 @@ var AppSkillSource = Schema_exports.Struct({
|
|
|
45
88
|
)
|
|
46
89
|
)
|
|
47
90
|
});
|
|
48
|
-
var
|
|
49
|
-
|
|
50
|
-
{
|
|
91
|
+
var skillDefinitionFailures = {
|
|
92
|
+
files: (file) => `The skill files of \u201C${file}\u201D are invalid: each needs a unique relative path, text content and a SKILL.md document.`,
|
|
93
|
+
directory: (file) => `\u201C${file}\u201D is not a valid skill directory. Skill directory names use lowercase letters and digits separated by single hyphens.`,
|
|
94
|
+
"missing-document": (file) => `\u201C${file}\u201D is missing.`,
|
|
95
|
+
frontmatter: (file) => `\u201C${file}\u201D must start with valid YAML frontmatter between --- lines.`,
|
|
96
|
+
metadata: (file) => `The frontmatter of \u201C${file}\u201D needs a valid name and description within the Agent Skills limits.`,
|
|
97
|
+
"name-mismatch": (file) => `The name in \u201C${file}\u201D does not match its skill directory.`
|
|
98
|
+
};
|
|
99
|
+
var SkillDefinitionInvalid = ApiError.define({
|
|
100
|
+
tag: "SkillDefinitionInvalid",
|
|
101
|
+
status: 400,
|
|
102
|
+
fields: {
|
|
51
103
|
file: SkillFilePath,
|
|
52
104
|
reason: Schema_exports.Literals([
|
|
53
105
|
"files",
|
|
@@ -58,14 +110,14 @@ var SkillDefinitionInvalid = class extends Schema_exports.TaggedError()(
|
|
|
58
110
|
"name-mismatch"
|
|
59
111
|
])
|
|
60
112
|
},
|
|
61
|
-
{
|
|
62
|
-
) {
|
|
63
|
-
};
|
|
113
|
+
message: ({ file, reason }) => skillDefinitionFailures[reason](file),
|
|
114
|
+
recorded: ({ reason }) => `The app's skill definition is invalid (${reason})`
|
|
115
|
+
});
|
|
64
116
|
var AppSkills = Schema_exports.Array(AppSkillSource).check(
|
|
65
117
|
Schema_exports.makeFilter((skills) => new Set(skills.map((skill) => skill.name)).size === skills.length)
|
|
66
118
|
);
|
|
67
119
|
var SkillServiceName = Schema_exports.String.check(
|
|
68
|
-
Schema_exports.isPattern(/^[A-Za-z0-9](?:[A-Za-z0-9 .-]{0,98}[A-Za-z0-9])?$/)
|
|
120
|
+
Schema_exports.isPattern(/^[A-Za-z0-9](?:[A-Za-z0-9 .-]{0,98}[A-Za-z0-9])?$/u)
|
|
69
121
|
);
|
|
70
122
|
var SkillLoadFailed = class extends Schema_exports.TaggedError()("SkillLoadFailed", {
|
|
71
123
|
reason: Schema_exports.Literals([
|
|
@@ -79,14 +131,17 @@ var SkillLoadFailed = class extends Schema_exports.TaggedError()("SkillLoadFaile
|
|
|
79
131
|
]),
|
|
80
132
|
// Error instances read an omitted message as "", so an empty message means none was given.
|
|
81
133
|
message: Schema_exports.optional(Schema_exports.String.check(Schema_exports.isMaxLength(500))),
|
|
82
|
-
status: Schema_exports.optional(Schema_exports.Int.check(Schema_exports.isBetween({ minimum: 100, maximum: 599 })))
|
|
134
|
+
status: Schema_exports.optional(Schema_exports.Int.check(Schema_exports.isBetween({ minimum: 100, maximum: 599 }))),
|
|
135
|
+
missing: Schema_exports.optional(Schema_exports.Literals(["repository", "ref"]))
|
|
83
136
|
}) {
|
|
84
137
|
};
|
|
85
138
|
var skillLoadLimits = {
|
|
86
139
|
files: 1e3,
|
|
87
140
|
fileBytes: 2e6,
|
|
88
141
|
totalBytes: 2e7,
|
|
89
|
-
concurrency: 8
|
|
142
|
+
concurrency: 8,
|
|
143
|
+
/** The request that checks whether a kept catalog's publication changed. */
|
|
144
|
+
checkMillis: 5e3
|
|
90
145
|
};
|
|
91
146
|
|
|
92
147
|
export {
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ProviderError,
|
|
3
|
+
maxUpstreamMessageLength
|
|
4
|
+
} from "./chunk-6XQLA5NC.js";
|
|
5
|
+
import {
|
|
6
|
+
owned
|
|
7
|
+
} from "./chunk-QWQM3CLH.js";
|
|
8
|
+
import {
|
|
9
|
+
AccountId
|
|
10
|
+
} from "./chunk-DDHBUKXX.js";
|
|
11
|
+
import {
|
|
12
|
+
Effect_exports,
|
|
13
|
+
Option_exports,
|
|
14
|
+
Schema_exports
|
|
15
|
+
} from "./chunk-IFJU5SYQ.js";
|
|
16
|
+
|
|
17
|
+
// src/implementation/authoring.ts
|
|
18
|
+
var NativeCallback = /* @__PURE__ */ Symbol("apps.NativeCallback");
|
|
19
|
+
var appCode = (code) => owned("app", "app.code", { attributes: { "executor.app.code": code } });
|
|
20
|
+
var fromPromise = (callback, code) => (...args) => {
|
|
21
|
+
if (NativeCallback in callback) {
|
|
22
|
+
const native = callback[NativeCallback];
|
|
23
|
+
return native(...args);
|
|
24
|
+
}
|
|
25
|
+
return Effect_exports.tryPromise({ try: () => callback(...args), catch: (error) => error }).pipe(
|
|
26
|
+
appCode(code)
|
|
27
|
+
);
|
|
28
|
+
};
|
|
29
|
+
var method = (target, key) => {
|
|
30
|
+
const value = target[key];
|
|
31
|
+
const call = (...args) => Reflect.apply(value, target, args);
|
|
32
|
+
if (NativeCallback in value) Object.assign(call, { [NativeCallback]: value[NativeCallback] });
|
|
33
|
+
return call;
|
|
34
|
+
};
|
|
35
|
+
var toPromise = (operation, signalOf, services) => {
|
|
36
|
+
const native = (...args) => Effect_exports.suspend(() => {
|
|
37
|
+
const signal = typeof signalOf === "function" ? signalOf(...args) : signalOf;
|
|
38
|
+
if (signal === void 0) return operation(...args);
|
|
39
|
+
if (signal.aborted) return Effect_exports.interrupt;
|
|
40
|
+
const cancelled = Effect_exports.callback((resume) => {
|
|
41
|
+
if (signal.aborted) {
|
|
42
|
+
resume(Effect_exports.interrupt);
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
const abort = () => resume(Effect_exports.interrupt);
|
|
46
|
+
signal.addEventListener("abort", abort, { once: true });
|
|
47
|
+
return Effect_exports.sync(() => signal.removeEventListener("abort", abort));
|
|
48
|
+
});
|
|
49
|
+
return Effect_exports.raceFirst(
|
|
50
|
+
cancelled,
|
|
51
|
+
Effect_exports.suspend(() => operation(...args))
|
|
52
|
+
);
|
|
53
|
+
});
|
|
54
|
+
return Object.assign(
|
|
55
|
+
(...args) => services === void 0 ? Effect_exports.runPromise(native(...args)) : Effect_exports.runPromiseWith(services)(native(...args)),
|
|
56
|
+
{
|
|
57
|
+
[NativeCallback]: native
|
|
58
|
+
}
|
|
59
|
+
);
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
// src/implementation/upstream-error.ts
|
|
63
|
+
var ErrorToken = Schema_exports.String.check(Schema_exports.isPattern(/^[A-Za-z0-9._-]{1,128}$/u));
|
|
64
|
+
var NestedError = Schema_exports.Struct({
|
|
65
|
+
error: Schema_exports.Struct({ code: Schema_exports.Union([Schema_exports.Int, ErrorToken]), message: Schema_exports.String })
|
|
66
|
+
});
|
|
67
|
+
var OAuthError = Schema_exports.Struct({
|
|
68
|
+
error: ErrorToken,
|
|
69
|
+
error_description: Schema_exports.optional(Schema_exports.String)
|
|
70
|
+
});
|
|
71
|
+
var bounded = (message) => message.length <= maxUpstreamMessageLength ? message : `${message.slice(0, maxUpstreamMessageLength - 1)}\u2026`;
|
|
72
|
+
var isShortenedUpstream = (message) => message.length === maxUpstreamMessageLength && message.endsWith("\u2026");
|
|
73
|
+
var stated = (code, message) => ({
|
|
74
|
+
code,
|
|
75
|
+
...message === void 0 || message === "" ? {} : { message: bounded(message) }
|
|
76
|
+
});
|
|
77
|
+
var bodyUpstreamError = (json) => {
|
|
78
|
+
const nested = Schema_exports.decodeUnknownOption(NestedError)(json);
|
|
79
|
+
if (Option_exports.isSome(nested)) return stated(nested.value.error.code, nested.value.error.message);
|
|
80
|
+
const oauth = Schema_exports.decodeUnknownOption(OAuthError)(json);
|
|
81
|
+
if (Option_exports.isSome(oauth)) return stated(oauth.value.error, oauth.value.error_description);
|
|
82
|
+
return void 0;
|
|
83
|
+
};
|
|
84
|
+
var authParam = /([A-Za-z][A-Za-z0-9_-]*)\s*=\s*(?:"((?:[^"\\]|\\.)*)"|([^\s,"]+))/g;
|
|
85
|
+
var challengeUpstreamError = (header) => {
|
|
86
|
+
const bearer = header === void 0 ? -1 : header.search(/\bBearer\b/i);
|
|
87
|
+
if (header === void 0 || bearer === -1) return void 0;
|
|
88
|
+
const params = /* @__PURE__ */ new Map();
|
|
89
|
+
for (const [, name, quoted, token] of header.slice(bearer + "Bearer".length).matchAll(authParam))
|
|
90
|
+
if (name !== void 0 && !params.has(name.toLowerCase()))
|
|
91
|
+
params.set(name.toLowerCase(), quoted?.replace(/\\(.)/g, "$1") ?? token ?? "");
|
|
92
|
+
const code = Schema_exports.decodeUnknownOption(ErrorToken)(params.get("error"));
|
|
93
|
+
return Option_exports.isNone(code) ? void 0 : stated(code.value, params.get("error_description"));
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
// src/implementation/provider-error.ts
|
|
97
|
+
var providerError = ({
|
|
98
|
+
reason,
|
|
99
|
+
status,
|
|
100
|
+
accountId,
|
|
101
|
+
phase,
|
|
102
|
+
upstream
|
|
103
|
+
}) => new ProviderError({
|
|
104
|
+
reason,
|
|
105
|
+
...status === void 0 ? {} : { status },
|
|
106
|
+
...accountId === void 0 ? {} : { accountId },
|
|
107
|
+
...phase === void 0 ? {} : { phase },
|
|
108
|
+
...upstream === void 0 ? {} : { upstream }
|
|
109
|
+
});
|
|
110
|
+
function parseProviderError(error) {
|
|
111
|
+
return Schema_exports.decodeUnknownOption(ProviderError)(error).pipe(Option_exports.map(providerError));
|
|
112
|
+
}
|
|
113
|
+
function providerErrorDetail(error, detail) {
|
|
114
|
+
return providerError({
|
|
115
|
+
...error,
|
|
116
|
+
phase: error.phase ?? detail.phase,
|
|
117
|
+
upstream: error.upstream ?? detail.upstream
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
function httpProviderError(status, headers = {}) {
|
|
121
|
+
const upstream = challengeUpstreamError(headers["www-authenticate"]);
|
|
122
|
+
if (status >= 500 && status <= 599)
|
|
123
|
+
return providerError({ reason: "unavailable", status, upstream });
|
|
124
|
+
if (status === 401) return providerError({ reason: "unauthorized", status, upstream });
|
|
125
|
+
if (status === 429) return providerError({ reason: "rate_limited", status, upstream });
|
|
126
|
+
if (status !== 403) return void 0;
|
|
127
|
+
const retry = headers["retry-after"];
|
|
128
|
+
if (headers["x-ratelimit-remaining"] === "0" || retry !== void 0 && (/^\d+$/.test(retry) || Number.isFinite(Date.parse(retry))))
|
|
129
|
+
return providerError({ reason: "rate_limited", status, upstream });
|
|
130
|
+
if (typeof upstream?.code === "string" && upstream.code.toLowerCase() === "insufficient_scope")
|
|
131
|
+
return providerError({ reason: "forbidden", status, upstream });
|
|
132
|
+
return providerError({ reason: "rejected", status, upstream });
|
|
133
|
+
}
|
|
134
|
+
function accountProviderError(error, accountId) {
|
|
135
|
+
const parsed = parseProviderError(error);
|
|
136
|
+
const account = Schema_exports.decodeUnknownOption(AccountId)(accountId);
|
|
137
|
+
if (Option_exports.isNone(parsed) || Option_exports.isNone(account)) return error;
|
|
138
|
+
return providerError({ ...parsed.value, accountId: account.value });
|
|
139
|
+
}
|
|
140
|
+
function graphqlProviderError(errors, status) {
|
|
141
|
+
const codes = errors.flatMap((error) => {
|
|
142
|
+
const parsed = Schema_exports.decodeUnknownOption(
|
|
143
|
+
Schema_exports.Struct({
|
|
144
|
+
type: Schema_exports.optional(Schema_exports.String),
|
|
145
|
+
extensions: Schema_exports.optional(Schema_exports.Struct({ code: Schema_exports.optional(Schema_exports.String) }))
|
|
146
|
+
})
|
|
147
|
+
)(error);
|
|
148
|
+
return Option_exports.isSome(parsed) ? [parsed.value.type, parsed.value.extensions?.code] : [];
|
|
149
|
+
});
|
|
150
|
+
if (codes.includes("RATE_LIMITED") || codes.includes("TOO_MANY_REQUESTS"))
|
|
151
|
+
return new ProviderError({ reason: "rate_limited", status });
|
|
152
|
+
if (codes.includes("UNAUTHENTICATED"))
|
|
153
|
+
return new ProviderError({ reason: "unauthorized", status });
|
|
154
|
+
if (codes.includes("FORBIDDEN")) return new ProviderError({ reason: "forbidden", status });
|
|
155
|
+
return void 0;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
export {
|
|
159
|
+
appCode,
|
|
160
|
+
fromPromise,
|
|
161
|
+
method,
|
|
162
|
+
toPromise,
|
|
163
|
+
isShortenedUpstream,
|
|
164
|
+
bodyUpstreamError,
|
|
165
|
+
providerError,
|
|
166
|
+
parseProviderError,
|
|
167
|
+
providerErrorDetail,
|
|
168
|
+
httpProviderError,
|
|
169
|
+
accountProviderError,
|
|
170
|
+
graphqlProviderError
|
|
171
|
+
};
|