@bryanguffey/astro-standard-site 1.0.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/README.md +348 -0
- package/components/Comments.astro +330 -0
- package/dist/comments.d.ts +97 -0
- package/dist/comments.d.ts.map +1 -0
- package/dist/comments.js +221 -0
- package/dist/comments.js.map +1 -0
- package/dist/content.d.ts +141 -0
- package/dist/content.d.ts.map +1 -0
- package/dist/content.js +202 -0
- package/dist/content.js.map +1 -0
- package/dist/index.d.ts +48 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +58 -0
- package/dist/index.js.map +1 -0
- package/dist/loader.d.ts +181 -0
- package/dist/loader.d.ts.map +1 -0
- package/dist/loader.js +207 -0
- package/dist/loader.js.map +1 -0
- package/dist/publisher.d.ts +157 -0
- package/dist/publisher.d.ts.map +1 -0
- package/dist/publisher.js +326 -0
- package/dist/publisher.js.map +1 -0
- package/dist/schemas.d.ts +1079 -0
- package/dist/schemas.d.ts.map +1 -0
- package/dist/schemas.js +154 -0
- package/dist/schemas.js.map +1 -0
- package/dist/verification.d.ts +103 -0
- package/dist/verification.d.ts.map +1 -0
- package/dist/verification.js +111 -0
- package/dist/verification.js.map +1 -0
- package/package.json +77 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"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"}
|
package/dist/schemas.js
ADDED
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* site.standard.* lexicon schemas
|
|
3
|
+
*
|
|
4
|
+
* Based on https://standard.site/ specification
|
|
5
|
+
* These schemas provide unified metadata for longform publishing on ATProto,
|
|
6
|
+
* enabling interoperability between Leaflet, WhiteWind, and other platforms.
|
|
7
|
+
*/
|
|
8
|
+
import { z } from 'zod';
|
|
9
|
+
// ============================================================================
|
|
10
|
+
// site.standard.theme.color
|
|
11
|
+
// Color definitions for themes
|
|
12
|
+
// ============================================================================
|
|
13
|
+
export const ThemeColorRgbSchema = z.object({
|
|
14
|
+
r: z.number().int().min(0).max(255),
|
|
15
|
+
g: z.number().int().min(0).max(255),
|
|
16
|
+
b: z.number().int().min(0).max(255),
|
|
17
|
+
});
|
|
18
|
+
export const ThemeColorRgbaSchema = z.object({
|
|
19
|
+
r: z.number().int().min(0).max(255),
|
|
20
|
+
g: z.number().int().min(0).max(255),
|
|
21
|
+
b: z.number().int().min(0).max(255),
|
|
22
|
+
a: z.number().int().min(0).max(100),
|
|
23
|
+
});
|
|
24
|
+
export const ThemeColorSchema = z.union([ThemeColorRgbSchema, ThemeColorRgbaSchema]);
|
|
25
|
+
// ============================================================================
|
|
26
|
+
// site.standard.theme.basic
|
|
27
|
+
// Simplified publication theme for tools or apps to easily implement
|
|
28
|
+
// ============================================================================
|
|
29
|
+
export const ThemeBasicPreferencesSchema = z.object({
|
|
30
|
+
showInDiscover: z.boolean().default(true).optional(),
|
|
31
|
+
}).passthrough(); // Allow additional platform-specific preferences
|
|
32
|
+
export const ThemeBasicSchema = z.object({
|
|
33
|
+
background: ThemeColorRgbSchema,
|
|
34
|
+
foreground: ThemeColorRgbSchema,
|
|
35
|
+
accent: ThemeColorRgbSchema,
|
|
36
|
+
accentForeground: ThemeColorRgbSchema,
|
|
37
|
+
preferences: ThemeBasicPreferencesSchema.optional(),
|
|
38
|
+
});
|
|
39
|
+
// ============================================================================
|
|
40
|
+
// site.standard.publication
|
|
41
|
+
// Represents a publication (blog, newsletter, etc.)
|
|
42
|
+
// Key: tid (timestamp-based identifier)
|
|
43
|
+
// ============================================================================
|
|
44
|
+
export const PublicationPreferencesSchema = z.object({
|
|
45
|
+
showInDiscover: z.boolean().default(true).optional(),
|
|
46
|
+
});
|
|
47
|
+
export const PublicationSchema = z.object({
|
|
48
|
+
$type: z.literal('site.standard.publication').optional(),
|
|
49
|
+
/** Base publication URL (e.g., https://standard.site) - REQUIRED */
|
|
50
|
+
url: z.string().url(),
|
|
51
|
+
/** Square image to identify the publication (at least 256x256, max 1MB) */
|
|
52
|
+
icon: z.object({
|
|
53
|
+
$type: z.literal('blob').optional(),
|
|
54
|
+
ref: z.object({
|
|
55
|
+
$link: z.string(),
|
|
56
|
+
}),
|
|
57
|
+
mimeType: z.string(),
|
|
58
|
+
size: z.number().max(1000000),
|
|
59
|
+
}).optional(),
|
|
60
|
+
/** The name of the publication (max 128 graphemes) - REQUIRED */
|
|
61
|
+
name: z.string().max(1280),
|
|
62
|
+
/** Brief description of the publication (max 300 graphemes) */
|
|
63
|
+
description: z.string().max(3000).optional(),
|
|
64
|
+
/** Simplified publication theme for tools/apps */
|
|
65
|
+
basicTheme: ThemeBasicSchema.optional(),
|
|
66
|
+
/** Publication preferences */
|
|
67
|
+
preferences: PublicationPreferencesSchema.optional(),
|
|
68
|
+
});
|
|
69
|
+
// ============================================================================
|
|
70
|
+
// site.standard.document
|
|
71
|
+
// Represents a document/post in a publication
|
|
72
|
+
// Key: tid (timestamp-based identifier)
|
|
73
|
+
// ============================================================================
|
|
74
|
+
/** Strong reference to another ATProto record */
|
|
75
|
+
export const StrongRefSchema = z.object({
|
|
76
|
+
uri: z.string(),
|
|
77
|
+
cid: z.string(),
|
|
78
|
+
});
|
|
79
|
+
export const DocumentSchema = z.object({
|
|
80
|
+
$type: z.literal('site.standard.document').optional(),
|
|
81
|
+
/** URI to the site or publication this document belongs to (https or at-uri) */
|
|
82
|
+
site: z.string(),
|
|
83
|
+
/** Document title (max 128 graphemes) */
|
|
84
|
+
title: z.string().max(1280),
|
|
85
|
+
/** When the document was published */
|
|
86
|
+
publishedAt: z.string().datetime(),
|
|
87
|
+
/** Path to combine with site URL to construct full document URL */
|
|
88
|
+
path: z.string().optional(),
|
|
89
|
+
/** Tags/categories for the document (max 50 graphemes each) */
|
|
90
|
+
tags: z.array(z.string().max(100)).optional(),
|
|
91
|
+
/** Platform-specific content (open union - can be any type) */
|
|
92
|
+
content: z.unknown().optional(),
|
|
93
|
+
/** When the document was last updated */
|
|
94
|
+
updatedAt: z.string().datetime().optional(),
|
|
95
|
+
/** Cover/hero image (max 1MB, image/*) */
|
|
96
|
+
coverImage: z.object({
|
|
97
|
+
$type: z.literal('blob').optional(),
|
|
98
|
+
ref: z.object({
|
|
99
|
+
$link: z.string(),
|
|
100
|
+
}),
|
|
101
|
+
mimeType: z.string(),
|
|
102
|
+
size: z.number().max(1000000),
|
|
103
|
+
}).optional(),
|
|
104
|
+
/** Reference to associated Bluesky post */
|
|
105
|
+
bskyPostRef: StrongRefSchema.optional(),
|
|
106
|
+
/** Document description/excerpt (max 300 graphemes) */
|
|
107
|
+
description: z.string().max(3000).optional(),
|
|
108
|
+
/** Plain text content for indexing/search */
|
|
109
|
+
textContent: z.string().optional(),
|
|
110
|
+
});
|
|
111
|
+
// ============================================================================
|
|
112
|
+
// AT-URI and Record Types
|
|
113
|
+
// ============================================================================
|
|
114
|
+
export const AtUriSchema = z.string().regex(/^at:\/\/[a-zA-Z0-9._:%-]+\/[a-zA-Z0-9.]+\/[a-zA-Z0-9._~:@!$&'()*+,;=-]+$/, 'Invalid AT-URI format');
|
|
115
|
+
/** Record returned from a PDS with full metadata */
|
|
116
|
+
export const StandardSiteRecordSchema = z.object({
|
|
117
|
+
uri: AtUriSchema,
|
|
118
|
+
cid: z.string(),
|
|
119
|
+
value: z.union([PublicationSchema, DocumentSchema]),
|
|
120
|
+
});
|
|
121
|
+
// ============================================================================
|
|
122
|
+
// Loader Configuration
|
|
123
|
+
// ============================================================================
|
|
124
|
+
export const LoaderConfigSchema = z.object({
|
|
125
|
+
/** DID or handle of the account to load documents from */
|
|
126
|
+
repo: z.string(),
|
|
127
|
+
/** PDS service URL (defaults to public.api.bsky.app for reads) */
|
|
128
|
+
service: z.string().url().default('https://public.api.bsky.app'),
|
|
129
|
+
/** Only load documents from a specific site/publication URI */
|
|
130
|
+
publication: z.string().optional(),
|
|
131
|
+
/** Maximum number of documents to load */
|
|
132
|
+
limit: z.number().positive().default(100),
|
|
133
|
+
});
|
|
134
|
+
// ============================================================================
|
|
135
|
+
// Publisher Configuration
|
|
136
|
+
// ============================================================================
|
|
137
|
+
export const PublisherConfigSchema = z.object({
|
|
138
|
+
/** PDS service URL (auto-resolved from DID if not provided) */
|
|
139
|
+
service: z.string().url().optional(),
|
|
140
|
+
/** Handle or DID for authentication */
|
|
141
|
+
identifier: z.string(),
|
|
142
|
+
/** App password for authentication */
|
|
143
|
+
password: z.string(),
|
|
144
|
+
/** Publication AT-URI to publish documents to */
|
|
145
|
+
publication: z.string().optional(),
|
|
146
|
+
});
|
|
147
|
+
// ============================================================================
|
|
148
|
+
// Collection Names
|
|
149
|
+
// ============================================================================
|
|
150
|
+
export const COLLECTIONS = {
|
|
151
|
+
PUBLICATION: 'site.standard.publication',
|
|
152
|
+
DOCUMENT: 'site.standard.document',
|
|
153
|
+
};
|
|
154
|
+
//# sourceMappingURL=schemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,+EAA+E;AAC/E,4BAA4B;AAC5B,+BAA+B;AAC/B,+EAA+E;AAE/E,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IACnC,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IACnC,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;CACpC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IACnC,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IACnC,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IACnC,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;CACpC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,mBAAmB,EAAE,oBAAoB,CAAC,CAAC,CAAC;AAMrF,+EAA+E;AAC/E,4BAA4B;AAC5B,qEAAqE;AACrE,+EAA+E;AAE/E,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC;IAClD,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;CACrD,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,iDAAiD;AAEnE,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,UAAU,EAAE,mBAAmB;IAC/B,UAAU,EAAE,mBAAmB;IAC/B,MAAM,EAAE,mBAAmB;IAC3B,gBAAgB,EAAE,mBAAmB;IACrC,WAAW,EAAE,2BAA2B,CAAC,QAAQ,EAAE;CACpD,CAAC,CAAC;AAIH,+EAA+E;AAC/E,4BAA4B;AAC5B,oDAAoD;AACpD,wCAAwC;AACxC,+EAA+E;AAE/E,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC,MAAM,CAAC;IACnD,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;CACrD,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC,QAAQ,EAAE;IAExD,oEAAoE;IACpE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IAErB,2EAA2E;IAC3E,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QACb,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE;QACnC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC;YACZ,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;SAClB,CAAC;QACF,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;QACpB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC;KAC9B,CAAC,CAAC,QAAQ,EAAE;IAEb,iEAAiE;IACjE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC;IAE1B,+DAA+D;IAC/D,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;IAE5C,kDAAkD;IAClD,UAAU,EAAE,gBAAgB,CAAC,QAAQ,EAAE;IAEvC,8BAA8B;IAC9B,WAAW,EAAE,4BAA4B,CAAC,QAAQ,EAAE;CACrD,CAAC,CAAC;AAIH,+EAA+E;AAC/E,yBAAyB;AACzB,8CAA8C;AAC9C,wCAAwC;AACxC,+EAA+E;AAE/E,iDAAiD;AACjD,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;IACf,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;CAChB,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC,QAAQ,EAAE;IAErD,gFAAgF;IAChF,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAEhB,yCAAyC;IACzC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC;IAE3B,sCAAsC;IACtC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAElC,mEAAmE;IACnE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAE3B,+DAA+D;IAC/D,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE;IAE7C,+DAA+D;IAC/D,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAE/B,yCAAyC;IACzC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAE3C,0CAA0C;IAC1C,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;QACnB,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE;QACnC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC;YACZ,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;SAClB,CAAC;QACF,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;QACpB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC;KAC9B,CAAC,CAAC,QAAQ,EAAE;IAEb,2CAA2C;IAC3C,WAAW,EAAE,eAAe,CAAC,QAAQ,EAAE;IAEvC,uDAAuD;IACvD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;IAE5C,6CAA6C;IAC7C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACnC,CAAC,CAAC;AAIH,+EAA+E;AAC/E,0BAA0B;AAC1B,+EAA+E;AAE/E,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CACzC,0EAA0E,EAC1E,uBAAuB,CACxB,CAAC;AAIF,oDAAoD;AACpD,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;IACf,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE,cAAc,CAAC,CAAC;CACpD,CAAC,CAAC;AAIH,+EAA+E;AAC/E,uBAAuB;AACvB,+EAA+E;AAE/E,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,0DAA0D;IAC1D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAEhB,kEAAkE;IAClE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,6BAA6B,CAAC;IAEhE,+DAA+D;IAC/D,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAElC,0CAA0C;IAC1C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;CAC1C,CAAC,CAAC;AAIH,+EAA+E;AAC/E,0BAA0B;AAC1B,+EAA+E;AAE/E,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,+DAA+D;IAC/D,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IAEpC,uCAAuC;IACvC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IAEtB,sCAAsC;IACtC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IAEpB,iDAAiD;IACjD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACnC,CAAC,CAAC;AAIH,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,WAAW,EAAE,2BAA2B;IACxC,QAAQ,EAAE,wBAAwB;CAC1B,CAAC"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Verification utilities for standard.site
|
|
3
|
+
*
|
|
4
|
+
* Helpers for implementing the verification endpoints described at https://standard.site/
|
|
5
|
+
* - Publication verification via /.well-known/site.standard.publication
|
|
6
|
+
* - Document verification via <link rel="site.standard.document"> tags
|
|
7
|
+
*/
|
|
8
|
+
export interface VerificationConfig {
|
|
9
|
+
/** Your ATProto DID */
|
|
10
|
+
did: string;
|
|
11
|
+
/** Publication record key */
|
|
12
|
+
publicationRkey: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Generate the content for /.well-known/site.standard.publication
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```ts
|
|
19
|
+
* // Astro endpoint: src/pages/.well-known/site.standard.publication.ts
|
|
20
|
+
* import { generatePublicationWellKnown } from 'astro-standard-site';
|
|
21
|
+
*
|
|
22
|
+
* export const GET = () => {
|
|
23
|
+
* return new Response(
|
|
24
|
+
* generatePublicationWellKnown({
|
|
25
|
+
* did: 'did:plc:abc123',
|
|
26
|
+
* publicationRkey: 'my-blog',
|
|
27
|
+
* }),
|
|
28
|
+
* { headers: { 'Content-Type': 'text/plain' } }
|
|
29
|
+
* );
|
|
30
|
+
* };
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export declare function generatePublicationWellKnown(config: VerificationConfig): string;
|
|
34
|
+
/**
|
|
35
|
+
* Generate the <link> tag for document verification
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```astro
|
|
39
|
+
* ---
|
|
40
|
+
* import { generateDocumentLinkTag } from 'astro-standard-site';
|
|
41
|
+
*
|
|
42
|
+
* const linkTag = generateDocumentLinkTag({
|
|
43
|
+
* did: 'did:plc:abc123',
|
|
44
|
+
* documentRkey: 'my-post',
|
|
45
|
+
* });
|
|
46
|
+
* ---
|
|
47
|
+
* <head>
|
|
48
|
+
* <Fragment set:html={linkTag} />
|
|
49
|
+
* </head>
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
52
|
+
export declare function generateDocumentLinkTag(config: {
|
|
53
|
+
did: string;
|
|
54
|
+
documentRkey: string;
|
|
55
|
+
}): string;
|
|
56
|
+
/**
|
|
57
|
+
* Generate the AT-URI for a document
|
|
58
|
+
*/
|
|
59
|
+
export declare function getDocumentAtUri(did: string, rkey: string): string;
|
|
60
|
+
/**
|
|
61
|
+
* Generate the AT-URI for a publication
|
|
62
|
+
*/
|
|
63
|
+
export declare function getPublicationAtUri(did: string, rkey: string): string;
|
|
64
|
+
/**
|
|
65
|
+
* Parse an AT-URI into its components
|
|
66
|
+
*/
|
|
67
|
+
export declare function parseAtUri(uri: string): {
|
|
68
|
+
did: string;
|
|
69
|
+
collection: string;
|
|
70
|
+
rkey: string;
|
|
71
|
+
} | null;
|
|
72
|
+
/**
|
|
73
|
+
* Astro integration for verification endpoints
|
|
74
|
+
*
|
|
75
|
+
* Automatically sets up the /.well-known/site.standard.publication endpoint
|
|
76
|
+
*
|
|
77
|
+
* @example
|
|
78
|
+
* ```ts
|
|
79
|
+
* // astro.config.mjs
|
|
80
|
+
* import { standardSiteVerification } from 'astro-standard-site';
|
|
81
|
+
*
|
|
82
|
+
* export default defineConfig({
|
|
83
|
+
* integrations: [
|
|
84
|
+
* standardSiteVerification({
|
|
85
|
+
* did: 'did:plc:abc123',
|
|
86
|
+
* publicationRkey: 'my-blog',
|
|
87
|
+
* }),
|
|
88
|
+
* ],
|
|
89
|
+
* });
|
|
90
|
+
* ```
|
|
91
|
+
*/
|
|
92
|
+
export declare function standardSiteVerification(config: VerificationConfig): {
|
|
93
|
+
name: string;
|
|
94
|
+
hooks: {
|
|
95
|
+
'astro:config:setup': ({ injectRoute }: {
|
|
96
|
+
injectRoute: (config: {
|
|
97
|
+
pattern: string;
|
|
98
|
+
entrypoint: string;
|
|
99
|
+
}) => void;
|
|
100
|
+
}) => void;
|
|
101
|
+
};
|
|
102
|
+
};
|
|
103
|
+
//# sourceMappingURL=verification.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verification.d.ts","sourceRoot":"","sources":["../src/verification.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,kBAAkB;IACjC,uBAAuB;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,6BAA6B;IAC7B,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAE/E;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE;IAC9C,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;CACtB,GAAG,MAAM,CAGT;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAElE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAErE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd,GAAG,IAAI,CAQP;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,kBAAkB;;;gDAIrB;YAAE,WAAW,EAAE,CAAC,MAAM,EAAE;gBAAE,OAAO,EAAE,MAAM,CAAC;gBAAC,UAAU,EAAE,MAAM,CAAA;aAAE,KAAK,IAAI,CAAA;SAAE;;EAWvH"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Verification utilities for standard.site
|
|
3
|
+
*
|
|
4
|
+
* Helpers for implementing the verification endpoints described at https://standard.site/
|
|
5
|
+
* - Publication verification via /.well-known/site.standard.publication
|
|
6
|
+
* - Document verification via <link rel="site.standard.document"> tags
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Generate the content for /.well-known/site.standard.publication
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```ts
|
|
13
|
+
* // Astro endpoint: src/pages/.well-known/site.standard.publication.ts
|
|
14
|
+
* import { generatePublicationWellKnown } from 'astro-standard-site';
|
|
15
|
+
*
|
|
16
|
+
* export const GET = () => {
|
|
17
|
+
* return new Response(
|
|
18
|
+
* generatePublicationWellKnown({
|
|
19
|
+
* did: 'did:plc:abc123',
|
|
20
|
+
* publicationRkey: 'my-blog',
|
|
21
|
+
* }),
|
|
22
|
+
* { headers: { 'Content-Type': 'text/plain' } }
|
|
23
|
+
* );
|
|
24
|
+
* };
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export function generatePublicationWellKnown(config) {
|
|
28
|
+
return `at://${config.did}/site.standard.publication/${config.publicationRkey}`;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Generate the <link> tag for document verification
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```astro
|
|
35
|
+
* ---
|
|
36
|
+
* import { generateDocumentLinkTag } from 'astro-standard-site';
|
|
37
|
+
*
|
|
38
|
+
* const linkTag = generateDocumentLinkTag({
|
|
39
|
+
* did: 'did:plc:abc123',
|
|
40
|
+
* documentRkey: 'my-post',
|
|
41
|
+
* });
|
|
42
|
+
* ---
|
|
43
|
+
* <head>
|
|
44
|
+
* <Fragment set:html={linkTag} />
|
|
45
|
+
* </head>
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
export function generateDocumentLinkTag(config) {
|
|
49
|
+
const atUri = `at://${config.did}/site.standard.document/${config.documentRkey}`;
|
|
50
|
+
return `<link rel="site.standard.document" href="${atUri}">`;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Generate the AT-URI for a document
|
|
54
|
+
*/
|
|
55
|
+
export function getDocumentAtUri(did, rkey) {
|
|
56
|
+
return `at://${did}/site.standard.document/${rkey}`;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Generate the AT-URI for a publication
|
|
60
|
+
*/
|
|
61
|
+
export function getPublicationAtUri(did, rkey) {
|
|
62
|
+
return `at://${did}/site.standard.publication/${rkey}`;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Parse an AT-URI into its components
|
|
66
|
+
*/
|
|
67
|
+
export function parseAtUri(uri) {
|
|
68
|
+
const match = uri.match(/^at:\/\/([^/]+)\/([^/]+)\/(.+)$/);
|
|
69
|
+
if (!match)
|
|
70
|
+
return null;
|
|
71
|
+
return {
|
|
72
|
+
did: match[1],
|
|
73
|
+
collection: match[2],
|
|
74
|
+
rkey: match[3],
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Astro integration for verification endpoints
|
|
79
|
+
*
|
|
80
|
+
* Automatically sets up the /.well-known/site.standard.publication endpoint
|
|
81
|
+
*
|
|
82
|
+
* @example
|
|
83
|
+
* ```ts
|
|
84
|
+
* // astro.config.mjs
|
|
85
|
+
* import { standardSiteVerification } from 'astro-standard-site';
|
|
86
|
+
*
|
|
87
|
+
* export default defineConfig({
|
|
88
|
+
* integrations: [
|
|
89
|
+
* standardSiteVerification({
|
|
90
|
+
* did: 'did:plc:abc123',
|
|
91
|
+
* publicationRkey: 'my-blog',
|
|
92
|
+
* }),
|
|
93
|
+
* ],
|
|
94
|
+
* });
|
|
95
|
+
* ```
|
|
96
|
+
*/
|
|
97
|
+
export function standardSiteVerification(config) {
|
|
98
|
+
return {
|
|
99
|
+
name: 'standard-site-verification',
|
|
100
|
+
hooks: {
|
|
101
|
+
'astro:config:setup': ({ injectRoute }) => {
|
|
102
|
+
// We can't actually inject routes with custom content this way,
|
|
103
|
+
// but we provide the helper functions for manual setup
|
|
104
|
+
console.log('[standard-site-verification] To complete setup, create:\n' +
|
|
105
|
+
' src/pages/.well-known/site.standard.publication.ts\n' +
|
|
106
|
+
'With content: ' + generatePublicationWellKnown(config));
|
|
107
|
+
},
|
|
108
|
+
},
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=verification.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verification.js","sourceRoot":"","sources":["../src/verification.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,4BAA4B,CAAC,MAA0B;IACrE,OAAO,QAAQ,MAAM,CAAC,GAAG,8BAA8B,MAAM,CAAC,eAAe,EAAE,CAAC;AAClF,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAGvC;IACC,MAAM,KAAK,GAAG,QAAQ,MAAM,CAAC,GAAG,2BAA2B,MAAM,CAAC,YAAY,EAAE,CAAC;IACjF,OAAO,4CAA4C,KAAK,IAAI,CAAC;AAC/D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAW,EAAE,IAAY;IACxD,OAAO,QAAQ,GAAG,2BAA2B,IAAI,EAAE,CAAC;AACtD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAW,EAAE,IAAY;IAC3D,OAAO,QAAQ,GAAG,8BAA8B,IAAI,EAAE,CAAC;AACzD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,GAAW;IAKpC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;IAC3D,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,OAAO;QACL,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;QACb,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;QACpB,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;KACf,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAA0B;IACjE,OAAO;QACL,IAAI,EAAE,4BAA4B;QAClC,KAAK,EAAE;YACL,oBAAoB,EAAE,CAAC,EAAE,WAAW,EAA8E,EAAE,EAAE;gBACpH,gEAAgE;gBAChE,uDAAuD;gBACvD,OAAO,CAAC,GAAG,CACT,2DAA2D;oBAC3D,wDAAwD;oBACxD,gBAAgB,GAAG,4BAA4B,CAAC,MAAM,CAAC,CACxD,CAAC;YACJ,CAAC;SACF;KACF,CAAC;AACJ,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@bryanguffey/astro-standard-site",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Astro integration for standard.site - unified ATProto longform publishing",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"astro",
|
|
7
|
+
"astro-integration",
|
|
8
|
+
"atproto",
|
|
9
|
+
"bluesky",
|
|
10
|
+
"standard.site",
|
|
11
|
+
"leaflet",
|
|
12
|
+
"whitewind",
|
|
13
|
+
"blog",
|
|
14
|
+
"ssg",
|
|
15
|
+
"comments",
|
|
16
|
+
"federation"
|
|
17
|
+
],
|
|
18
|
+
"homepage": "https://github.com/musicjunkieg/astro-standard-site#readme",
|
|
19
|
+
"bugs": {
|
|
20
|
+
"url": "https://github.com/musicjunkieg/astro-standard-site/issues"
|
|
21
|
+
},
|
|
22
|
+
"repository": {
|
|
23
|
+
"type": "git",
|
|
24
|
+
"url": "git+https://github.com/musicjunkieg/astro-standard-site.git"
|
|
25
|
+
},
|
|
26
|
+
"license": "MIT",
|
|
27
|
+
"author": "Bryan Guffey <bryan@makeworkbetter.io> (https://bryanguffey.com)",
|
|
28
|
+
"type": "module",
|
|
29
|
+
"exports": {
|
|
30
|
+
".": {
|
|
31
|
+
"types": "./dist/index.d.ts",
|
|
32
|
+
"import": "./dist/index.js"
|
|
33
|
+
},
|
|
34
|
+
"./loader": {
|
|
35
|
+
"types": "./dist/loader.d.ts",
|
|
36
|
+
"import": "./dist/loader.js"
|
|
37
|
+
},
|
|
38
|
+
"./publisher": {
|
|
39
|
+
"types": "./dist/publisher.d.ts",
|
|
40
|
+
"import": "./dist/publisher.js"
|
|
41
|
+
},
|
|
42
|
+
"./content": {
|
|
43
|
+
"types": "./dist/content.d.ts",
|
|
44
|
+
"import": "./dist/content.js"
|
|
45
|
+
},
|
|
46
|
+
"./comments": {
|
|
47
|
+
"types": "./dist/comments.d.ts",
|
|
48
|
+
"import": "./dist/comments.js"
|
|
49
|
+
},
|
|
50
|
+
"./components/*": "./components/*"
|
|
51
|
+
},
|
|
52
|
+
"main": "./dist/index.js",
|
|
53
|
+
"types": "./dist/index.d.ts",
|
|
54
|
+
"files": [
|
|
55
|
+
"dist",
|
|
56
|
+
"components",
|
|
57
|
+
"README.md"
|
|
58
|
+
],
|
|
59
|
+
"scripts": {
|
|
60
|
+
"build": "tsc",
|
|
61
|
+
"test": "vitest run",
|
|
62
|
+
"test:watch": "vitest",
|
|
63
|
+
"prepublishOnly": "npm run build && npm test"
|
|
64
|
+
},
|
|
65
|
+
"dependencies": {
|
|
66
|
+
"@atproto/api": "^0.15.0",
|
|
67
|
+
"zod": "^3.24.0"
|
|
68
|
+
},
|
|
69
|
+
"devDependencies": {
|
|
70
|
+
"@types/node": "^22.0.0",
|
|
71
|
+
"typescript": "^5.7.0",
|
|
72
|
+
"vitest": "^4.0.16"
|
|
73
|
+
},
|
|
74
|
+
"peerDependencies": {
|
|
75
|
+
"astro": "^5.0.0"
|
|
76
|
+
}
|
|
77
|
+
}
|