@gscdump/contracts 1.5.4 → 2.0.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.
@@ -1,4 +1,4 @@
1
- import { addPartnerTeamMemberSchema, bindPartnerSiteTeamSchema, bindPartnerTeamCatalogResponseSchema, bindPartnerTeamCatalogSchema, builderStateSchema, createPartnerTeamSchema, gscComparisonFilterSchema, gscdumpAnalysisBundleResponseSchema, gscdumpAnalysisPresetSchema, gscdumpAnalysisResponseSchema, gscdumpAvailableSiteSchema, gscdumpCanonicalMismatchesResponseSchema, gscdumpDataDetailResponseSchema, gscdumpDataResponseSchema, gscdumpDeletePartnerUserResponseSchema, gscdumpIndexPercentResponseSchema, gscdumpIndexingDiagnosticsResponseSchema, gscdumpIndexingResponseSchema, gscdumpIndexingTransitionFieldSchema, gscdumpKeywordSparklinesResponseSchema, gscdumpPageTrendResponseSchema, gscdumpQueryTrendResponseSchema, gscdumpSiteRegistrationSchema, gscdumpSitemapChangesResponseSchema, gscdumpSitemapMembershipParamsSchema, gscdumpSitemapMembershipResponseSchema, gscdumpSitemapsResponseSchema, gscdumpTeamRoleSchema, gscdumpTopAssociationResponseSchema, gscdumpUserRegistrationSchema, indexingUrlsResponseSchema, partnerSiteTeamBindingResponseSchema, partnerSitemapActionResponseSchema, partnerSitemapActionSchema, partnerTeamCreatedResponseSchema, partnerTeamDeletedResponseSchema, partnerTeamMemberAddedResponseSchema, partnerTeamMemberRemovedResponseSchema, partnerTeamMemberRoleResponseSchema, partnerTeamMembersResponseSchema, partnerTeamRenamedResponseSchema, registerPartnerSiteSchema, registerPartnerUserSchema, renamePartnerTeamSchema, searchTypeSchema, siteIntIdCrosswalkResponseSchema, sitemapChangesTruncationReasonSchema, teamCatalogRefSchema, updatePartnerUserTokensSchema } from "../schemas.mjs";
1
+ import { addPartnerTeamMemberSchema, bindPartnerSiteTeamSchema, bindPartnerTeamCatalogResponseSchema, bindPartnerTeamCatalogSchema, builderStateSchema, createPartnerTeamSchema, gscComparisonFilterSchema, gscdumpAnalysisBundleResponseSchema, gscdumpAnalysisPresetSchema, gscdumpAnalysisResponseSchema, gscdumpAvailableSiteSchema, gscdumpCanonicalMismatchesResponseSchema, gscdumpDataDetailResponseSchema, gscdumpDataResponseSchema, gscdumpDeletePartnerUserResponseSchema, gscdumpIndexPercentResponseSchema, gscdumpIndexingDiagnosticsResponseSchema, gscdumpIndexingResponseSchema, gscdumpIndexingTransitionFieldSchema, gscdumpKeywordSparklinesResponseSchema, gscdumpPageTrendResponseSchema, gscdumpQueryTrendResponseSchema, gscdumpSiteRegistrationSchema, gscdumpSitemapChangesResponseSchema, gscdumpSitemapExportQuerySchema, gscdumpSitemapExportResponseSchema, gscdumpSitemapMembershipParamsSchema, gscdumpSitemapMembershipResponseSchema, gscdumpSitemapUrlsQuerySchema, gscdumpSitemapUrlsResponseSchema, gscdumpSitemapsResponseSchema, gscdumpTeamRoleSchema, gscdumpTopAssociationResponseSchema, gscdumpUserRegistrationSchema, indexingUrlsResponseSchema, partnerSiteTeamBindingResponseSchema, partnerSitemapActionResponseSchema, partnerSitemapActionSchema, partnerTeamCreatedResponseSchema, partnerTeamDeletedResponseSchema, partnerTeamMemberAddedResponseSchema, partnerTeamMemberRemovedResponseSchema, partnerTeamMemberRoleResponseSchema, partnerTeamMembersResponseSchema, partnerTeamRenamedResponseSchema, registerPartnerSiteSchema, registerPartnerUserSchema, renamePartnerTeamSchema, searchTypeSchema, siteIntIdCrosswalkResponseSchema, sitemapChangesTruncationReasonSchema, teamCatalogRefSchema, updatePartnerUserTokensSchema } from "../schemas.mjs";
2
2
  import "./version.mjs";
