@stigmer/sdk 3.34.0 → 3.36.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.
- package/activity.d.ts.map +1 -1
- package/activity.js.map +1 -1
- package/artifact-routing.d.ts.map +1 -1
- package/artifact-routing.js.map +1 -1
- package/authorization-config.d.ts.map +1 -1
- package/authorization-config.js.map +1 -1
- package/billing.d.ts.map +1 -1
- package/billing.js.map +1 -1
- package/config.d.ts.map +1 -1
- package/config.js.map +1 -1
- package/cursor-accounts.d.ts.map +1 -1
- package/cursor-accounts.js.map +1 -1
- package/ensure-identity-account.d.ts.map +1 -1
- package/ensure-identity-account.js.map +1 -1
- package/errors.d.ts.map +1 -1
- package/errors.js.map +1 -1
- package/execution/approval-provenance.d.ts.map +1 -1
- package/execution/approval-provenance.js.map +1 -1
- package/execution/conversation-rules.d.ts.map +1 -1
- package/execution/conversation-rules.js.map +1 -1
- package/execution/execution-phases.d.ts.map +1 -1
- package/execution/execution-phases.js.map +1 -1
- package/execution/file-review-fold.d.ts.map +1 -1
- package/execution/file-review-fold.js.map +1 -1
- package/execution/to-display-file-change.d.ts.map +1 -1
- package/execution/to-display-file-change.js.map +1 -1
- package/execution/tool-view.d.ts.map +1 -1
- package/execution/tool-view.js.map +1 -1
- package/execution/transcript.d.ts.map +1 -1
- package/execution/transcript.js.map +1 -1
- package/gen/agent.d.ts.map +1 -1
- package/gen/agent.js.map +1 -1
- package/gen/agentchannel.d.ts.map +1 -1
- package/gen/agentchannel.js.map +1 -1
- package/gen/agentexecution.d.ts.map +1 -1
- package/gen/agentexecution.js.map +1 -1
- package/gen/agentinstance.d.ts.map +1 -1
- package/gen/agentinstance.js.map +1 -1
- package/gen/agentshare.d.ts.map +1 -1
- package/gen/agentshare.js.map +1 -1
- package/gen/apikey.d.ts.map +1 -1
- package/gen/apikey.js.map +1 -1
- package/gen/artifact.d.ts.map +1 -1
- package/gen/artifact.js.map +1 -1
- package/gen/authorization-config.d.ts.map +1 -1
- package/gen/authorization-config.js +2 -2
- package/gen/authorization-config.js.map +1 -1
- package/gen/bidi-stream.d.ts.map +1 -1
- package/gen/bidi-stream.js.map +1 -1
- package/gen/channelapp.d.ts.map +1 -1
- package/gen/channelapp.js.map +1 -1
- package/gen/client.d.ts.map +1 -1
- package/gen/client.js.map +1 -1
- package/gen/environment.d.ts.map +1 -1
- package/gen/environment.js.map +1 -1
- package/gen/errors.d.ts.map +1 -1
- package/gen/errors.js.map +1 -1
- package/gen/executioncontext.d.ts.map +1 -1
- package/gen/executioncontext.js.map +1 -1
- package/gen/iampolicy.d.ts.map +1 -1
- package/gen/iampolicy.js.map +1 -1
- package/gen/identityaccount.d.ts.map +1 -1
- package/gen/identityaccount.js.map +1 -1
- package/gen/identityprovider.d.ts.map +1 -1
- package/gen/identityprovider.js.map +1 -1
- package/gen/invitation.d.ts.map +1 -1
- package/gen/invitation.js.map +1 -1
- package/gen/license.d.ts.map +1 -1
- package/gen/license.js.map +1 -1
- package/gen/mcpserver.d.ts.map +1 -1
- package/gen/mcpserver.js.map +1 -1
- package/gen/memory.d.ts.map +1 -1
- package/gen/memory.js.map +1 -1
- package/gen/oauthapp.d.ts.map +1 -1
- package/gen/oauthapp.js.map +1 -1
- package/gen/organization.d.ts.map +1 -1
- package/gen/organization.js.map +1 -1
- package/gen/plan.d.ts.map +1 -1
- package/gen/plan.js.map +1 -1
- package/gen/platformclient.d.ts.map +1 -1
- package/gen/platformclient.js.map +1 -1
- package/gen/plugin.d.ts.map +1 -1
- package/gen/plugin.js.map +1 -1
- package/gen/proto-utils.d.ts.map +1 -1
- package/gen/proto-utils.js.map +1 -1
- package/gen/resource-availability.d.ts.map +1 -1
- package/gen/resource-availability.js.map +1 -1
- package/gen/schedule.d.ts.map +1 -1
- package/gen/schedule.js.map +1 -1
- package/gen/session.d.ts.map +1 -1
- package/gen/session.js.map +1 -1
- package/gen/skill.d.ts.map +1 -1
- package/gen/skill.js.map +1 -1
- package/gen/subscription.d.ts.map +1 -1
- package/gen/subscription.js.map +1 -1
- package/gen/team.d.ts.map +1 -1
- package/gen/team.js.map +1 -1
- package/gen/types.d.ts.map +1 -1
- package/gen/types.js.map +1 -1
- package/gen/workflow.d.ts.map +1 -1
- package/gen/workflow.js.map +1 -1
- package/gen/workflowexecution.d.ts.map +1 -1
- package/gen/workflowexecution.js.map +1 -1
- package/gen/workflowinstance.d.ts.map +1 -1
- package/gen/workflowinstance.js.map +1 -1
- package/github.d.ts.map +1 -1
- package/github.js.map +1 -1
- package/guest-auth.d.ts.map +1 -1
- package/guest-auth.js.map +1 -1
- package/iam-principal.d.ts.map +1 -1
- package/iam-principal.js.map +1 -1
- package/iam-role.d.ts.map +1 -1
- package/iam-role.js.map +1 -1
- package/index.d.ts.map +1 -1
- package/index.js.map +1 -1
- package/internal/interceptors.d.ts.map +1 -1
- package/internal/interceptors.js.map +1 -1
- package/manifest/client.d.ts.map +1 -1
- package/manifest/client.js.map +1 -1
- package/manifest/document.d.ts.map +1 -1
- package/manifest/document.js.map +1 -1
- package/manifest/index.d.ts.map +1 -1
- package/manifest/index.js.map +1 -1
- package/manifest/parse.d.ts.map +1 -1
- package/manifest/parse.js.map +1 -1
- package/manifest/redaction.d.ts.map +1 -1
- package/manifest/redaction.js.map +1 -1
- package/manifest/registry.d.ts.map +1 -1
- package/manifest/registry.js.map +1 -1
- package/manifest/serialize.d.ts.map +1 -1
- package/manifest/serialize.js.map +1 -1
- package/mcpserver-connect.d.ts.map +1 -1
- package/mcpserver-connect.js.map +1 -1
- package/node.d.ts.map +1 -1
- package/node.js.map +1 -1
- package/package.json +2 -2
- package/platform-client-auth.d.ts.map +1 -1
- package/platform-client-auth.js.map +1 -1
- package/platform.d.ts.map +1 -1
- package/platform.js.map +1 -1
- package/plugin.d.ts.map +1 -1
- package/plugin.js.map +1 -1
- package/provider-standing.d.ts.map +1 -1
- package/provider-standing.js.map +1 -1
- package/resource-availability.d.ts.map +1 -1
- package/resource-availability.js.map +1 -1
- package/runner-adapter.d.ts.map +1 -1
- package/runner-adapter.js.map +1 -1
- package/search.d.ts.map +1 -1
- package/search.js.map +1 -1
- package/session.d.ts.map +1 -1
- package/session.js.map +1 -1
- package/sharing.d.ts.map +1 -1
- package/sharing.js.map +1 -1
- package/skill.d.ts.map +1 -1
- package/skill.js.map +1 -1
- package/src/gen/authorization-config.ts +2 -2
- package/stigmer.d.ts.map +1 -1
- package/stigmer.js.map +1 -1
- package/transport.d.ts.map +1 -1
- package/transport.js.map +1 -1
- package/__tests__/billing.test.d.ts +0 -2
- package/__tests__/billing.test.d.ts.map +0 -1
- package/__tests__/billing.test.js +0 -120
- package/__tests__/billing.test.js.map +0 -1
- package/__tests__/config.test.d.ts +0 -2
- package/__tests__/config.test.d.ts.map +0 -1
- package/__tests__/config.test.js +0 -35
- package/__tests__/config.test.js.map +0 -1
- package/__tests__/ensure-identity-account.test.d.ts +0 -2
- package/__tests__/ensure-identity-account.test.d.ts.map +0 -1
- package/__tests__/ensure-identity-account.test.js +0 -108
- package/__tests__/ensure-identity-account.test.js.map +0 -1
- package/__tests__/errors.test.d.ts +0 -2
- package/__tests__/errors.test.d.ts.map +0 -1
- package/__tests__/errors.test.js +0 -228
- package/__tests__/errors.test.js.map +0 -1
- package/__tests__/gen/errors.test.d.ts +0 -2
- package/__tests__/gen/errors.test.d.ts.map +0 -1
- package/__tests__/gen/errors.test.js +0 -97
- package/__tests__/gen/errors.test.js.map +0 -1
- package/__tests__/gen/invitation-client.test.d.ts +0 -2
- package/__tests__/gen/invitation-client.test.d.ts.map +0 -1
- package/__tests__/gen/invitation-client.test.js +0 -106
- package/__tests__/gen/invitation-client.test.js.map +0 -1
- package/__tests__/gen/proto-utils.test.d.ts +0 -2
- package/__tests__/gen/proto-utils.test.d.ts.map +0 -1
- package/__tests__/gen/proto-utils.test.js +0 -85
- package/__tests__/gen/proto-utils.test.js.map +0 -1
- package/__tests__/gen/session-client.test.d.ts +0 -2
- package/__tests__/gen/session-client.test.d.ts.map +0 -1
- package/__tests__/gen/session-client.test.js +0 -152
- package/__tests__/gen/session-client.test.js.map +0 -1
- package/__tests__/guest-auth.test.d.ts +0 -2
- package/__tests__/guest-auth.test.d.ts.map +0 -1
- package/__tests__/guest-auth.test.js +0 -223
- package/__tests__/guest-auth.test.js.map +0 -1
- package/__tests__/iam-principal.test.d.ts +0 -2
- package/__tests__/iam-principal.test.d.ts.map +0 -1
- package/__tests__/iam-principal.test.js +0 -65
- package/__tests__/iam-principal.test.js.map +0 -1
- package/__tests__/manifest.test.d.ts +0 -2
- package/__tests__/manifest.test.d.ts.map +0 -1
- package/__tests__/manifest.test.js +0 -306
- package/__tests__/manifest.test.js.map +0 -1
- package/__tests__/mcpserver-connect.test.d.ts +0 -2
- package/__tests__/mcpserver-connect.test.d.ts.map +0 -1
- package/__tests__/mcpserver-connect.test.js +0 -146
- package/__tests__/mcpserver-connect.test.js.map +0 -1
- package/__tests__/node.test.d.ts +0 -2
- package/__tests__/node.test.d.ts.map +0 -1
- package/__tests__/node.test.js +0 -67
- package/__tests__/node.test.js.map +0 -1
- package/__tests__/platform-client-auth.test.d.ts +0 -2
- package/__tests__/platform-client-auth.test.d.ts.map +0 -1
- package/__tests__/platform-client-auth.test.js +0 -59
- package/__tests__/platform-client-auth.test.js.map +0 -1
- package/__tests__/platform.test.d.ts +0 -2
- package/__tests__/platform.test.d.ts.map +0 -1
- package/__tests__/platform.test.js +0 -52
- package/__tests__/platform.test.js.map +0 -1
- package/__tests__/plugin.test.d.ts +0 -2
- package/__tests__/plugin.test.d.ts.map +0 -1
- package/__tests__/plugin.test.js +0 -74
- package/__tests__/plugin.test.js.map +0 -1
- package/__tests__/resource-availability.test.d.ts +0 -2
- package/__tests__/resource-availability.test.d.ts.map +0 -1
- package/__tests__/resource-availability.test.js +0 -80
- package/__tests__/resource-availability.test.js.map +0 -1
- package/__tests__/runner-adapter.test.d.ts +0 -2
- package/__tests__/runner-adapter.test.d.ts.map +0 -1
- package/__tests__/runner-adapter.test.js +0 -88
- package/__tests__/runner-adapter.test.js.map +0 -1
- package/__tests__/session.test.d.ts +0 -6
- package/__tests__/session.test.d.ts.map +0 -1
- package/__tests__/session.test.js +0 -50
- package/__tests__/session.test.js.map +0 -1
- package/__tests__/sharing.test.d.ts +0 -2
- package/__tests__/sharing.test.d.ts.map +0 -1
- package/__tests__/sharing.test.js +0 -106
- package/__tests__/sharing.test.js.map +0 -1
- package/__tests__/skill.test.d.ts +0 -2
- package/__tests__/skill.test.d.ts.map +0 -1
- package/__tests__/skill.test.js +0 -117
- package/__tests__/skill.test.js.map +0 -1
- package/__tests__/stigmer.test.d.ts +0 -2
- package/__tests__/stigmer.test.d.ts.map +0 -1
- package/__tests__/stigmer.test.js +0 -127
- package/__tests__/stigmer.test.js.map +0 -1
- package/__tests__/update-input-roundtrip.test.d.ts +0 -2
- package/__tests__/update-input-roundtrip.test.d.ts.map +0 -1
- package/__tests__/update-input-roundtrip.test.js +0 -775
- package/__tests__/update-input-roundtrip.test.js.map +0 -1
- package/__tests__/update-input.test.d.ts +0 -2
- package/__tests__/update-input.test.d.ts.map +0 -1
- package/__tests__/update-input.test.js +0 -188
- package/__tests__/update-input.test.js.map +0 -1
- package/execution/__tests__/approval-provenance.test.d.ts +0 -2
- package/execution/__tests__/approval-provenance.test.d.ts.map +0 -1
- package/execution/__tests__/approval-provenance.test.js +0 -42
- package/execution/__tests__/approval-provenance.test.js.map +0 -1
- package/execution/__tests__/file-review-fold.corpus.test.d.ts +0 -2
- package/execution/__tests__/file-review-fold.corpus.test.d.ts.map +0 -1
- package/execution/__tests__/file-review-fold.corpus.test.js +0 -82
- package/execution/__tests__/file-review-fold.corpus.test.js.map +0 -1
- package/execution/__tests__/file-review-fold.test.d.ts +0 -2
- package/execution/__tests__/file-review-fold.test.d.ts.map +0 -1
- package/execution/__tests__/file-review-fold.test.js +0 -184
- package/execution/__tests__/file-review-fold.test.js.map +0 -1
- package/execution/__tests__/to-display-file-change.test.d.ts +0 -2
- package/execution/__tests__/to-display-file-change.test.d.ts.map +0 -1
- package/execution/__tests__/to-display-file-change.test.js +0 -81
- package/execution/__tests__/to-display-file-change.test.js.map +0 -1
- package/execution/__tests__/tool-view.file-changes.test.d.ts +0 -2
- package/execution/__tests__/tool-view.file-changes.test.d.ts.map +0 -1
- package/execution/__tests__/tool-view.file-changes.test.js +0 -86
- package/execution/__tests__/tool-view.file-changes.test.js.map +0 -1
- package/execution/__tests__/tool-view.fixtures.test.d.ts +0 -2
- package/execution/__tests__/tool-view.fixtures.test.d.ts.map +0 -1
- package/execution/__tests__/tool-view.fixtures.test.js +0 -152
- package/execution/__tests__/tool-view.fixtures.test.js.map +0 -1
- package/execution/__tests__/tool-view.output-ref.test.d.ts +0 -2
- package/execution/__tests__/tool-view.output-ref.test.d.ts.map +0 -1
- package/execution/__tests__/tool-view.output-ref.test.js +0 -64
- package/execution/__tests__/tool-view.output-ref.test.js.map +0 -1
- package/execution/__tests__/tool-view.read.test.d.ts +0 -2
- package/execution/__tests__/tool-view.read.test.d.ts.map +0 -1
- package/execution/__tests__/tool-view.read.test.js +0 -56
- package/execution/__tests__/tool-view.read.test.js.map +0 -1
- package/execution/__tests__/tool-view.search.test.d.ts +0 -2
- package/execution/__tests__/tool-view.search.test.d.ts.map +0 -1
- package/execution/__tests__/tool-view.search.test.js +0 -200
- package/execution/__tests__/tool-view.search.test.js.map +0 -1
- package/execution/__tests__/tool-view.shell.test.d.ts +0 -2
- package/execution/__tests__/tool-view.shell.test.d.ts.map +0 -1
- package/execution/__tests__/tool-view.shell.test.js +0 -104
- package/execution/__tests__/tool-view.shell.test.js.map +0 -1
- package/execution/__tests__/transcript.test.d.ts +0 -2
- package/execution/__tests__/transcript.test.d.ts.map +0 -1
- package/execution/__tests__/transcript.test.js +0 -591
- package/execution/__tests__/transcript.test.js.map +0 -1
- package/node.test.d.ts +0 -2
- package/node.test.d.ts.map +0 -1
- package/node.test.js +0 -35
- package/node.test.js.map +0 -1
- package/src/__tests__/billing.test.ts +0 -146
- package/src/__tests__/config.test.ts +0 -52
- package/src/__tests__/ensure-identity-account.test.ts +0 -146
- package/src/__tests__/errors.test.ts +0 -349
- package/src/__tests__/gen/errors.test.ts +0 -138
- package/src/__tests__/gen/invitation-client.test.ts +0 -132
- package/src/__tests__/gen/proto-utils.test.ts +0 -99
- package/src/__tests__/gen/session-client.test.ts +0 -208
- package/src/__tests__/guest-auth.test.ts +0 -287
- package/src/__tests__/iam-principal.test.ts +0 -82
- package/src/__tests__/manifest.test.ts +0 -362
- package/src/__tests__/mcpserver-connect.test.ts +0 -181
- package/src/__tests__/node.test.ts +0 -74
- package/src/__tests__/platform-client-auth.test.ts +0 -76
- package/src/__tests__/platform.test.ts +0 -74
- package/src/__tests__/plugin.test.ts +0 -92
- package/src/__tests__/resource-availability.test.ts +0 -118
- package/src/__tests__/runner-adapter.test.ts +0 -122
- package/src/__tests__/session.test.ts +0 -66
- package/src/__tests__/sharing.test.ts +0 -159
- package/src/__tests__/skill.test.ts +0 -150
- package/src/__tests__/stigmer.test.ts +0 -170
- package/src/__tests__/update-input-roundtrip.test.ts +0 -1007
- package/src/__tests__/update-input.test.ts +0 -250
- package/src/execution/__tests__/approval-provenance.test.ts +0 -60
- package/src/execution/__tests__/file-review-fold.corpus.test.ts +0 -127
- package/src/execution/__tests__/file-review-fold.test.ts +0 -281
- package/src/execution/__tests__/to-display-file-change.test.ts +0 -106
- package/src/execution/__tests__/tool-view.file-changes.test.ts +0 -100
- package/src/execution/__tests__/tool-view.fixtures.test.ts +0 -225
- package/src/execution/__tests__/tool-view.output-ref.test.ts +0 -76
- package/src/execution/__tests__/tool-view.read.test.ts +0 -71
- package/src/execution/__tests__/tool-view.search.test.ts +0 -264
- package/src/execution/__tests__/tool-view.shell.test.ts +0 -127
- package/src/execution/__tests__/transcript.golden.md +0 -100
- package/src/execution/__tests__/transcript.test.ts +0 -697
- package/src/node.test.ts +0 -38
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from "vitest";
|
|
2
|
-
import { create, toBinary, fromBinary } from "@bufbuild/protobuf";
|
|
3
|
-
import { timestampDate } from "@bufbuild/protobuf/wkt";
|
|
4
|
-
import { InvitationSchema } from "@stigmer/protos/ai/stigmer/iam/invitation/v1/api_pb";
|
|
5
|
-
import { InvitationSpecSchema } from "@stigmer/protos/ai/stigmer/iam/invitation/v1/spec_pb";
|
|
6
|
-
import { IamRole } from "@stigmer/protos/ai/stigmer/iam/v1/enum_pb";
|
|
7
|
-
import { ApiResourceMetadataSchema } from "@stigmer/protos/ai/stigmer/commons/apiresource/metadata_pb";
|
|
8
|
-
import { stripUndefined, toTimestamp } from "../../gen/proto-utils";
|
|
9
|
-
/**
|
|
10
|
-
* Exercises the same code path as the generated `buildInvitationProto` to
|
|
11
|
-
* verify that Timestamp fields serialize without error after the codegen fix.
|
|
12
|
-
*/
|
|
13
|
-
function buildInvitationProto(input) {
|
|
14
|
-
const expiresAt = input.expiresAt !== undefined ? toTimestamp(input.expiresAt) : undefined;
|
|
15
|
-
return Object.assign(create(InvitationSchema), {
|
|
16
|
-
apiVersion: "iam.stigmer.ai/v1",
|
|
17
|
-
kind: "Invitation",
|
|
18
|
-
metadata: Object.assign(create(ApiResourceMetadataSchema), {
|
|
19
|
-
name: input.name,
|
|
20
|
-
org: input.org,
|
|
21
|
-
}),
|
|
22
|
-
spec: Object.assign(create(InvitationSpecSchema), stripUndefined({
|
|
23
|
-
role: input.role,
|
|
24
|
-
maxRedemptions: input.maxRedemptions,
|
|
25
|
-
expiresAt,
|
|
26
|
-
label: input.label,
|
|
27
|
-
})),
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
describe("buildInvitationProto", () => {
|
|
31
|
-
it("produces a message with a valid Timestamp from a Date", () => {
|
|
32
|
-
const expiresAt = new Date("2026-06-19T12:00:00.000Z");
|
|
33
|
-
const msg = buildInvitationProto({
|
|
34
|
-
name: "test-invite",
|
|
35
|
-
org: "acme",
|
|
36
|
-
role: IamRole.viewer,
|
|
37
|
-
expiresAt,
|
|
38
|
-
});
|
|
39
|
-
expect(msg.spec?.expiresAt).toBeDefined();
|
|
40
|
-
expect(msg.spec.expiresAt.seconds).toBe(BigInt(Math.floor(expiresAt.getTime() / 1000)));
|
|
41
|
-
expect(timestampDate(msg.spec.expiresAt).getTime()).toBe(expiresAt.getTime());
|
|
42
|
-
});
|
|
43
|
-
it("produces a message with a valid Timestamp from an ISO string", () => {
|
|
44
|
-
const isoString = "2026-07-01T00:00:00.000Z";
|
|
45
|
-
const msg = buildInvitationProto({
|
|
46
|
-
name: "string-invite",
|
|
47
|
-
org: "acme",
|
|
48
|
-
role: IamRole.member,
|
|
49
|
-
expiresAt: isoString,
|
|
50
|
-
});
|
|
51
|
-
const expected = new Date(isoString);
|
|
52
|
-
expect(msg.spec?.expiresAt).toBeDefined();
|
|
53
|
-
expect(msg.spec.expiresAt.seconds).toBe(BigInt(Math.floor(expected.getTime() / 1000)));
|
|
54
|
-
});
|
|
55
|
-
it("serializes to binary without error (the original bug)", () => {
|
|
56
|
-
const msg = buildInvitationProto({
|
|
57
|
-
name: "binary-test",
|
|
58
|
-
org: "acme",
|
|
59
|
-
role: IamRole.admin,
|
|
60
|
-
expiresAt: new Date(Date.now() + 7 * 86_400_000),
|
|
61
|
-
maxRedemptions: 1,
|
|
62
|
-
label: "test label",
|
|
63
|
-
});
|
|
64
|
-
const bytes = toBinary(InvitationSchema, msg);
|
|
65
|
-
expect(bytes.length).toBeGreaterThan(0);
|
|
66
|
-
const decoded = fromBinary(InvitationSchema, bytes);
|
|
67
|
-
expect(decoded.spec?.expiresAt).toBeDefined();
|
|
68
|
-
expect(decoded.spec.expiresAt.seconds).toBe(msg.spec.expiresAt.seconds);
|
|
69
|
-
expect(decoded.spec?.role).toBe(IamRole.admin);
|
|
70
|
-
expect(decoded.spec?.maxRedemptions).toBe(1);
|
|
71
|
-
expect(decoded.spec?.label).toBe("test label");
|
|
72
|
-
expect(decoded.metadata?.name).toBe("binary-test");
|
|
73
|
-
expect(decoded.metadata?.org).toBe("acme");
|
|
74
|
-
});
|
|
75
|
-
it("handles 7-day expiry (matches UI default options)", () => {
|
|
76
|
-
const now = Date.now();
|
|
77
|
-
const sevenDays = new Date(now + 7 * 86_400_000);
|
|
78
|
-
const msg = buildInvitationProto({
|
|
79
|
-
name: "7day",
|
|
80
|
-
org: "test-org",
|
|
81
|
-
role: IamRole.viewer,
|
|
82
|
-
expiresAt: sevenDays,
|
|
83
|
-
});
|
|
84
|
-
const bytes = toBinary(InvitationSchema, msg);
|
|
85
|
-
const decoded = fromBinary(InvitationSchema, bytes);
|
|
86
|
-
const decodedDate = timestampDate(decoded.spec.expiresAt);
|
|
87
|
-
const diffMs = Math.abs(decodedDate.getTime() - sevenDays.getTime());
|
|
88
|
-
expect(diffMs).toBeLessThan(1000);
|
|
89
|
-
});
|
|
90
|
-
it("handles 30-day expiry (matches UI default options)", () => {
|
|
91
|
-
const now = Date.now();
|
|
92
|
-
const thirtyDays = new Date(now + 30 * 86_400_000);
|
|
93
|
-
const msg = buildInvitationProto({
|
|
94
|
-
name: "30day",
|
|
95
|
-
org: "test-org",
|
|
96
|
-
role: IamRole.owner,
|
|
97
|
-
expiresAt: thirtyDays,
|
|
98
|
-
});
|
|
99
|
-
const bytes = toBinary(InvitationSchema, msg);
|
|
100
|
-
const decoded = fromBinary(InvitationSchema, bytes);
|
|
101
|
-
const decodedDate = timestampDate(decoded.spec.expiresAt);
|
|
102
|
-
const diffMs = Math.abs(decodedDate.getTime() - thirtyDays.getTime());
|
|
103
|
-
expect(diffMs).toBeLessThan(1000);
|
|
104
|
-
});
|
|
105
|
-
});
|
|
106
|
-
//# sourceMappingURL=invitation-client.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"invitation-client.test.js","sourceRoot":"","sources":["../../../src/__tests__/gen/invitation-client.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"proto-utils.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/gen/proto-utils.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from "vitest";
|
|
2
|
-
import { stripUndefined, toTimestamp } from "../../gen/proto-utils";
|
|
3
|
-
import { timestampDate } from "@bufbuild/protobuf/wkt";
|
|
4
|
-
describe("stripUndefined", () => {
|
|
5
|
-
it("removes keys with undefined values", () => {
|
|
6
|
-
const result = stripUndefined({ a: 1, b: undefined, c: "hello" });
|
|
7
|
-
expect(result).toEqual({ a: 1, c: "hello" });
|
|
8
|
-
expect("b" in result).toBe(false);
|
|
9
|
-
});
|
|
10
|
-
it("preserves null values (falsy but defined)", () => {
|
|
11
|
-
const result = stripUndefined({ a: null });
|
|
12
|
-
expect(result).toEqual({ a: null });
|
|
13
|
-
});
|
|
14
|
-
it("preserves 0 (falsy but defined)", () => {
|
|
15
|
-
const result = stripUndefined({ count: 0 });
|
|
16
|
-
expect(result).toEqual({ count: 0 });
|
|
17
|
-
});
|
|
18
|
-
it("preserves empty string (falsy but defined)", () => {
|
|
19
|
-
const result = stripUndefined({ name: "" });
|
|
20
|
-
expect(result).toEqual({ name: "" });
|
|
21
|
-
});
|
|
22
|
-
it("preserves false (falsy but defined)", () => {
|
|
23
|
-
const result = stripUndefined({ enabled: false });
|
|
24
|
-
expect(result).toEqual({ enabled: false });
|
|
25
|
-
});
|
|
26
|
-
it("returns empty object when all values are undefined", () => {
|
|
27
|
-
const result = stripUndefined({ a: undefined, b: undefined });
|
|
28
|
-
expect(result).toEqual({});
|
|
29
|
-
});
|
|
30
|
-
it("returns all keys when nothing is undefined", () => {
|
|
31
|
-
const input = { x: 1, y: "two", z: true };
|
|
32
|
-
const result = stripUndefined(input);
|
|
33
|
-
expect(result).toEqual(input);
|
|
34
|
-
});
|
|
35
|
-
it("preserves nested objects without deep-stripping", () => {
|
|
36
|
-
const nested = { inner: undefined };
|
|
37
|
-
const result = stripUndefined({ outer: nested });
|
|
38
|
-
expect(result).toEqual({ outer: nested });
|
|
39
|
-
expect(result.outer).toBe(nested);
|
|
40
|
-
});
|
|
41
|
-
it("returns empty object for empty input", () => {
|
|
42
|
-
const result = stripUndefined({});
|
|
43
|
-
expect(result).toEqual({});
|
|
44
|
-
});
|
|
45
|
-
});
|
|
46
|
-
describe("toTimestamp", () => {
|
|
47
|
-
it("converts a Date to a Timestamp with correct seconds", () => {
|
|
48
|
-
const date = new Date("2026-05-19T12:00:00.000Z");
|
|
49
|
-
const ts = toTimestamp(date);
|
|
50
|
-
expect(ts.seconds).toBe(BigInt(Math.floor(date.getTime() / 1000)));
|
|
51
|
-
expect(ts.nanos).toBe(0);
|
|
52
|
-
});
|
|
53
|
-
it("converts a Date with milliseconds to a Timestamp with nanos", () => {
|
|
54
|
-
const date = new Date("2026-01-15T08:30:00.456Z");
|
|
55
|
-
const ts = toTimestamp(date);
|
|
56
|
-
const expectedSeconds = BigInt(Math.floor(date.getTime() / 1000));
|
|
57
|
-
expect(ts.seconds).toBe(expectedSeconds);
|
|
58
|
-
expect(ts.nanos).toBe(456_000_000);
|
|
59
|
-
});
|
|
60
|
-
it("converts an ISO string to a Timestamp", () => {
|
|
61
|
-
const isoString = "2026-06-01T00:00:00.000Z";
|
|
62
|
-
const ts = toTimestamp(isoString);
|
|
63
|
-
const expected = new Date(isoString);
|
|
64
|
-
expect(ts.seconds).toBe(BigInt(Math.floor(expected.getTime() / 1000)));
|
|
65
|
-
});
|
|
66
|
-
it("roundtrips correctly through timestampDate", () => {
|
|
67
|
-
const original = new Date("2026-03-10T15:45:30.000Z");
|
|
68
|
-
const ts = toTimestamp(original);
|
|
69
|
-
const roundtripped = timestampDate(ts);
|
|
70
|
-
expect(roundtripped.getTime()).toBe(original.getTime());
|
|
71
|
-
});
|
|
72
|
-
it("handles epoch (Unix timestamp 0)", () => {
|
|
73
|
-
const epoch = new Date(0);
|
|
74
|
-
const ts = toTimestamp(epoch);
|
|
75
|
-
expect(ts.seconds).toBe(BigInt(0));
|
|
76
|
-
expect(ts.nanos).toBe(0);
|
|
77
|
-
});
|
|
78
|
-
it("handles far-future dates", () => {
|
|
79
|
-
const future = new Date("2099-12-31T23:59:59.000Z");
|
|
80
|
-
const ts = toTimestamp(future);
|
|
81
|
-
expect(ts.seconds).toBe(BigInt(Math.floor(future.getTime() / 1000)));
|
|
82
|
-
expect(timestampDate(ts).getTime()).toBe(future.getTime());
|
|
83
|
-
});
|
|
84
|
-
});
|
|
85
|
-
//# sourceMappingURL=proto-utils.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"proto-utils.test.js","sourceRoot":"","sources":["../../../src/__tests__/gen/proto-utils.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session-client.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/gen/session-client.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,152 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, beforeEach } from "vitest";
|
|
2
|
-
import { ExecutionTarget } from "@stigmer/protos/ai/stigmer/agentic/session/v1/enum_pb";
|
|
3
|
-
import { SessionClient } from "../../gen/session";
|
|
4
|
-
function createCapturingTransport() {
|
|
5
|
-
const captured = [];
|
|
6
|
-
const transport = {
|
|
7
|
-
unary: async (method, _signal, _timeout, _header, message) => ({
|
|
8
|
-
header: new Headers(),
|
|
9
|
-
trailer: new Headers(),
|
|
10
|
-
message,
|
|
11
|
-
}),
|
|
12
|
-
stream: async () => {
|
|
13
|
-
throw new Error("streaming not implemented in test transport");
|
|
14
|
-
},
|
|
15
|
-
};
|
|
16
|
-
const originalUnary = transport.unary;
|
|
17
|
-
transport.unary = async (method, signal, timeout, header, message, ...rest) => {
|
|
18
|
-
captured.push({ methodName: method.name, message });
|
|
19
|
-
return originalUnary(method, signal, timeout, header, message, ...rest);
|
|
20
|
-
};
|
|
21
|
-
return { transport, captured };
|
|
22
|
-
}
|
|
23
|
-
describe("SessionClient proto serialization", () => {
|
|
24
|
-
let client;
|
|
25
|
-
let captured;
|
|
26
|
-
beforeEach(() => {
|
|
27
|
-
const ctx = createCapturingTransport();
|
|
28
|
-
client = new SessionClient(ctx.transport);
|
|
29
|
-
captured = ctx.captured;
|
|
30
|
-
});
|
|
31
|
-
it("sets apiVersion and kind on the proto", async () => {
|
|
32
|
-
await client.create({ name: "test-session", org: "my-org" });
|
|
33
|
-
const proto = captured[0].message;
|
|
34
|
-
expect(proto.apiVersion).toBe("agentic.stigmer.ai/v1");
|
|
35
|
-
expect(proto.kind).toBe("Session");
|
|
36
|
-
});
|
|
37
|
-
it("sets required fields on metadata", async () => {
|
|
38
|
-
await client.create({ name: "my-session", org: "acme" });
|
|
39
|
-
const proto = captured[0].message;
|
|
40
|
-
expect(proto.metadata?.name).toBe("my-session");
|
|
41
|
-
expect(proto.metadata?.org).toBe("acme");
|
|
42
|
-
});
|
|
43
|
-
it("sets optional spec fields when provided", async () => {
|
|
44
|
-
const input = {
|
|
45
|
-
name: "s1",
|
|
46
|
-
org: "o1",
|
|
47
|
-
agentInstanceId: "ai-123",
|
|
48
|
-
subject: "Help with deployment",
|
|
49
|
-
};
|
|
50
|
-
await client.create(input);
|
|
51
|
-
const proto = captured[0].message;
|
|
52
|
-
expect(proto.spec?.agentInstanceId).toBe("ai-123");
|
|
53
|
-
expect(proto.spec?.subject).toBe("Help with deployment");
|
|
54
|
-
});
|
|
55
|
-
it("does not overwrite protobuf defaults when optional fields are omitted", async () => {
|
|
56
|
-
await client.create({ name: "minimal", org: "org" });
|
|
57
|
-
const proto = captured[0].message;
|
|
58
|
-
expect(proto.spec?.agentInstanceId).toBe("");
|
|
59
|
-
expect(proto.spec?.subject).toBe("");
|
|
60
|
-
});
|
|
61
|
-
it("serializes executionTarget when provided", async () => {
|
|
62
|
-
await client.create({
|
|
63
|
-
name: "s1",
|
|
64
|
-
org: "o1",
|
|
65
|
-
executionTarget: ExecutionTarget.LOCAL,
|
|
66
|
-
});
|
|
67
|
-
const proto = captured[0].message;
|
|
68
|
-
expect(proto.spec?.executionTarget).toBe(ExecutionTarget.LOCAL);
|
|
69
|
-
});
|
|
70
|
-
it("serializes metadata map when provided", async () => {
|
|
71
|
-
await client.create({
|
|
72
|
-
name: "s1",
|
|
73
|
-
org: "o1",
|
|
74
|
-
metadata: { env: "production", region: "us-east-1" },
|
|
75
|
-
});
|
|
76
|
-
const proto = captured[0].message;
|
|
77
|
-
expect(proto.spec?.metadata).toEqual({
|
|
78
|
-
env: "production",
|
|
79
|
-
region: "us-east-1",
|
|
80
|
-
});
|
|
81
|
-
});
|
|
82
|
-
it("serializes workspace entries with git repo source", async () => {
|
|
83
|
-
await client.create({
|
|
84
|
-
name: "s1",
|
|
85
|
-
org: "o1",
|
|
86
|
-
workspaceEntries: [
|
|
87
|
-
{
|
|
88
|
-
name: "my-repo",
|
|
89
|
-
source: {
|
|
90
|
-
gitRepo: {
|
|
91
|
-
url: "https://github.com/example/repo.git",
|
|
92
|
-
branch: "main",
|
|
93
|
-
},
|
|
94
|
-
},
|
|
95
|
-
},
|
|
96
|
-
],
|
|
97
|
-
});
|
|
98
|
-
const proto = captured[0].message;
|
|
99
|
-
const entries = proto.spec?.workspaceEntries;
|
|
100
|
-
expect(entries).toHaveLength(1);
|
|
101
|
-
expect(entries[0].name).toBe("my-repo");
|
|
102
|
-
const source = entries[0].source;
|
|
103
|
-
expect(source?.source?.case).toBe("gitRepo");
|
|
104
|
-
if (source?.source?.case === "gitRepo") {
|
|
105
|
-
expect(source.source.value.url).toBe("https://github.com/example/repo.git");
|
|
106
|
-
expect(source.source.value.branch).toBe("main");
|
|
107
|
-
}
|
|
108
|
-
});
|
|
109
|
-
it("serializes workspace entries with local path source", async () => {
|
|
110
|
-
await client.create({
|
|
111
|
-
name: "s1",
|
|
112
|
-
org: "o1",
|
|
113
|
-
workspaceEntries: [
|
|
114
|
-
{
|
|
115
|
-
name: "local",
|
|
116
|
-
source: {
|
|
117
|
-
localPath: { path: "/home/user/project" },
|
|
118
|
-
},
|
|
119
|
-
},
|
|
120
|
-
],
|
|
121
|
-
});
|
|
122
|
-
const proto = captured[0].message;
|
|
123
|
-
const entries = proto.spec?.workspaceEntries;
|
|
124
|
-
expect(entries).toHaveLength(1);
|
|
125
|
-
const source = entries[0].source;
|
|
126
|
-
expect(source?.source?.case).toBe("localPath");
|
|
127
|
-
if (source?.source?.case === "localPath") {
|
|
128
|
-
expect(source.source.value.path).toBe("/home/user/project");
|
|
129
|
-
}
|
|
130
|
-
});
|
|
131
|
-
it("routes create through the command controller", async () => {
|
|
132
|
-
await client.create({ name: "s1", org: "o1" });
|
|
133
|
-
expect(captured[0].methodName).toBe("create");
|
|
134
|
-
});
|
|
135
|
-
it("routes apply through the command controller", async () => {
|
|
136
|
-
await client.apply({ name: "s1", org: "o1" });
|
|
137
|
-
expect(captured[0].methodName).toBe("apply");
|
|
138
|
-
});
|
|
139
|
-
it("routes get through the query controller with SessionId", async () => {
|
|
140
|
-
await client.get("session-id-123");
|
|
141
|
-
const message = captured[0].message;
|
|
142
|
-
expect(captured[0].methodName).toBe("get");
|
|
143
|
-
expect(message.value).toBe("session-id-123");
|
|
144
|
-
});
|
|
145
|
-
it("routes delete through the command controller with SessionId", async () => {
|
|
146
|
-
await client.delete("session-id-456");
|
|
147
|
-
const message = captured[0].message;
|
|
148
|
-
expect(captured[0].methodName).toBe("delete");
|
|
149
|
-
expect(message.value).toBe("session-id-456");
|
|
150
|
-
});
|
|
151
|
-
});
|
|
152
|
-
//# sourceMappingURL=session-client.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session-client.test.js","sourceRoot":"","sources":["../../../src/__tests__/gen/session-client.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"guest-auth.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/guest-auth.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,223 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
|
|
2
|
-
import { create } from "@bufbuild/protobuf";
|
|
3
|
-
import { MintGuestTokenResponseSchema } from "@stigmer/protos/ai/stigmer/iam/platformclient/v1/token_pb";
|
|
4
|
-
import { ConnectError, Code } from "@connectrpc/connect";
|
|
5
|
-
// Intercept the token client so no transport is exercised. The mock
|
|
6
|
-
// preserves the real module (create/Code/ConnectError) and only stubs
|
|
7
|
-
// createClient, which GuestAuth uses to build its RPC client.
|
|
8
|
-
const mintGuestToken = vi.fn();
|
|
9
|
-
vi.mock("@connectrpc/connect", async (importOriginal) => {
|
|
10
|
-
const actual = await importOriginal();
|
|
11
|
-
return {
|
|
12
|
-
...actual,
|
|
13
|
-
createClient: () => ({ mintGuestToken }),
|
|
14
|
-
};
|
|
15
|
-
});
|
|
16
|
-
import { createGuestAuth, GuestAuth } from "../guest-auth";
|
|
17
|
-
const CONFIG = {
|
|
18
|
-
baseUrl: "https://api.stigmer.ai",
|
|
19
|
-
org: "acme",
|
|
20
|
-
slug: "support-agent",
|
|
21
|
-
};
|
|
22
|
-
function createMemoryStorage() {
|
|
23
|
-
const store = new Map();
|
|
24
|
-
return {
|
|
25
|
-
store,
|
|
26
|
-
getItem: (key) => store.get(key) ?? null,
|
|
27
|
-
setItem: (key, value) => {
|
|
28
|
-
store.set(key, value);
|
|
29
|
-
},
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
function mintResponse(overrides) {
|
|
33
|
-
return create(MintGuestTokenResponseSchema, {
|
|
34
|
-
accessToken: overrides?.accessToken ?? "guest-jwt-1",
|
|
35
|
-
tokenType: "Bearer",
|
|
36
|
-
expiresIn: overrides?.expiresIn ?? 900,
|
|
37
|
-
guestCookieId: overrides?.guestCookieId ?? "cookie-abc",
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
beforeEach(() => {
|
|
41
|
-
mintGuestToken.mockReset();
|
|
42
|
-
vi.useFakeTimers();
|
|
43
|
-
});
|
|
44
|
-
afterEach(() => {
|
|
45
|
-
vi.useRealTimers();
|
|
46
|
-
});
|
|
47
|
-
describe("createGuestAuth", () => {
|
|
48
|
-
it("throws when baseUrl is missing", () => {
|
|
49
|
-
expect(() => createGuestAuth({ ...CONFIG, baseUrl: "" })).toThrow("baseUrl is required");
|
|
50
|
-
});
|
|
51
|
-
it("throws when org is missing", () => {
|
|
52
|
-
expect(() => createGuestAuth({ ...CONFIG, org: "" })).toThrow("org is required");
|
|
53
|
-
});
|
|
54
|
-
it("throws when slug is missing", () => {
|
|
55
|
-
expect(() => createGuestAuth({ ...CONFIG, slug: "" })).toThrow("slug is required");
|
|
56
|
-
});
|
|
57
|
-
it("returns a GuestAuth instance with valid config", () => {
|
|
58
|
-
expect(createGuestAuth(CONFIG)).toBeInstanceOf(GuestAuth);
|
|
59
|
-
});
|
|
60
|
-
});
|
|
61
|
-
describe("GuestAuth.getAccessToken", () => {
|
|
62
|
-
it("mints on first call and sends an empty guest id", async () => {
|
|
63
|
-
mintGuestToken.mockResolvedValue(mintResponse());
|
|
64
|
-
const auth = createGuestAuth({ ...CONFIG, storage: createMemoryStorage() });
|
|
65
|
-
const token = await auth.getAccessToken();
|
|
66
|
-
expect(token).toBe("guest-jwt-1");
|
|
67
|
-
expect(mintGuestToken).toHaveBeenCalledTimes(1);
|
|
68
|
-
expect(mintGuestToken.mock.calls[0][0]).toMatchObject({
|
|
69
|
-
org: "acme",
|
|
70
|
-
slug: "support-agent",
|
|
71
|
-
guestCookieId: "",
|
|
72
|
-
// No embedOrigin configured (the unframed hosted page): the field
|
|
73
|
-
// must stay empty so the server's absence-means-exempt rule applies.
|
|
74
|
-
embedOrigin: "",
|
|
75
|
-
});
|
|
76
|
-
});
|
|
77
|
-
it("passes the configured embedOrigin through to every mint", async () => {
|
|
78
|
-
mintGuestToken.mockResolvedValue(mintResponse());
|
|
79
|
-
const auth = createGuestAuth({
|
|
80
|
-
...CONFIG,
|
|
81
|
-
storage: createMemoryStorage(),
|
|
82
|
-
embedOrigin: "https://docs.example.com",
|
|
83
|
-
});
|
|
84
|
-
await auth.getAccessToken();
|
|
85
|
-
// Expire the cached token, forcing a re-mint — the origin must persist.
|
|
86
|
-
vi.advanceTimersByTime(900_000);
|
|
87
|
-
await auth.getAccessToken();
|
|
88
|
-
expect(mintGuestToken).toHaveBeenCalledTimes(2);
|
|
89
|
-
for (const call of mintGuestToken.mock.calls) {
|
|
90
|
-
expect(call[0]).toMatchObject({ embedOrigin: "https://docs.example.com" });
|
|
91
|
-
}
|
|
92
|
-
});
|
|
93
|
-
it("passes the configured linkToken through to every mint", async () => {
|
|
94
|
-
mintGuestToken.mockResolvedValue(mintResponse());
|
|
95
|
-
const auth = createGuestAuth({
|
|
96
|
-
...CONFIG,
|
|
97
|
-
storage: createMemoryStorage(),
|
|
98
|
-
linkToken: "tok123",
|
|
99
|
-
});
|
|
100
|
-
await auth.getAccessToken();
|
|
101
|
-
// Expire the cached token, forcing a re-mint — the token must persist
|
|
102
|
-
// so a locked link keeps working across silent re-mints.
|
|
103
|
-
vi.advanceTimersByTime(900_000);
|
|
104
|
-
await auth.getAccessToken();
|
|
105
|
-
expect(mintGuestToken).toHaveBeenCalledTimes(2);
|
|
106
|
-
for (const call of mintGuestToken.mock.calls) {
|
|
107
|
-
expect(call[0]).toMatchObject({ linkToken: "tok123" });
|
|
108
|
-
}
|
|
109
|
-
});
|
|
110
|
-
it("sends an empty linkToken when none is configured (plain link)", async () => {
|
|
111
|
-
mintGuestToken.mockResolvedValue(mintResponse());
|
|
112
|
-
const auth = createGuestAuth({ ...CONFIG, storage: createMemoryStorage() });
|
|
113
|
-
await auth.getAccessToken();
|
|
114
|
-
expect(mintGuestToken.mock.calls[0][0]).toMatchObject({ linkToken: "" });
|
|
115
|
-
});
|
|
116
|
-
it("rejects with permission-denied when the embed origin is refused", async () => {
|
|
117
|
-
mintGuestToken.mockRejectedValue(new ConnectError("This agent can\u2019t be embedded on this site.", Code.PermissionDenied));
|
|
118
|
-
const auth = createGuestAuth({
|
|
119
|
-
...CONFIG,
|
|
120
|
-
storage: createMemoryStorage(),
|
|
121
|
-
embedOrigin: "https://evil.example.com",
|
|
122
|
-
});
|
|
123
|
-
await expect(auth.getAccessToken()).rejects.toMatchObject({
|
|
124
|
-
code: "permission-denied",
|
|
125
|
-
});
|
|
126
|
-
});
|
|
127
|
-
it("persists the server-issued guest id and presents it on re-mint", async () => {
|
|
128
|
-
const storage = createMemoryStorage();
|
|
129
|
-
mintGuestToken.mockResolvedValue(mintResponse({ guestCookieId: "cookie-abc" }));
|
|
130
|
-
const auth = createGuestAuth({ ...CONFIG, storage });
|
|
131
|
-
await auth.getAccessToken();
|
|
132
|
-
expect(storage.store.get("stigmer:guest-id:acme")).toBe("cookie-abc");
|
|
133
|
-
expect(auth.guestCookieId).toBe("cookie-abc");
|
|
134
|
-
// Expire the cached token, forcing a second mint.
|
|
135
|
-
vi.advanceTimersByTime(900_000);
|
|
136
|
-
await auth.getAccessToken();
|
|
137
|
-
expect(mintGuestToken).toHaveBeenCalledTimes(2);
|
|
138
|
-
expect(mintGuestToken.mock.calls[1][0]).toMatchObject({
|
|
139
|
-
guestCookieId: "cookie-abc",
|
|
140
|
-
});
|
|
141
|
-
});
|
|
142
|
-
it("restores a persisted guest id from a prior visit", async () => {
|
|
143
|
-
const storage = createMemoryStorage();
|
|
144
|
-
storage.setItem("stigmer:guest-id:acme", "cookie-from-last-visit");
|
|
145
|
-
mintGuestToken.mockResolvedValue(mintResponse());
|
|
146
|
-
const auth = createGuestAuth({ ...CONFIG, storage });
|
|
147
|
-
await auth.getAccessToken();
|
|
148
|
-
expect(mintGuestToken.mock.calls[0][0]).toMatchObject({
|
|
149
|
-
guestCookieId: "cookie-from-last-visit",
|
|
150
|
-
});
|
|
151
|
-
});
|
|
152
|
-
it("returns the cached token while it is fresh", async () => {
|
|
153
|
-
mintGuestToken.mockResolvedValue(mintResponse());
|
|
154
|
-
const auth = createGuestAuth({ ...CONFIG, storage: createMemoryStorage() });
|
|
155
|
-
await auth.getAccessToken();
|
|
156
|
-
// 13 minutes into a 15-minute token: still beyond the 60s skew.
|
|
157
|
-
vi.advanceTimersByTime(13 * 60_000);
|
|
158
|
-
const token = await auth.getAccessToken();
|
|
159
|
-
expect(token).toBe("guest-jwt-1");
|
|
160
|
-
expect(mintGuestToken).toHaveBeenCalledTimes(1);
|
|
161
|
-
});
|
|
162
|
-
it("re-mints when the cached token is within the expiry skew", async () => {
|
|
163
|
-
mintGuestToken
|
|
164
|
-
.mockResolvedValueOnce(mintResponse({ accessToken: "guest-jwt-1" }))
|
|
165
|
-
.mockResolvedValueOnce(mintResponse({ accessToken: "guest-jwt-2" }));
|
|
166
|
-
const auth = createGuestAuth({ ...CONFIG, storage: createMemoryStorage() });
|
|
167
|
-
await auth.getAccessToken();
|
|
168
|
-
// 30 seconds of life left — inside the 60s skew window.
|
|
169
|
-
vi.advanceTimersByTime(900_000 - 30_000);
|
|
170
|
-
const token = await auth.getAccessToken();
|
|
171
|
-
expect(token).toBe("guest-jwt-2");
|
|
172
|
-
expect(mintGuestToken).toHaveBeenCalledTimes(2);
|
|
173
|
-
});
|
|
174
|
-
it("collapses concurrent callers into a single mint", async () => {
|
|
175
|
-
let release;
|
|
176
|
-
mintGuestToken.mockImplementation(() => new Promise((resolve) => { release = resolve; }));
|
|
177
|
-
const auth = createGuestAuth({ ...CONFIG, storage: createMemoryStorage() });
|
|
178
|
-
const first = auth.getAccessToken();
|
|
179
|
-
const second = auth.getAccessToken();
|
|
180
|
-
release(mintResponse());
|
|
181
|
-
await expect(first).resolves.toBe("guest-jwt-1");
|
|
182
|
-
await expect(second).resolves.toBe("guest-jwt-1");
|
|
183
|
-
expect(mintGuestToken).toHaveBeenCalledTimes(1);
|
|
184
|
-
});
|
|
185
|
-
it("rejects with a wrapped StigmerError when sharing is revoked", async () => {
|
|
186
|
-
mintGuestToken.mockRejectedValue(new ConnectError("agent not found", Code.NotFound));
|
|
187
|
-
const auth = createGuestAuth({ ...CONFIG, storage: createMemoryStorage() });
|
|
188
|
-
try {
|
|
189
|
-
await auth.getAccessToken();
|
|
190
|
-
expect.fail("should have thrown");
|
|
191
|
-
}
|
|
192
|
-
catch (e) {
|
|
193
|
-
expect(e).toHaveProperty("name", "StigmerError");
|
|
194
|
-
expect(e).toHaveProperty("code", "not-found");
|
|
195
|
-
}
|
|
196
|
-
});
|
|
197
|
-
it("recovers after a failed mint instead of caching the failure", async () => {
|
|
198
|
-
mintGuestToken
|
|
199
|
-
.mockRejectedValueOnce(new ConnectError("unavailable", Code.Unavailable))
|
|
200
|
-
.mockResolvedValueOnce(mintResponse());
|
|
201
|
-
const auth = createGuestAuth({ ...CONFIG, storage: createMemoryStorage() });
|
|
202
|
-
await expect(auth.getAccessToken()).rejects.toMatchObject({
|
|
203
|
-
code: "unavailable",
|
|
204
|
-
});
|
|
205
|
-
await expect(auth.getAccessToken()).resolves.toBe("guest-jwt-1");
|
|
206
|
-
expect(mintGuestToken).toHaveBeenCalledTimes(2);
|
|
207
|
-
});
|
|
208
|
-
it("still mints when storage throws", async () => {
|
|
209
|
-
const brokenStorage = {
|
|
210
|
-
getItem: () => {
|
|
211
|
-
throw new Error("storage disabled");
|
|
212
|
-
},
|
|
213
|
-
setItem: () => {
|
|
214
|
-
throw new Error("storage disabled");
|
|
215
|
-
},
|
|
216
|
-
};
|
|
217
|
-
mintGuestToken.mockResolvedValue(mintResponse());
|
|
218
|
-
const auth = createGuestAuth({ ...CONFIG, storage: brokenStorage });
|
|
219
|
-
await expect(auth.getAccessToken()).resolves.toBe("guest-jwt-1");
|
|
220
|
-
expect(auth.guestCookieId).toBeNull();
|
|
221
|
-
});
|
|
222
|
-
});
|
|
223
|
-
//# sourceMappingURL=guest-auth.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"guest-auth.test.js","sourceRoot":"","sources":["../../src/__tests__/guest-auth.test.ts"],"names":[],"mappings":"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"}
|