@storystick/client 0.0.0-stage → 0.2.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/LICENSE +112 -0
  2. package/PUBLIC-API.md +22 -0
  3. package/README.md +180 -2
  4. package/dist/.source-hash +1 -0
  5. package/dist/_fetchers.d.ts +51 -0
  6. package/dist/_fetchers.js +144 -0
  7. package/dist/_stateMachine.d.ts +102 -0
  8. package/dist/_stateMachine.js +168 -0
  9. package/dist/_wireAuth.d.ts +48 -0
  10. package/dist/_wireAuth.js +52 -0
  11. package/dist/adapter.d.ts +14 -0
  12. package/dist/adapter.js +10 -0
  13. package/dist/content-values.d.ts +11 -0
  14. package/dist/content-values.js +401 -0
  15. package/dist/errors.d.ts +65 -0
  16. package/dist/errors.js +45 -0
  17. package/dist/hydrate-slice.d.ts +2 -0
  18. package/dist/hydrate-slice.js +1 -0
  19. package/dist/index.d.ts +23 -0
  20. package/dist/index.js +9 -0
  21. package/dist/infra-resolver.d.ts +94 -0
  22. package/dist/infra-resolver.js +130 -0
  23. package/dist/internal.d.ts +33 -0
  24. package/dist/internal.js +20 -0
  25. package/dist/locale-routing.d.ts +5 -0
  26. package/dist/locale-routing.js +33 -0
  27. package/dist/normalize-pathname.d.ts +79 -0
  28. package/dist/normalize-pathname.js +103 -0
  29. package/dist/preview-frame-dependencies.d.ts +39 -0
  30. package/dist/preview-frame-dependencies.js +84 -0
  31. package/dist/preview-query-receipt.d.ts +3 -0
  32. package/dist/preview-query-receipt.js +16 -0
  33. package/dist/preview-read-lifecycle.d.ts +10 -0
  34. package/dist/preview-read-lifecycle.js +40 -0
  35. package/dist/preview-read-observation.d.ts +18 -0
  36. package/dist/preview-read-observation.js +81 -0
  37. package/dist/preview-scope.d.ts +3 -0
  38. package/dist/preview-scope.js +22 -0
  39. package/dist/preview-target.d.ts +73 -0
  40. package/dist/preview-target.js +86 -0
  41. package/dist/project-locales.d.ts +4 -0
  42. package/dist/project-locales.js +12 -0
  43. package/dist/public-delivery.d.ts +36 -0
  44. package/dist/public-delivery.js +55 -0
  45. package/dist/published-routes.d.ts +3 -0
  46. package/dist/published-routes.js +100 -0
  47. package/dist/query-builder.d.ts +225 -0
  48. package/dist/query-builder.js +294 -0
  49. package/dist/query-client.d.ts +54 -0
  50. package/dist/query-client.js +306 -0
  51. package/dist/query-compiler.d.ts +5 -0
  52. package/dist/query-compiler.js +12 -0
  53. package/dist/query-schema.d.ts +32 -0
  54. package/dist/query-schema.js +1 -0
  55. package/dist/redirect-search.d.ts +4 -0
  56. package/dist/redirect-search.js +14 -0
  57. package/dist/reference-resolver.d.ts +37 -0
  58. package/dist/reference-resolver.js +126 -0
  59. package/dist/resolve-route.d.ts +27 -0
  60. package/dist/resolve-route.js +145 -0
  61. package/dist/resolve.d.ts +43 -0
  62. package/dist/resolve.js +160 -0
  63. package/dist/schemas.d.ts +71 -0
  64. package/dist/schemas.js +75 -0
  65. package/dist/seo.d.ts +52 -0
  66. package/dist/seo.js +93 -0
  67. package/dist/signed-webhook.d.ts +13 -0
  68. package/dist/signed-webhook.js +54 -0
  69. package/dist/transport.d.ts +29 -0
  70. package/dist/transport.js +584 -0
  71. package/dist/typed-route.d.ts +22 -0
  72. package/dist/typed-route.js +1 -0
  73. package/dist/types.d.ts +147 -0
  74. package/dist/types.js +1 -0
  75. package/package.json +70 -3