3
3
  import { HTTP_V1_ERROR_CODES, defineHttpOperation, defineHttpSurface, defineResponseObject, defineSuccessResponse } from "./http-core.mjs";
4
4
  import { GSCDUMP_REALTIME_ACK_POLICY, GSCDUMP_REALTIME_CLOSE_CODES, GSCDUMP_REALTIME_CONNECTION_POLICY, GSCDUMP_REALTIME_LIMITS, GSCDUMP_REALTIME_PING, GSCDUMP_REALTIME_PONG, GSCDUMP_REALTIME_REPLAY_POLICY, GSCDUMP_REALTIME_SUBPROTOCOL, GSCDUMP_REALTIME_TICKET_AUDIENCE, GSCDUMP_REALTIME_TICKET_ISSUER, GSCDUMP_REALTIME_TICKET_POLICY, GSCDUMP_REALTIME_TICKET_PREFIX, REALTIME_V1_EVENT_SEMANTICS, createRealtimeV1Schemas } from "./realtime.mjs";
@@ -242,10 +242,12 @@ function createGscdumpV1Protocol() {
242
242
  _tag: z.literal("truncated"),
243
243
  scannedUrls: z.number().int().nonnegative(),
244
244
  reasons: z.array(sitemapChangesTruncationReasonSchema).min(1),
245
+ historyAvailableFrom: z.number().int().nonnegative().optional(),
245
246
  limits: z.strictObject({
246
247
  scannedUrls: z.number().int().positive(),
247
248
  added: z.number().int().positive(),
248
- removed: z.number().int().positive()
249
+ removed: z.number().int().positive(),
250
+ updated: z.number().int().positive()
249
251
  })
250
252
  };
251
253
  const sitemapChangesResponse = defineSuccessResponse(defineResponseObject({
@@ -495,6 +497,16 @@ function createGscdumpV1Protocol() {
495
497
  }, partnerResponseMeta);
496
498
  const sitemapMembershipRequest = gscdumpSitemapMembershipParamsSchema.strict();
497
499
  const sitemapMembershipResponse = defineSuccessResponse(defineResponseObject(gscdumpSitemapMembershipResponseSchema.shape), partnerResponseMeta);
500
+ const sitemapUrlsQuery = gscdumpSitemapUrlsQuerySchema;
501
+ const sitemapUrlsResponse = defineSuccessResponse({
502
+ producer: gscdumpSitemapUrlsResponseSchema,
503
+ client: gscdumpSitemapUrlsResponseSchema
504
+ }, partnerResponseMeta);
505
+ const sitemapExportQuery = gscdumpSitemapExportQuerySchema;
506
+ const sitemapExportResponse = defineSuccessResponse({
507
+ producer: gscdumpSitemapExportResponseSchema,
508
+ client: gscdumpSitemapExportResponseSchema
509
+ }, partnerResponseMeta);
498
510
  const createTeamRequest = createPartnerTeamSchema.strict();
499
511
  const teamCreatedResponse = defineSuccessResponse(defineResponseObject(partnerTeamCreatedResponseSchema.shape), partnerResponseMeta);
500
512
  const renameTeamRequest = renamePartnerTeamSchema.strict();
@@ -1335,6 +1347,7 @@ function createGscdumpV1Protocol() {
1335
1347
  sitemaps: [],
1336
1348
  history: [],
1337
1349
  perSitemapHistory: {},
1350
+ generation: null,
1338
1351
  meta: {
1339
1352
  siteUrl: "sc-domain:example.com",
1340
1353
  gscPropertyUrl: "sc-domain:example.com",
@@ -1407,9 +1420,12 @@ function createGscdumpV1Protocol() {
1407
1420
  data: {
1408
1421
  added: [],
1409
1422
  removed: [],
1423
+ updated: [],
1424
+ generation: null,
1410
1425
  summary: {
1411
1426
  totalAdded: 0,
1412
1427
  totalRemoved: 0,
1428
+ totalUpdated: 0,
1413
1429
  period: { days: 28 }
1414
1430
  },
1415
1431
  completeness: {
@@ -2749,26 +2765,169 @@ function createGscdumpV1Protocol() {
2749
2765
  lifecycle: { introduced: "1.3.0" },
2750
2766
  docs: {
2751
2767
  summary: "Query sitemap membership",
2752
- description: "Checks whether each requested URL is present in the site's known sitemaps, subject to a freshness cap.",
2768
+ description: "Returns generation-pinned present, absent, or unknown evidence for each exact requested URL.",
2753
2769
  tags: ["Sitemaps"],
2754
2770
  examples: {
2755
2771
  request: {
2756
2772
  params: { siteId: "s_01" },
2757
- body: {
2758
- urls: ["https://example.com/"],
2759
- maxAgeDays: 30
2760
- }
2773
+ body: { urls: ["https://example.com/"] }
2761
2774
  },
2762
2775
  response: {
2763
2776
  data: {
2764
- urls: [],
2777
+ generation: null,
2778
+ evidence: [{
2779
+ _tag: "unknown",
2780
+ url: "https://example.com/",
2781
+ reason: "no_generation"
2782
+ }],
2765
2783
  meta: {
2766
- available: true,
2767
- reason: null,
2768
2784
  requested: 1,
2769
- checked: 1,
2770
- matched: 0,
2771
- newestFetchedAt: null
2785
+ checked: 0,
2786
+ matched: 0
2787
+ }
2788
+ },
2789
+ meta: {
2790
+ requestId: "req_01",
2791
+ surface: "partner",
2792
+ version: "1.0"
2793
+ }
2794
+ }
2795
+ }
2796
+ }
2797
+ }),
2798
+ listSitemapUrls: defineHttpOperation({
2799
+ id: "partner.sites.sitemaps.urls.get",
2800
+ method: "GET",
2801
+ path: "/sites/{siteId}/sitemaps/urls",
2802
+ visibility: "public",
2803
+ semantics: {
2804
+ kind: "query",
2805
+ sideEffects: "none",
2806
+ idempotent: true,
2807
+ retry: "idempotent",
2808
+ readConsistency: "primary"
2809
+ },
2810
+ auth: {
2811
+ credentials: ["user_key", "partner_key"],
2812
+ scopes: ["sitemaps:read"],
2813
+ ownership: [{
2814
+ credential: "user_key",
2815
+ rule: "authorized_site"
2816
+ }, {
2817
+ credential: "partner_key",
2818
+ rule: "authorized_site"
2819
+ }]
2820
+ },
2821
+ request: {
2822
+ params: z.strictObject({ siteId: realtimeSchemas.publicSiteId }),
2823
+ query: sitemapUrlsQuery,
2824
+ headers: requestHeaders,
2825
+ body: null
2826
+ },
2827
+ responses: { 200: sitemapUrlsResponse },
2828
+ errors: partnerSiteErrors,
2829
+ errorResponse: errorEnvelopeSchemas(partnerSiteErrors, realtimeSchemas.publicRequestId),
2830
+ resources: {
2831
+ reads: [{
2832
+ type: "site.sitemaps",
2833
+ idFrom: "params.siteId"
2834
+ }],
2835
+ changes: []
2836
+ },
2837
+ lifecycle: { introduced: "2.0.0" },
2838
+ docs: {
2839
+ summary: "List sitemap URLs",
2840
+ description: "Returns an exact generation-pinned cursor page of sitemap membership and lastmod evidence.",
2841
+ tags: ["Sitemaps"],
2842
+ examples: {
2843
+ request: {
2844
+ params: { siteId: "s_01" },
2845
+ query: { limit: 500 }
2846
+ },
2847
+ response: {
2848
+ data: {
2849
+ generation: {
2850
+ id: "site-01JZ",
2851
+ observedAt: 1753746e6,
2852
+ publishedAt: 1753746000100,
2853
+ completeness: { _tag: "complete" },
2854
+ membershipHistoryAvailableFrom: 1753746e6,
2855
+ legacyImport: { _tag: "none" }
2856
+ },
2857
+ items: [],
2858
+ page: {
2859
+ nextCursor: null,
2860
+ limit: 500
2861
+ }
2862
+ },
2863
+ meta: {
2864
+ requestId: "req_01",
2865
+ surface: "partner",
2866
+ version: "1.0"
2867
+ }
2868
+ }
2869
+ }
2870
+ }
2871
+ }),
2872
+ getSitemapExport: defineHttpOperation({
2873
+ id: "partner.sites.sitemaps.export.get",
2874
+ method: "GET",
2875
+ path: "/sites/{siteId}/sitemaps/export",
2876
+ visibility: "public",
2877
+ semantics: {
2878
+ kind: "query",
2879
+ sideEffects: "none",
2880
+ idempotent: true,
2881
+ retry: "idempotent",
2882
+ readConsistency: "primary"
2883
+ },
2884
+ auth: {
2885
+ credentials: ["user_key", "partner_key"],
2886
+ scopes: ["sitemaps:read"],
2887
+ ownership: [{
2888
+ credential: "user_key",
2889
+ rule: "authorized_site"
2890
+ }, {
2891
+ credential: "partner_key",
2892
+ rule: "authorized_site"
2893
+ }]
2894
+ },
2895
+ request: {
2896
+ params: z.strictObject({ siteId: realtimeSchemas.publicSiteId }),
2897
+ query: sitemapExportQuery,
2898
+ headers: requestHeaders,
2899
+ body: null
2900
+ },
2901
+ responses: { 200: sitemapExportResponse },
2902
+ errors: partnerSiteErrors,
2903
+ errorResponse: errorEnvelopeSchemas(partnerSiteErrors, realtimeSchemas.publicRequestId),
2904
+ resources: {
2905
+ reads: [{
2906
+ type: "site.sitemaps",
2907
+ idFrom: "params.siteId"
2908
+ }],
2909
+ changes: []
2910
+ },
2911
+ lifecycle: { introduced: "2.0.0" },
2912
+ docs: {
2913
+ summary: "Get sitemap bulk export",
2914
+ description: "Returns a generation-pinned expiring URL for the full NDJSON sitemap projection.",
2915
+ tags: ["Sitemaps"],
2916
+ examples: {
2917
+ request: { params: { siteId: "s_01" } },
2918
+ response: {
2919
+ data: {
2920
+ generation: {
2921
+ id: "site-01JZ",
2922
+ observedAt: 1753746e6,
2923
+ publishedAt: 1753746000100,
2924
+ completeness: { _tag: "complete" },
2925
+ membershipHistoryAvailableFrom: 1753746e6,
2926
+ legacyImport: { _tag: "none" }
2927
+ },
2928
+ export: {
2929
+ _tag: "unavailable",
2930
+ reason: "export_unavailable"
2772
2931
  }
2773
2932
  },
2774
2933
  meta: {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@gscdump/contracts",
3
3
  "type": "module",
4
- "version": "1.5.4",
4
+ "version": "2.0.1",
5
5
  "description": "Shared gscdump.com API, webhook, realtime, and lifecycle contracts.",
6
6
  "author": {
7
7
  "name": "Harlan Wilton",