@@ -0,0 +1,22 @@
1
+ import type { QuerySchemaDefinition, QueryStoriesOf, QueryStoryType } from './query-schema.js';
2
+ import type { SelectedDocument } from './query-builder.js';
3
+ import type { QueryResult, ResolvedRoute } from './types.js';
4
+ export type SchemaStoryName<TSchema extends QuerySchemaDefinition> = keyof QueryStoriesOf<TSchema> & string;
5
+ export type RoutableSchemaStoryName<TSchema extends QuerySchemaDefinition> = {
6
+ [TStoryName in SchemaStoryName<TSchema>]: QueryStoriesOf<TSchema>[TStoryName] extends QueryStoryType<unknown, object, boolean, boolean, true> ? TStoryName : never;
7
+ }[SchemaStoryName<TSchema>];
8
+ export type RequestedStoryName<TSchema extends QuerySchemaDefinition, TStoryTypes extends readonly SchemaStoryName<TSchema>[] | undefined> = TStoryTypes extends readonly (infer TStoryName)[] ? Extract<TStoryName, SchemaStoryName<TSchema>> : RoutableSchemaStoryName<TSchema>;
9
+ export type TypedRouteDocument<TSchema extends QuerySchemaDefinition, TStoryName extends SchemaStoryName<TSchema>> = SelectedDocument<QueryStoriesOf<TSchema>[TStoryName], 'all'> & {
10
+ readonly storyType: TStoryName;
11
+ } & Pick<QueryResult, 'resolved'>;
12
+ export type TypedDocumentRoute<TSchema extends QuerySchemaDefinition, TStoryTypes extends readonly SchemaStoryName<TSchema>[] | undefined> = {
13
+ readonly [TStoryName in RequestedStoryName<TSchema, TStoryTypes>]: Omit<Extract<ResolvedRoute, {
14
+ type: 'document';
15
+ }>, 'document' | 'storyType'> & {
16
+ readonly document: TypedRouteDocument<TSchema, TStoryName>;
17
+ readonly storyType: TStoryName;
18
+ };
19
+ }[RequestedStoryName<TSchema, TStoryTypes>];
20
+ export type ResolvedRouteForSchema<TSchema extends QuerySchemaDefinition, TStoryTypes extends readonly SchemaStoryName<TSchema>[] | undefined = undefined> = [SchemaStoryName<TSchema>] extends [never] ? ResolvedRoute : TypedDocumentRoute<TSchema, TStoryTypes> | Exclude<ResolvedRoute, {
21
+ type: 'document';
22
+ }>;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,147 @@
1
+ import type { DocumentLocaleRouting } from './locale-routing.js';
2
+ import type { DeliveryDocumentV1 } from '@storystick/types';
3
+ import type { LocaleRouting, RoutingLocale } from '@storystick/types/internal/locale-routing';
4
+ export interface RequestLocaleContext {
5
+ locale: string;
6
+ defaultLocale: string;
7
+ pathname: string;
8
+ publicPathname: string;
9
+ locales: readonly RoutingLocale[];
10
+ localeRouting: LocaleRouting;
11
+ publicOrigins?: import('./locale-routing.js').PublicLocaleOrigins;
12
+ synthetic: boolean;
13
+ }
14
+ export interface PublicationSeo {
15
+ readonly indexable: boolean;
16
+ readonly canonicalUrl?: string;
17
+ }
18
+ export type ResolvedRoute = {
19
+ type: 'document';
20
+ document: QueryResult;
21
+ storyType: string;
22
+ canonicalPathname: string;
23
+ publicPathname: string;
24
+ localeContext: RequestLocaleContext;
25
+ primaryLocale: string;
26
+ alternates: Readonly<Record<string, string>>;
27
+ seo: PublicationSeo;
28
+ } | {
29
+ type: 'redirect';
30
+ redirectTo: string;
31
+ permanent: boolean;
32
+ } | {
33
+ type: 'notFound';
34
+ localeContext?: RequestLocaleContext;
35
+ };
36
+ export interface PreviewReadScopeEcho {
37
+ requestedVariantId: string | null;
38
+ requestedDocumentId: string | null;
39
+ requestedLocale?: string | null;
40
+ /** Locale view materialized for this concrete owner document. */
41
+ appliedLocale?: string | null;
42
+ appliesToDocument: boolean | null;
43
+ appliedVariantId: string | null;
44
+ requestedReleaseId: string | null;
45
+ releaseScopeStatus: 'none' | 'active' | 'missing' | 'not-previewable' | 'unbound';
46
+ releaseLifecycleStatus?: string;
47
+ appliedReleaseId: string | null;
48
+ releaseMemberState?: 'active' | 'archived' | 'missing' | 'locale-removed';
49
+ degradedReason?: 'archived' | 'missing' | 'locale-removed';
50
+ }
51
+ export interface QueryResult extends DeliveryDocumentV1 {
52
+ readonly _localeRouting?: DocumentLocaleRouting;
53
+ resolved?: Record<string, QueryResult | QueryResult[] | null>;
54
+ }
55
+ export interface ResolveRouteInput {
56
+ /** Explicit locale: pathname is canonical and unprefixed (domain deployments). */
57
+ locale?: string;
58
+ pathname: string | string[] | undefined;
59
+ storyTypes?: readonly string[];
60
+ tenant?: string;
61
+ }
62
+ export interface RequestOptions {
63
+ /** Bypass both edge decision/data caches and the framework fetch cache. */
64
+ deliveryCache?: 'default' | 'bypass';
65
+ locale?: string;
66
+ cache?: 'force-cache' | 'no-store';
67
+ next?: {
68
+ revalidate?: number | false;
69
+ tags?: string[];
70
+ };
71
+ signal?: AbortSignal;
72
+ }
73
+ export type DefaultRequestOptions = Omit<RequestOptions, 'signal'>;
74
+ export interface PreviewProvenanceReadLifecycleInput<T> {
75
+ readonly kind: 'query-single' | 'query-many' | 'resolved-route';
76
+ readonly cacheKey: string;
77
+ readonly signal?: AbortSignal;
78
+ readonly executeRaw: () => Promise<T>;
79
+ }
80
+ export interface PreviewProvenanceReadLifecycle {
81
+ <T>(input: PreviewProvenanceReadLifecycleInput<T>): Promise<T>;
82
+ }
83
+ export interface RequestContext {
84
+ previewToken?: string;
85
+ previewReadContext?: import('@storystick/types/preview-query-targeting').PreviewReadContext;
86
+ /** Exact Preview view selector. Distinct from the per-render observation. */
87
+ previewSessionId?: string;
88
+ previewQueryConsumer?: 'server-render' | 'client-cache';
89
+ /** @internal Request a server-verified live-query receipt capability. */
90
+ previewLiveQueryOverlayEnabled?: boolean;
91
+ variantId?: string | null;
92
+ releaseId?: string | null;
93
+ previewObservationId?: string;
94
+ previewCodeVersion?: string;
95
+ refreshPreviewToken?: (oldToken: string | undefined) => Promise<string | undefined>;
96
+ onAccessedContent?: (observation: {
97
+ readonly documentIds: readonly string[];
98
+ readonly storyTypes: readonly string[];
99
+ readonly codeVersion: string;
100
+ readonly observationId: string;
101
+ readonly renderWatermark: number;
102
+ }) => void;
103
+ /** @deprecated Document-only rollout bridge. */
104
+ onAccessedDocuments?: (documentIds: readonly string[]) => void;
105
+ unstable_previewProvenanceReadLifecycle?: PreviewProvenanceReadLifecycle;
106
+ }
107
+ export type ClientAuth = {
108
+ apiKey: string;
109
+ publishableKey?: never;
110
+ } | {
111
+ apiKey?: never;
112
+ publishableKey: string;
113
+ };
114
+ export interface Transport {
115
+ request(input: TransportRequest): Promise<TransportResponse>;
116
+ }
117
+ export interface PublicTransportRequest {
118
+ udfPath: string;
119
+ args: Record<string, unknown>;
120
+ options?: RequestOptions;
121
+ signal?: AbortSignal;
122
+ }
123
+ export interface TransportRequest extends PublicTransportRequest {
124
+ /** @internal Consumer binding, propagated before any SDK-owned observation. Never sent as server authority. */
125
+ expectedProjectId?: string;
126
+ requestContext?: RequestContext;
127
+ }
128
+ export interface TransportResponse {
129
+ data: unknown;
130
+ /** Canonical project short ID authenticated by the server, never echoed from client configuration. */
131
+ projectId?: string;
132
+ /** Observation of the exact published snapshot, used only for explicit render receipts. */
133
+ publicReadIdentity?: import('@storystick/types/public-delivery').PublicReadIdentityV1;
134
+ fromCache?: boolean;
135
+ /** @internal Authoritative Q2b identity; never copied into public QueryMeta. */
136
+ executionIdentity?: {
137
+ queryHash: string;
138
+ readScopeIdentity: string;
139
+ };
140
+ /** @internal Opaque private receipt for targeted Preview cache convergence. */
141
+ previewQueryReceiptId?: string;
142
+ }
143
+ export type { ReferencedDocumentFailureReason, ReferencedDocumentPolicy, ReferencedDocumentSidecarEntry, ReferencedDocumentSidecarFailure, ReferencedDocumentsSidecar, } from '@storystick/types';
144
+ /** Request shape available to a custom application transport. */
145
+ export interface PublicTransport {
146
+ request(input: PublicTransportRequest): Promise<TransportResponse>;
147
+ }
package/dist/types.js ADDED
@@ -0,0 +1 @@
1
+ export {};
package/package.json CHANGED
@@ -1,6 +1,73 @@
1
1
  {
2
2
  "name": "@storystick/client",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "0.2.0-rc.1",
4
+ "license": "FSL-1.1-MIT",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ },
13
+ "./internal": {
14
+ "types": "./dist/internal.d.ts",
15
+ "import": "./dist/internal.js"
16
+ },
17
+ "./normalize-pathname": {
18
+ "types": "./dist/normalize-pathname.d.ts",
19
+ "import": "./dist/normalize-pathname.js"
20
+ },
21
+ "./locale-routing": {
22
+ "types": "./dist/locale-routing.d.ts",
23
+ "import": "./dist/locale-routing.js"
24
+ },
25
+ "./adapter": {
26
+ "types": "./dist/adapter.d.ts",
27
+ "import": "./dist/adapter.js"
28
+ },
29
+ "./seo": {
30
+ "types": "./dist/seo.d.ts",
31
+ "import": "./dist/seo.js"
32
+ }
33
+ },
34
+ "files": [
35
+ "dist",
36
+ "LICENSE",
37
+ "README.md",
38
+ "PUBLIC-API.md"
39
+ ],
40
+ "publishConfig": {
41
+ "access": "public",
42
+ "provenance": false,
43
+ "tag": "beta"
44
+ },
45
+ "dependencies": {
46
+ "@storystick/media": "0.2.0-rc.1",
47
+ "@storystick/types": "0.1.0-rc.1"
48
+ },
49
+ "devDependencies": {
50
+ "typescript": "^5.8.2",
51
+ "vitest": "^3.1.1",
52
+ "@types/node": "^22.13.10"
53
+ },
54
+ "engines": {
55
+ "node": ">=24.19.0 <25"
56
+ },
57
+ "repository": {
58
+ "type": "git",
59
+ "url": "git+https://github.com/withstorystick/storystick.git",
60
+ "directory": "packages/client"
61
+ },
62
+ "homepage": "https://storystick.app",
63
+ "bugs": {
64
+ "url": "https://storystick.app"
65
+ },
66
+ "scripts": {
67
+ "build": "node ../../scripts/package-dist.mjs clean && tsc && node ../../scripts/package-dist.mjs seal",
68
+ "test": "vitest run",
69
+ "test:dist-fresh": "node ../../scripts/package-dist.mjs assert",
70
+ "test:types": "tsc -p tsconfig.type-tests.json --noEmit",
71
+ "test:watch": "vitest"
72
+ }
6
73
  }